1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал Anti x-ray texture

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем qwertyYy2, 23 фев 2013.

  1. Автор темы
    qwertyYy2

    qwertyYy2 Старожил

    Баллы:
    103
    прошу проверить, вроде работает.
     

    Вложения:

    Ukranos45 нравится это.
  2. LaoTheLizard

    LaoTheLizard Старожил Пользователь

    Баллы:
    103
    Skype:
    sgp_the_controller
    Мне все равно, кто автор - в любом случае, вещь отличная, спасибо автору, отдельное спасибо выложившему готовые .class-файлы. Всё работает.
     
  3. Ukranos45

    Ukranos45 Активный участник

    Баллы:
    78
    Skype:
    maksim.kakashi
    Имя в Minecraft:
    Ukranos
    Спс
    ЛАЙК
     
  4. alex55i

    alex55i Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    alex55i
    Там что нибудь изменилось?
     
  5. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Насколько я знаю текстурпаки поменялись.
     
  6. Евгеха19_93

    Евгеха19_93 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    Xeleon
    slenky duckmen , думаю будет полезно, может закрепить тему? :3
     
  7. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    еслиб еще под 1.5.1 сделали.
     
    Alisher-98 нравится это.
  8. slenky

    slenky Старожил Пользователь

    Баллы:
    173
    Пусть и полезно, но чем это полезнее других туториалов? Думайте головой.
     
    Black-UK-Lord, Сникерсни и slavik123123123 нравится это.
  9. alex55i

    alex55i Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    alex55i
    Версия 1.5.1

    2013-04-03_22.04.34.png

    TexturePackCustom
    Код:
    package net.minecraft.src;
     
    import java.awt.image.BufferedImage;
    import java.awt.image.DataBufferByte;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Enumeration;
    import java.util.regex.Pattern;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipException;
    import java.util.zip.ZipFile;
     
    import javax.imageio.ImageIO;
     
    public class TexturePackCustom extends TexturePackImplementation
    {
        /** ZipFile object used to access the texture pack file's contents. */
        private ZipFile texturePackZipFile;
     
        public TexturePackCustom(String par1Str, File par2File, ITexturePack par3ITexturePack)
        {
            super(par1Str, par2File, par2File.getName(), par3ITexturePack);
        }
     
        /**
        * Delete the OpenGL texture id of the pack's thumbnail image, and close the zip file in case of TexturePackCustom.
        */
        public void deleteTexturePack(RenderEngine par1RenderEngine)
        {
            super.deleteTexturePack(par1RenderEngine);
     
            try
            {
                if (texturePackZipFile != null)
                {
                    texturePackZipFile.close();
                }
            }
            catch (IOException var3)
            {
            }
     
            texturePackZipFile = null;
        }
     
        protected InputStream func_98139_b(String name) throws IOException
        {
            openTexturePackFile();
            ZipEntry var2 = texturePackZipFile.getEntry(name.substring(1));
     
            if (var2 == null)
            {
                throw new FileNotFoundException(name);
            }
            else
            {
                return filterStream(name, texturePackZipFile.getInputStream(var2));
            }
        }
     
        public boolean func_98140_c(String name)
        {
            try
            {
                openTexturePackFile();
                return texturePackZipFile.getEntry(name.substring(1)) != null;
            }
            catch (Exception var3)
            {
                return false;
            }
        }
     
        /**
        * Open the texture pack's file and initialize texturePackZipFile
        */
        private void openTexturePackFile() throws IOException, ZipException
        {
            if (texturePackZipFile == null)
            {
                texturePackZipFile = new ZipFile(texturePackFile);
            }
        }
     
        public boolean isCompatible()
        {
            try
            {
                openTexturePackFile();
                Enumeration var1 = texturePackZipFile.entries();
     
                while (var1.hasMoreElements())
                {
                    ZipEntry var2 = (ZipEntry)var1.nextElement();
     
                    if (var2.getName().startsWith("textures/"))
                    {
                        return true;
                    }
                }
            }
            catch (Exception var3)
            {
            }
     
            boolean var4 = func_98140_c("terrain.png") || func_98140_c("gui/items.png");
            return !var4;
        }
     
        public static InputStream filterStream(String entryname, InputStream is) throws IOException
        {
            try
            {
                entryname = entryname.replace('\\', '/');
                if (!entryname.contains("textures/blocks/") || !entryname.endsWith(".png"))
                    return is;
     
                String texturename = entryname.substring(entryname.lastIndexOf('/') +1, entryname.lastIndexOf(".png"));
                for (String pattern : patterns)
                {
                    if (Pattern.compile("^" + pattern + "$").matcher(texturename).matches())
                        return is;
                }
     
                BufferedImage img = ImageIO.read(is);
                byte[] imageData = ((DataBufferByte)img.getRaster().getDataBuffer()).getData();
     
                for (int i = 0; i < imageData.length; i+=4)
                    imageData[i] = (byte)0xFF;
     
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ImageIO.write(img, "png", baos);
                return new ByteArrayInputStream(baos.toByteArray());
            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
            return null;
        }
     
        static final String[] patterns = new String[] { "activatorRail(_powered)?", "anvil_(top(_damaged_[1-2])?|base)", "bed_(feet|head)_(end|side|top)", "brewingStand", "cactus_(bottom|side|top)", "cake_(bottom|inner|side|top)", "carrots_[0-3]", "cauldron_(bottom|inner|side|top)", "cocoa_[0-7]", "deadbush", "destroy_[0-9]", "detectorRail", "door(Iron|Wood)_(lower|upper)", "fenceIron", "fern", "fire_[0-1]", "flower(Pot)?", "glass", "goldenRail(_powered)?", "grass_side_overlay", "hopper_top", "ice", "ladder", "lava(_flow)?", "leaves(_(jungle|spruce))?", "lever", "mobSpawner", "mushroom_(brown|red)", "netherStalk_[0-2]", "portal", "potatoes_[0-3]", "rail(_turn)?", "redstoneDust_(cross|line)(_overlay)?", "redtorch(_lit)?", "reeds", "rose", "sapling(_(birch|jungle|spruce))?", "stem_(bent|straight)", "tallgrass", "thinglass_top", "torch", "trapdoor", "tripWire(Source)?", "vine", "water(_flow)?", "waterlily", "web" };
    }
    
    TexturePackFolder
    Код:
    package net.minecraft.src;
     
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
     
    public class TexturePackFolder extends TexturePackImplementation
    {
        public TexturePackFolder(String par1, File par2, ITexturePack par3ITexturePack)
        {
            super(par1, par2, par2.getName(), par3ITexturePack);
        }
     
        protected InputStream func_98139_b(String name) throws IOException
        {
            File var2 = new File(texturePackFile, name.substring(1));
     
            if (!var2.exists())
            {
                throw new FileNotFoundException(name);
            }
            else
            {
                return TexturePackCustom.filterStream(name, new BufferedInputStream(new FileInputStream(var2)));
            }
        }
     
        public boolean func_98140_c(String par1Str)
        {
            File var2 = new File(texturePackFile, par1Str);
            return var2.exists() && var2.isFile();
        }
     
        public boolean isCompatible()
        {
            File var1 = new File(texturePackFile, "textures/");
            boolean var2 = var1.exists() && var1.isDirectory();
            boolean var3 = func_98140_c("terrain.png") || func_98140_c("gui/items.png");
            return var2 || !var3;
        }
    }
    
     

    Вложения:

  10. Автор темы
    qwertyYy2

    qwertyYy2 Старожил

    Баллы:
    103
    запретить поршни :)
    пытался устранить, не получилось
     
    ПриветОтМиднайта нравится это.
  11. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Можно запретить поршням двигать светокамень. Все равно игроки в мирных целях этим никогда не пользовались, а особенно сейчас когда ввели лампы. Для этого декомпилим клиент с помощью MCP и ищем файл BlockPistonBase.java, в нем строчку

    Код:
     if (par0 == Block.obsidian.blockID)
            {
                return false;
            }
    Меняем на такую:

    Код:
     if ((par0 == Block.obsidian.blockID) || (par0 == Block.glowStone.blockID))
            {
                return false;
            }
    Рекомпилим и теперь светокамень нельзя двигать поршнем. Готовый класс для 1.5.1 прикладываю к сообщению.
     

    Вложения:

    • aqt.zip
      Размер файла:
      5 КБ
      Просмотров:
      8
    WalpeR, I-Am-Black-Overlord, Coffee и 2 другим нравится это.
  12. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А не проще плагином сделать?
     
    slavik123123123 нравится это.
  13. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Разницы никакой абсолютно. Я плагины делать не умею, поэтому предпочел сделать так.
     
  14. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Переписывать клиент каждый раз.. хм.. хардкорно.. можно и так :)
     
  15. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Ну это на тот случай если свой лаунчер. :)
     
  16. ZaRRaZa

    ZaRRaZa Старожил

    Баллы:
    103
    Автор молодец 5+, сможешь сделать для 1.5 ?
     
  17. Raptor2108

    Raptor2108 Старожил Пользователь

    Баллы:
    173
    Выше пролистай и увидишь.
     
    ВремяПриключений и ZaRRaZa нравится это.
  18. LaoTheLizard

    LaoTheLizard Старожил Пользователь

    Баллы:
    103
    Skype:
    sgp_the_controller
    Установил этот скрипт, но не смог придумать, как заставить игроков сменить клиент на этот, более защищенный. Вчера спалил "счастливчика" плагином статистики. Заинтересовался. В итоге нашёл очень простой и действенный метод защиты от "старых" версий клиента. (делюсь) Нужно изменить путь (имя) файла входа на сервере, и внести соответствующую коррекцию в клиент. Если клиент не обновить - зайти в игру просто не удастся. Конечно, метод деревенский - зато минимум затрат времени и мозга при максимуме КПД против большинства школоты.

    Ну, в общем, думал, что решил проблему. Но сегодня мальчуган снова зашёл. И снова превысил допустимый процентный лимит добычи ценных ресурсов. Был в растерянности. Начал копать. Проверил действие сабжа данной темы - всё работает. Нашёл нодус, попробовал установить - всё правильно, не работает. Нодус.

    В общем, и так много уже написал. Короче, данные классы обрабатывают текстурпаки внешние. Но ведь никто не отменял внутренние? А внутренний, между тем, заменяется тупо копированием содержимого архива внешнего текстурпака внутрь minecraft.jar. Попробовал. Текстуры прозрачны. Вижу алмазы. И не только.

    Резюмируя. Понимаю, что 1.4.5 уже "слегка" устарел. Тем не менее, если не очень сложно, пропатчите, пожалуйста, сабж.
     
  19. agentik007

    agentik007 Старожил Пользователь

    Баллы:
    153
    Имя в Minecraft:
    agentik007
    Элементарно ватсон! Использовать лаунчер с md5
     
    iSemka нравится это.
  20. ptnk

    ptnk Старожил Пользователь

    Баллы:
    173
    Человек найдет способ обхода md5. xD.
     
    ВремяПриключений нравится это.

Поделиться этой страницей