The text below is selected, press Ctrl+C to copy to your clipboard. (⌘+C on Mac) No line numbers will be copied.
Guest
ModLoader :/
By Guest on 11th October 2018 01:09:02 AM | Syntax: JAVA | Views: 1



New paste | Download | Show/Hide line no. | Copy text to clipboard
  1. import java.awt.image.BufferedImage;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.lang.reflect.Field;
  9. import java.lang.reflect.InvocationTargetException;
  10. import java.lang.reflect.Method;
  11. import java.net.URL;
  12. import java.net.URLClassLoader;
  13. import java.net.URLDecoder;
  14. import java.util.ArrayList;
  15. import java.util.Arrays;
  16. import java.util.Collections;
  17. import java.util.HashMap;
  18. import java.util.HashSet;
  19. import java.util.Iterator;
  20. import java.util.LinkedList;
  21. import java.util.List;
  22. import java.util.Map;
  23. import java.util.Properties;
  24. import java.util.Random;
  25. import java.util.Map.Entry;
  26. import java.util.logging.FileHandler;
  27. import java.util.logging.Level;
  28. import java.util.logging.Logger;
  29. import java.util.logging.SimpleFormatter;
  30. import java.util.zip.ZipEntry;
  31. import java.util.zip.ZipInputStream;
  32. import javax.imageio.ImageIO;
  33. import net.minecraft.client.Minecraft;
  34. import org.lwjgl.input.Keyboard;
  35.  
  36. public final class ModLoader {
  37.  
  38.    private static final List animList = new LinkedList();
  39.    private static final Map blockModels = new HashMap();
  40.    private static final Map blockSpecialInv = new HashMap();
  41.    private static final File cfgdir = new File(Minecraft.b(), "/config/");
  42.    private static final File cfgfile = new File(cfgdir, "ModLoader.cfg");
  43.    public static Level cfgLoggingLevel = Level.FINER;
  44.    private static Map classMap = null;
  45.    private static long clock = 0L;
  46.    public static final boolean DEBUG = false;
  47.    private static Field field_animList = null;
  48.    private static Field field_armorList = null;
  49.    private static Field field_blockList = null;
  50.    private static Field field_modifiers = null;
  51.    private static Field field_TileEntityRenderers = null;
  52.    private static boolean hasInit = false;
  53.    private static int highestEntityId = 3000;
  54.    private static final Map inGameHooks = new HashMap();
  55.    private static final Map inGUIHooks = new HashMap();
  56.    private static Minecraft instance = null;
  57.    private static int itemSpriteIndex = 0;
  58.    private static int itemSpritesLeft = 0;
  59.    private static final Map keyList = new HashMap();
  60.    private static final File logfile = new File(Minecraft.b(), "ModLoader.txt");
  61.    private static final Logger logger = Logger.getLogger("ModLoader");
  62.    private static FileHandler logHandler = null;
  63.    private static Method method_RegisterEntityID = null;
  64.    private static Method method_RegisterTileEntity = null;
  65.    private static final File modDir = new File(Minecraft.b(), "/mods/");
  66.    private static final LinkedList modList = new LinkedList();
  67.    private static int nextBlockModelID = 1000;
  68.    private static final Map overrides = new HashMap();
  69.    public static final Properties props = new Properties();
  70.    private static kd[] standardBiomes;
  71.    private static int terrainSpriteIndex = 0;
  72.    private static int terrainSpritesLeft = 0;
  73.    private static String texPack = null;
  74.    private static boolean texturesAdded = false;
  75.    private static final boolean[] usedItemSprites = new boolean[256];
  76.    private static final boolean[] usedTerrainSprites = new boolean[256];
  77.    public static final String VERSION = "ModLoader Beta 1.7.3";
  78.    private static int currentTerrain = 0;
  79.    private static int terrainNum = 1;
  80.    private static int currentItem = 0;
  81.    private static int itemNum = 1;
  82.    private static ArrayList terrainsToCopy = new ArrayList();
  83.    private static ArrayList itemsToCopy = new ArrayList();
  84.  
  85.  
  86.    public static void AddAchievementDesc(ny achievement, String s, String s1) {
  87.       try {
  88.          if(achievement.f.contains(".")) {
  89.             String[] nosuchfieldexception = achievement.f.split("\\.");
  90.             if(nosuchfieldexception.length == 2) {
  91.                String s2 = nosuchfieldexception[1];
  92.                AddLocalization("achievement." + s2, s);
  93.                AddLocalization("achievement." + s2 + ".desc", s1);
  94.                setPrivateValue(vr.class, achievement, 1, nh.a().a("achievement." + s2));
  95.                setPrivateValue(ny.class, achievement, 3, nh.a().a("achievement." + s2 + ".desc"));
  96.             } else {
  97.                setPrivateValue(vr.class, achievement, 1, s);
  98.                setPrivateValue(ny.class, achievement, 3, s1);
  99.             }
  100.          } else {
  101.             setPrivateValue(vr.class, achievement, 1, s);
  102.             setPrivateValue(ny.class, achievement, 3, s1);
  103.          }
  104.       } catch (IllegalArgumentException var5) {
  105.          logger.throwing("ModLoader", "AddAchievementDesc", var5);
  106.          ThrowException(var5);
  107.       } catch (SecurityException var6) {
  108.          logger.throwing("ModLoader", "AddAchievementDesc", var6);
  109.          ThrowException(var6);
  110.       } catch (NoSuchFieldException var7) {
  111.          logger.throwing("ModLoader", "AddAchievementDesc", var7);
  112.          ThrowException(var7);
  113.       }
  114.  
  115.    }
  116.  
  117.    public static int AddAllFuel(int i) {
  118.       logger.finest("Finding fuel for " + i);
  119.       int j = 0;
  120.  
  121.       for(Iterator iterator = modList.iterator(); iterator.hasNext() && j == 0; j = ((BaseMod)iterator.next()).AddFuel(i)) {
  122.          ;
  123.       }
  124.  
  125.       if(j != 0) {
  126.          logger.finest("Returned " + j);
  127.       }
  128.  
  129.       return j;
  130.    }
  131.  
  132.    public static void AddAllRenderers(Map map) {
  133.       if(!hasInit) {
  134.          init();
  135.          logger.fine("Initialized");
  136.       }
  137.  
  138.       Iterator iterator = modList.iterator();
  139.  
  140.       while(iterator.hasNext()) {
  141.          BaseMod basemod = (BaseMod)iterator.next();
  142.          basemod.AddRenderer(map);
  143.       }
  144.  
  145.    }
  146.  
  147.    public static void addAnimation(aw texturefx) {
  148.       logger.finest("Adding animation " + texturefx.toString());
  149.       Iterator iterator = animList.iterator();
  150.  
  151.       while(iterator.hasNext()) {
  152.          aw texturefx1 = (aw)iterator.next();
  153.          if(texturefx1.f == texturefx.f && texturefx1.b == texturefx.b) {
  154.             animList.remove(texturefx);
  155.             break;
  156.          }
  157.       }
  158.  
  159.       animList.add(texturefx);
  160.    }
  161.  
  162.    public static int AddArmor(String s) {
  163.       try {
  164.          String[] illegalaccessexception = (String[])((String[])field_armorList.get((Object)null));
  165.          List list = Arrays.asList(illegalaccessexception);
  166.          ArrayList arraylist = new ArrayList();
  167.          arraylist.addAll(list);
  168.          if(!arraylist.contains(s)) {
  169.             arraylist.add(s);
  170.          }
  171.  
  172.          int i = arraylist.indexOf(s);
  173.          field_armorList.set((Object)null, arraylist.toArray(new String[0]));
  174.          return i;
  175.       } catch (IllegalArgumentException var5) {
  176.          logger.throwing("ModLoader", "AddArmor", var5);
  177.          ThrowException("An impossible error has occured!", var5);
  178.       } catch (IllegalAccessException var6) {
  179.          logger.throwing("ModLoader", "AddArmor", var6);
  180.          ThrowException("An impossible error has occured!", var6);
  181.       }
  182.  
  183.       return -1;
  184.    }
  185.  
  186.    public static void AddLocalization(String s, String s1) {
  187.       Properties properties = null;
  188.  
  189.       try {
  190.          properties = (Properties)getPrivateValue(nh.class, nh.a(), 1);
  191.       } catch (SecurityException var4) {
  192.          logger.throwing("ModLoader", "AddLocalization", var4);
  193.          ThrowException(var4);
  194.       } catch (NoSuchFieldException var5) {
  195.          logger.throwing("ModLoader", "AddLocalization", var5);
  196.          ThrowException(var5);
  197.       }
  198.  
  199.       if(properties != null) {
  200.          properties.put(s, s1);
  201.       }
  202.  
  203.    }
  204.  
  205.    private static void addMod(ClassLoader classloader, String s) {
  206.       try {
  207.          String throwable = s.split("\\.")[0];
  208.          if(throwable.contains("$")) {
  209.             return;
  210.          }
  211.  
  212.          if(props.containsKey(throwable) && (props.getProperty(throwable).equalsIgnoreCase("no") || props.getProperty(throwable).equalsIgnoreCase("off"))) {
  213.             return;
  214.          }
  215.  
  216.          Package package1 = ModLoader.class.getPackage();
  217.          if(package1 != null) {
  218.             throwable = package1.getName() + "." + throwable;
  219.          }
  220.  
  221.          Class class1 = classloader.loadClass(throwable);
  222.          if(!BaseMod.class.isAssignableFrom(class1)) {
  223.             return;
  224.          }
  225.  
  226.          setupProperties(class1);
  227.          BaseMod basemod = (BaseMod)class1.newInstance();
  228.          if(basemod != null) {
  229.             modList.add(basemod);
  230.             logger.fine("Mod Loaded: \"" + basemod.toString() + "\" from " + s);
  231.             System.out.println("Mod Loaded: " + basemod.toString());
  232.          }
  233.       } catch (Throwable var6) {
  234.          logger.fine("Failed to load mod from \"" + s + "\"");
  235.          System.out.println("Failed to load mod from \"" + s + "\"");
  236.          logger.throwing("ModLoader", "addMod", var6);
  237.          ThrowException(var6);
  238.       }
  239.  
  240.    }
  241.  
  242.    public static void AddName(Object obj, String s) {
  243.       String s1 = null;
  244.       Exception exception13;
  245.       if(obj instanceof gm) {
  246.          gm exception1 = (gm)obj;
  247.          if(exception1.a() != null) {
  248.             s1 = exception1.a() + ".name";
  249.          }
  250.       } else if(obj instanceof uu) {
  251.          uu exception11 = (uu)obj;
  252.          if(exception11.o() != null) {
  253.             s1 = exception11.o() + ".name";
  254.          }
  255.       } else if(obj instanceof iz) {
  256.          iz exception12 = (iz)obj;
  257.          if(exception12.l() != null) {
  258.             s1 = exception12.l() + ".name";
  259.          }
  260.       } else {
  261.          exception13 = new Exception(obj.getClass().getName() + " cannot have name attached to it!");
  262.          logger.throwing("ModLoader", "AddName", exception13);
  263.          ThrowException(exception13);
  264.       }
  265.  
  266.       if(s1 != null) {
  267.          AddLocalization(s1, s);
  268.       } else {
  269.          exception13 = new Exception(obj + " is missing name tag!");
  270.          logger.throwing("ModLoader", "AddName", exception13);
  271.          ThrowException(exception13);
  272.       }
  273.  
  274.    }
  275.  
  276.    public static int addOverride(String s, String s1) {
  277.       try {
  278.          int throwable = getUniqueSpriteIndex(s);
  279.          addOverride(s, s1, throwable);
  280.          return throwable;
  281.       } catch (Throwable var3) {
  282.          logger.throwing("ModLoader", "addOverride", var3);
  283.          ThrowException(var3);
  284.          throw new RuntimeException(var3);
  285.       }
  286.    }
  287.  
  288.    public static void addOverride(String s, String s1, int i) {
  289.       boolean j = true;
  290.       String k = "Infinite";
  291.       byte j1;
  292.       if(s.equals("/terrain.png")) {
  293.          j1 = 0;
  294.       } else {
  295.          if(!s.equals("/gui/items.png")) {
  296.             return;
  297.          }
  298.  
  299.          j1 = 1;
  300.       }
  301.  
  302.       System.out.println("Overriding " + s + " with " + s1 + " @ " + i + ". " + k + " left.");
  303.       logger.finer("addOverride(" + s + "," + s1 + "," + i + "). " + k + " left.");
  304.       Object obj = (Map)overrides.get(Integer.valueOf(j1));
  305.       if(obj == null) {
  306.          obj = new HashMap();
  307.          overrides.put(Integer.valueOf(j1), obj);
  308.       }
  309.  
  310.       ((Map)((Map)obj)).put(s1, Integer.valueOf(i));
  311.    }
  312.  
  313.    public static void AddRecipe(iz itemstack, Object[] aobj) {
  314.       hk.a().a(itemstack, aobj);
  315.    }
  316.  
  317.    public static void AddShapelessRecipe(iz itemstack, Object[] aobj) {
  318.       hk.a().b(itemstack, aobj);
  319.    }
  320.  
  321.    public static void AddSmelting(int i, iz itemstack) {
  322.       ey.a().a(i, itemstack);
  323.    }
  324.  
  325.    public static void AddSpawn(Class class1, int i, lk enumcreaturetype) {
  326.       AddSpawn(class1, i, enumcreaturetype, (kd[])null);
  327.    }
  328.  
  329.    public static void AddSpawn(Class class1, int i, lk enumcreaturetype, kd[] abiomegenbase) {
  330.       if(class1 == null) {
  331.          throw new IllegalArgumentException("entityClass cannot be null");
  332.       } else if(enumcreaturetype == null) {
  333.          throw new IllegalArgumentException("spawnList cannot be null");
  334.       } else {
  335.          if(abiomegenbase == null) {
  336.             abiomegenbase = standardBiomes;
  337.          }
  338.  
  339.          for(int j = 0; j < abiomegenbase.length; ++j) {
  340.             List list = abiomegenbase[j].a(enumcreaturetype);
  341.             if(list != null) {
  342.                boolean flag = false;
  343.                Iterator iterator = list.iterator();
  344.  
  345.                while(iterator.hasNext()) {
  346.                   bj spawnlistentry = (bj)iterator.next();
  347.                   if(spawnlistentry.a == class1) {
  348.                      spawnlistentry.b = i;
  349.                      flag = true;
  350.                      break;
  351.                   }
  352.                }
  353.  
  354.                if(!flag) {
  355.                   list.add(new bj(class1, i));
  356.                }
  357.             }
  358.          }
  359.  
  360.       }
  361.    }
  362.  
  363.    public static void AddSpawn(String s, int i, lk enumcreaturetype) {
  364.       AddSpawn(s, i, enumcreaturetype, (kd[])null);
  365.    }
  366.  
  367.    public static void AddSpawn(String s, int i, lk enumcreaturetype, kd[] abiomegenbase) {
  368.       Class class1 = (Class)classMap.get(s);
  369.       if(class1 != null && ls.class.isAssignableFrom(class1)) {
  370.          AddSpawn(class1, i, enumcreaturetype, abiomegenbase);
  371.       }
  372.  
  373.    }
  374.  
  375.    public static boolean DispenseEntity(fd world, double d, double d1, double d2, int i, int j, iz itemstack) {
  376.       boolean flag = false;
  377.  
  378.       for(Iterator iterator = modList.iterator(); iterator.hasNext() && !flag; flag = ((BaseMod)iterator.next()).DispenseEntity(world, d, d1, d2, i, j, itemstack)) {
  379.          ;
  380.       }
  381.  
  382.       return flag;
  383.    }
  384.  
  385.    public static List getLoadedMods() {
  386.       return Collections.unmodifiableList(modList);
  387.    }
  388.  
  389.    public static Logger getLogger() {
  390.       return logger;
  391.    }
  392.  
  393.    public static Minecraft getMinecraftInstance() {
  394.       if(instance == null) {
  395.          try {
  396.             ThreadGroup nosuchfieldexception = Thread.currentThread().getThreadGroup();
  397.             int i = nosuchfieldexception.activeCount();
  398.             Thread[] athread = new Thread[i];
  399.             nosuchfieldexception.enumerate(athread);
  400.  
  401.             for(int j = 0; j < athread.length; ++j) {
  402.                if(athread[j].getName().equals("Minecraft main thread")) {
  403.                   instance = (Minecraft)getPrivateValue(Thread.class, athread[j], "target");
  404.                   break;
  405.                }
  406.             }
  407.          } catch (SecurityException var4) {
  408.             logger.throwing("ModLoader", "getMinecraftInstance", var4);
  409.             throw new RuntimeException(var4);
  410.          } catch (NoSuchFieldException var5) {
  411.             logger.throwing("ModLoader", "getMinecraftInstance", var5);
  412.             throw new RuntimeException(var5);
  413.          }
  414.       }
  415.  
  416.       return instance;
  417.    }
  418.  
  419.    public static Object getPrivateValue(Class class1, Object obj, int i) throws IllegalArgumentException, SecurityException, NoSuchFieldException {
  420.       try {
  421.          Field illegalaccessexception = class1.getDeclaredFields()[i];
  422.          illegalaccessexception.setAccessible(true);
  423.          return illegalaccessexception.get(obj);
  424.       } catch (IllegalAccessException var4) {
  425.          logger.throwing("ModLoader", "getPrivateValue", var4);
  426.          ThrowException("An impossible error has occured!", var4);
  427.          return null;
  428.       }
  429.    }
  430.  
  431.    public static Object getPrivateValue(Class class1, Object obj, String s) throws IllegalArgumentException, SecurityException, NoSuchFieldException {
  432.       try {
  433.          Field illegalaccessexception = class1.getDeclaredField(s);
  434.          illegalaccessexception.setAccessible(true);
  435.          return illegalaccessexception.get(obj);
  436.       } catch (IllegalAccessException var4) {
  437.          logger.throwing("ModLoader", "getPrivateValue", var4);
  438.          ThrowException("An impossible error has occured!", var4);
  439.          return null;
  440.       }
  441.    }
  442.  
  443.    public static int getUniqueBlockModelID(BaseMod basemod, boolean flag) {
  444.       int i = nextBlockModelID++;
  445.       blockModels.put(Integer.valueOf(i), basemod);
  446.       blockSpecialInv.put(Integer.valueOf(i), Boolean.valueOf(flag));
  447.       return i;
  448.    }
  449.  
  450.    public static int getUniqueEntityId() {
  451.       return highestEntityId++;
  452.    }
  453.  
  454.    private static int getUniqueItemSpriteIndex() {
  455.       while(itemSpriteIndex < usedItemSprites.length) {
  456.          if(!usedItemSprites[itemSpriteIndex]) {
  457.             usedItemSprites[itemSpriteIndex] = true;
  458.             --itemSpritesLeft;
  459.             return itemSpriteIndex++ + currentItem * 256;
  460.          }
  461.  
  462.          ++itemSpriteIndex;
  463.       }
  464.  
  465.       resetItemSprites();
  466.       return getUniqueItemSpriteIndex();
  467.    }
  468.  
  469.    private static void resetItemSprites() {
  470.       for(int file = 0; file < usedItemSprites.length; ++file) {
  471.          usedItemSprites[file] = false;
  472.       }
  473.  
  474.       itemSpriteIndex = 0;
  475.       currentItem = MCExtendedManagers.registerItem("/item" + itemNum + ".png");
  476.       File var4 = new File(PReader.MF(), "mods/smith_61/ExtendedItems/item" + itemNum + ".png");
  477.       if(!var4.exists()) {
  478.          try {
  479.             File e = new File(PReader.MF(), "mods/smith_61/ExtendedItems");
  480.             if(!e.exists()) {
  481.                e.mkdirs();
  482.             }
  483.  
  484.             File file1 = new File(PReader.MF(), "mods/smith_61/ExtendedItems/item1.png");
  485.             if(file1.exists()) {
  486.                ImageIO.write(ImageIO.read(file1), "png", var4);
  487.             } else {
  488.                itemsToCopy.add(var4);
  489.             }
  490.          } catch (Exception var3) {
  491.             throw new RuntimeException(var3);
  492.          }
  493.       }
  494.  
  495.       MCExtendedManagers.registerOutsideTexture("/item" + itemNum + ".png", var4);
  496.       ++itemNum;
  497.    }
  498.  
  499.    public static int getUniqueSpriteIndex(String s) {
  500.       if(s.equals("/gui/items.png")) {
  501.          return getUniqueItemSpriteIndex();
  502.       } else if(s.equals("/terrain.png")) {
  503.          return getUniqueTerrainSpriteIndex();
  504.       } else {
  505.          Exception exception = new Exception("No registry for this texture: " + s);
  506.          logger.throwing("ModLoader", "getUniqueItemSpriteIndex", exception);
  507.          ThrowException(exception);
  508.          return 0;
  509.       }
  510.    }
  511.  
  512.    private static int getUniqueTerrainSpriteIndex() {
  513.       while(terrainSpriteIndex < usedTerrainSprites.length) {
  514.          if(!usedTerrainSprites[terrainSpriteIndex]) {
  515.             usedTerrainSprites[terrainSpriteIndex] = true;
  516.             --terrainSpritesLeft;
  517.             return terrainSpriteIndex++ + currentTerrain * 256;
  518.          }
  519.  
  520.          ++terrainSpriteIndex;
  521.       }
  522.  
  523.       resetTerrainSprites();
  524.       return getUniqueTerrainSpriteIndex();
  525.    }
  526.  
  527.    public static void resetTerrainSprites() {
  528.       for(int file = 0; file < usedTerrainSprites.length; ++file) {
  529.          usedTerrainSprites[file] = false;
  530.       }
  531.  
  532.       terrainSpriteIndex = 0;
  533.       currentTerrain = MCExtendedManagers.registerTerrain("/terrain" + terrainNum + ".png");
  534.       File var4 = new File(PReader.MF(), "mods/smith_61/ExtendedTerrains/terrain" + terrainNum + ".png");
  535.       if(!var4.exists()) {
  536.          try {
  537.             File e = new File(PReader.MF(), "mods/smith_61/ExtendedTerrains");
  538.             if(!e.exists()) {
  539.                e.mkdirs();
  540.             }
  541.  
  542.             File file1 = new File(PReader.MF(), "mods/smith_61/ExtendedTerrains/terrain1.png");
  543.             if(file1.exists()) {
  544.                ImageIO.write(ImageIO.read(file1), "png", var4);
  545.             } else {
  546.                terrainsToCopy.add(var4);
  547.             }
  548.          } catch (Exception var3) {
  549.             throw new RuntimeException(var3);
  550.          }
  551.       }
  552.  
  553.       MCExtendedManagers.registerOutsideTexture("/terrain" + terrainNum + ".png", var4);
  554.       ++terrainNum;
  555.    }
  556.  
  557.    private static void init() {
  558.       hasInit = true;
  559.       String s = "1111111111111111111111111111111111111101111111011111111111111001111111111111111111111111111011111111100110000011111110000000001111111001100000110000000100000011000000010000001100000000000000110000000000000000000000000000000000000000000000001100000000000000";
  560.       String s1 = "1111111111111111111111111111110111111111111111111111110111111111111111111111000111111011111111111111001111111110111111111111100011111111000010001111011110000000111111000000000011111100000000001111000000000111111000000000001101000000000001111111111111000011";
  561.  
  562.       for(int throwable = 0; throwable < 256; ++throwable) {
  563.          usedItemSprites[throwable] = s.charAt(throwable) == 49;
  564.          if(!usedItemSprites[throwable]) {
  565.             ++itemSpritesLeft;
  566.          }
  567.  
  568.          usedTerrainSprites[throwable] = s1.charAt(throwable) == 49;
  569.          if(!usedTerrainSprites[throwable]) {
  570.             ++terrainSpritesLeft;
  571.          }
  572.       }
  573.  
  574.       try {
  575.          instance = (Minecraft)getPrivateValue(Minecraft.class, (Object)null, 1);
  576.          instance.t = new EntityRendererProxy(instance);
  577.          classMap = (Map)getPrivateValue(jc.class, (Object)null, 0);
  578.          field_modifiers = Field.class.getDeclaredField("modifiers");
  579.          field_modifiers.setAccessible(true);
  580.          field_blockList = gr.class.getDeclaredFields()[0];
  581.          field_blockList.setAccessible(true);
  582.          field_TileEntityRenderers = ll.class.getDeclaredFields()[0];
  583.          field_TileEntityRenderers.setAccessible(true);
  584.          field_armorList = ds.class.getDeclaredFields()[3];
  585.          field_modifiers.setInt(field_armorList, field_armorList.getModifiers() & -17);
  586.          field_armorList.setAccessible(true);
  587.          field_animList = ji.class.getDeclaredFields()[6];
  588.          field_animList.setAccessible(true);
  589.          Field[] var16 = kd.class.getDeclaredFields();
  590.          LinkedList iterator = new LinkedList();
  591.  
  592.          for(int basemod = 0; basemod < var16.length; ++basemod) {
  593.             Class class1 = var16[basemod].getType();
  594.             if((var16[basemod].getModifiers() & 8) != 0 && class1.isAssignableFrom(kd.class)) {
  595.                kd biomegenbase = (kd)var16[basemod].get((Object)null);
  596.                if(!(biomegenbase instanceof t) && !(biomegenbase instanceof ry)) {
  597.                   iterator.add(biomegenbase);
  598.                }
  599.             }
  600.          }
  601.  
  602.          standardBiomes = (kd[])((kd[])iterator.toArray(new kd[0]));
  603.  
  604.          try {
  605.             method_RegisterTileEntity = ow.class.getDeclaredMethod("a", new Class[]{Class.class, String.class});
  606.          } catch (NoSuchMethodException var8) {
  607.             method_RegisterTileEntity = ow.class.getDeclaredMethod("addMapping", new Class[]{Class.class, String.class});
  608.          }
  609.  
  610.          method_RegisterTileEntity.setAccessible(true);
  611.  
  612.          try {
  613.             method_RegisterEntityID = jc.class.getDeclaredMethod("a", new Class[]{Class.class, String.class, Integer.TYPE});
  614.          } catch (NoSuchMethodException var7) {
  615.             method_RegisterEntityID = jc.class.getDeclaredMethod("addMapping", new Class[]{Class.class, String.class, Integer.TYPE});
  616.          }
  617.  
  618.          method_RegisterEntityID.setAccessible(true);
  619.        } catch (SecurityException var11) {
  620.           logger.throwing("ModLoader", "init", var11);
  621.           ThrowException(var11);
  622.           throw new RuntimeException(var11);
  623.        } catch (NoSuchFieldException var12) {
  624.           logger.throwing("ModLoader", "init", var12);
  625.           ThrowException(var12);
  626.           throw new RuntimeException(var12);
  627.        } catch (NoSuchMethodException var13) {
  628.           logger.throwing("ModLoader", "init", var13);
  629.           ThrowException(var13);
  630.           throw new RuntimeException(var13);
  631.        } catch (IllegalArgumentException var14) {
  632.           logger.throwing("ModLoader", "init", var14);
  633.           ThrowException(var14);
  634.           throw new RuntimeException(var14);
  635.        } catch (IllegalAccessException var15) {
  636.           logger.throwing("ModLoader", "init", var15);
  637.           ThrowException(var15);
  638.           throw new RuntimeException(var15);
  639.       }
  640.  
  641.       try {
  642.          loadConfig();
  643.          if(props.containsKey("loggingLevel")) {
  644.             cfgLoggingLevel = Level.parse(props.getProperty("loggingLevel"));
  645.          }
  646.  
  647.          if(props.containsKey("grassFix")) {
  648.             cv.cfgGrassFix = Boolean.parseBoolean(props.getProperty("grassFix"));
  649.          }
  650.  
  651.          logger.setLevel(cfgLoggingLevel);
  652.          if((logfile.exists() || logfile.createNewFile()) && logfile.canWrite() && logHandler == null) {
  653.             logHandler = new FileHandler(logfile.getPath());
  654.             logHandler.setFormatter(new SimpleFormatter());
  655.             logger.addHandler(logHandler);
  656.          }
  657.  
  658.          logger.fine("ModLoader Beta 1.7.3 Initializing...");
  659.          System.out.println("ModLoader Beta 1.7.3 Initializing...");
  660.          System.out.println("***** Modloader Fix by coffeenotfound @ 2017 ~ https://github.com/coffeenotfound ~ https://bitangent.net/ ****");
  661.           }
  662.          File var17;
  663.          try {
  664.             String var18 = URLDecoder.decode(ModLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
  665.             var18 = var18.replace("jar:", "").replace("file:/", "").replace("file:\\", "");
  666.             if(var18.contains(".jar!")) {
  667.                var18 = var18.substring(0, var18.lastIndexOf(".jar!") + ".jar".length());
  668.             }
  669.  
  670.             var18 = (new File(var18)).getAbsolutePath();
  671.             System.out.println("[Modloader Fix] original jar path = " + ModLoader.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
  672.             System.out.println("[Modloader Fix] new jar path = " + var18);
  673.             var17 = new File(var18);
  674.          } catch (Exception var9) {
  675.             throw new RuntimeException("Failed to resolve minecraft jar path; this is the fixed code, if this exception ever gets thrown I owe you a beer.", var9);
  676.          }
  677.  
  678.          modDir.mkdirs();
  679.          readFromModFolder(modDir);
  680.          readFromClassPath(var17);
  681.          System.out.println("Done.");
  682.          props.setProperty("loggingLevel", cfgLoggingLevel.getName());
  683.          props.setProperty("grassFix", Boolean.toString(cv.cfgGrassFix));
  684.          Iterator var20 = modList.iterator();
  685.  
  686.          while(var20.hasNext()) {
  687.             BaseMod var19 = (BaseMod)var20.next();
  688.             var19.ModsLoaded();
  689.             if(!props.containsKey(var19.getClass().getName())) {
  690.                props.setProperty(var19.getClass().getName(), "on");
  691.          modDir.mkdirs();
  692.          readFromModFolder(modDir);
  693.          readFromClassPath(var16);
  694.          System.out.println("Done.");
  695.          props.setProperty("loggingLevel", cfgLoggingLevel.getName());
  696.          props.setProperty("grassFix", Boolean.toString(cv.cfgGrassFix));
  697.          Iterator var17 = modList.iterator();
  698.  
  699.          while(var17.hasNext()) {
  700.             BaseMod var18 = (BaseMod)var17.next();
  701.             var18.ModsLoaded();
  702.             if(!props.containsKey(var18.getClass().getName())) {
  703.                props.setProperty(var18.getClass().getName(), "on");
  704.             }
  705.          }
  706.  
  707.          instance.z.w = RegisterAllKeys(instance.z.w);
  708.          instance.z.a();
  709.          initStats();
  710.          saveConfig();
  711.       } catch (Throwable var10) {
  712.          logger.throwing("ModLoader", "init", var10);
  713.          ThrowException("ModLoader has failed to initialize.", var10);
  714.          if(logHandler != null) {
  715.             logHandler.close();
  716.          }
  717.  
  718.          throw new RuntimeException(var9);
  719.       }
  720.    }
  721.  
  722.    private static void initStats() {
  723.       int hashset;
  724.       String obj;
  725.       for(hashset = 0; hashset < uu.m.length; ++hashset) {
  726.          if(!jl.a.containsKey(Integer.valueOf(16777216 + hashset)) && uu.m[hashset] != null && uu.m[hashset].p()) {
  727.             obj = nh.a().a("stat.mineBlock", new Object[]{uu.m[hashset].n()});
  728.             jl.C[hashset] = (new tw(16777216 + hashset, obj, hashset)).g();
  729.             jl.e.add(jl.C[hashset]);
  730.          }
  731.       }
  732.  
  733.       for(hashset = 0; hashset < gm.c.length; ++hashset) {
  734.          if(!jl.a.containsKey(Integer.valueOf(16908288 + hashset)) && gm.c[hashset] != null) {
  735.             obj = nh.a().a("stat.useItem", new Object[]{gm.c[hashset].k()});
  736.             jl.E[hashset] = (new tw(16908288 + hashset, obj, hashset)).g();
  737.             if(hashset >= uu.m.length) {
  738.                jl.d.add(jl.E[hashset]);
  739.             }
  740.          }
  741.  
  742.          if(!jl.a.containsKey(Integer.valueOf(16973824 + hashset)) && gm.c[hashset] != null && gm.c[hashset].g()) {
  743.             obj = nh.a().a("stat.breakItem", new Object[]{gm.c[hashset].k()});
  744.             jl.F[hashset] = (new tw(16973824 + hashset, obj, hashset)).g();
  745.          }
  746.       }
  747.  
  748.       HashSet var6 = new HashSet();
  749.       Iterator obj1 = hk.a().b().iterator();
  750.  
  751.       while(obj1.hasNext()) {
  752.          Object var7 = obj1.next();
  753.          var6.add(Integer.valueOf(((dt)var7).b().c));
  754.       }
  755.  
  756.       Iterator iterator2 = ey.a().b().values().iterator();
  757.  
  758.       while(iterator2.hasNext()) {
  759.          Object var8 = iterator2.next();
  760.          var6.add(Integer.valueOf(((iz)var8).c));
  761.       }
  762.  
  763.       iterator2 = var6.iterator();
  764.  
  765.       while(iterator2.hasNext()) {
  766.          int k = ((Integer)iterator2.next()).intValue();
  767.          if(!jl.a.containsKey(Integer.valueOf(16842752 + k)) && gm.c[k] != null) {
  768.             String s3 = nh.a().a("stat.craftItem", new Object[]{gm.c[k].k()});
  769.             jl.D[k] = (new tw(16842752 + k, s3, k)).g();
  770.          }
  771.       }
  772.  
  773.    }
  774.  
  775.    public static boolean isGUIOpen(Class class1) {
  776.       Minecraft minecraft = getMinecraftInstance();
  777.       return class1 == null?minecraft.r == null:(minecraft.r == null && class1 != null?false:class1.isInstance(minecraft.r));
  778.    }
  779.  
  780.    public static boolean isModLoaded(String s) {
  781.       Class class1 = null;
  782.  
  783.       try {
  784.          class1 = Class.forName(s);
  785.       } catch (ClassNotFoundException var4) {
  786.          return false;
  787.       }
  788.  
  789.       if(class1 != null) {
  790.          Iterator iterator = modList.iterator();
  791.  
  792.          while(iterator.hasNext()) {
  793.             BaseMod basemod = (BaseMod)iterator.next();
  794.             if(class1.isInstance(basemod)) {
  795.                return true;
  796.             }
  797.          }
  798.       }
  799.  
  800.       return false;
  801.    }
  802.  
  803.    public static void loadConfig() throws IOException {
  804.       cfgdir.mkdir();
  805.       if(cfgfile.exists() || cfgfile.createNewFile()) {
  806.          if(cfgfile.canRead()) {
  807.             FileInputStream fileinputstream = new FileInputStream(cfgfile);
  808.             props.load(fileinputstream);
  809.             fileinputstream.close();
  810.          }
  811.  
  812.       }
  813.    }
  814.  
  815.    public static BufferedImage loadImage(ji renderengine, String s) throws Exception {
  816.       ik texturepacklist = (ik)getPrivateValue(ji.class, renderengine, 11);
  817.       InputStream inputstream = texturepacklist.a.a(s);
  818.       if(inputstream == null) {
  819.          throw new Exception("Image not found: " + s);
  820.       } else {
  821.          BufferedImage bufferedimage = ImageIO.read(inputstream);
  822.          if(bufferedimage == null) {
  823.             throw new Exception("Image corrupted: " + s);
  824.          } else {
  825.             return bufferedimage;
  826.          }
  827.       }
  828.    }
  829.  
  830.    public static void OnItemPickup(gs entityplayer, iz itemstack) {
  831.       Iterator iterator = modList.iterator();
  832.  
  833.       while(iterator.hasNext()) {
  834.          BaseMod basemod = (BaseMod)iterator.next();
  835.          basemod.OnItemPickup(entityplayer, itemstack);
  836.       }
  837.  
  838.    }
  839.  
  840.    public static void OnTick(Minecraft minecraft) {
  841.       if(!hasInit) {
  842.          init();
  843.          logger.fine("Initialized");
  844.       }
  845.  
  846.       if(texPack == null || minecraft.z.l != texPack) {
  847.          texturesAdded = false;
  848.          texPack = minecraft.z.l;
  849.       }
  850.  
  851.       if(!texturesAdded && minecraft.p != null) {
  852.          RegisterAllTextureOverrides(minecraft.p);
  853.          texturesAdded = true;
  854.       }
  855.  
  856.       long l = 0L;
  857.       Iterator iterator2;
  858.       Entry entry;
  859.       if(minecraft.f != null) {
  860.          l = minecraft.f.t();
  861.          iterator2 = inGameHooks.entrySet().iterator();
  862.  
  863.          while(iterator2.hasNext()) {
  864.             entry = (Entry)iterator2.next();
  865.             if((clock != l || !((Boolean)entry.getValue()).booleanValue()) && !((BaseMod)entry.getKey()).OnTickInGame(minecraft)) {
  866.                iterator2.remove();
  867.             }
  868.          }
  869.       }
  870.  
  871.       if(minecraft.r != null) {
  872.          iterator2 = inGUIHooks.entrySet().iterator();
  873.  
  874.          while(iterator2.hasNext()) {
  875.             entry = (Entry)iterator2.next();
  876.             if((clock != l || !(((Boolean)entry.getValue()).booleanValue() & minecraft.f != null)) && !((BaseMod)entry.getKey()).OnTickInGUI(minecraft, minecraft.r)) {
  877.                iterator2.remove();
  878.             }
  879.          }
  880.       }
  881.  
  882.       if(clock != l) {
  883.          iterator2 = keyList.entrySet().iterator();
  884.  
  885.          while(iterator2.hasNext()) {
  886.             entry = (Entry)iterator2.next();
  887.             Iterator iterator3 = ((Map)entry.getValue()).entrySet().iterator();
  888.  
  889.             while(iterator3.hasNext()) {
  890.                Entry entry3 = (Entry)iterator3.next();
  891.                boolean flag = Keyboard.isKeyDown(((qb)entry3.getKey()).b);
  892.                boolean[] aflag = (boolean[])((boolean[])entry3.getValue());
  893.                boolean flag1 = aflag[1];
  894.                aflag[1] = flag;
  895.                if(flag && (!flag1 || aflag[0])) {
  896.                   ((BaseMod)entry.getKey()).KeyboardEvent((qb)entry3.getKey());
  897.                }
  898.             }
  899.          }
  900.       }
  901.  
  902.       clock = l;
  903.    }
  904.  
  905.    public static void OpenGUI(gs entityplayer, da guiscreen) {
  906.       if(!hasInit) {
  907.          init();
  908.          logger.fine("Initialized");
  909.       }
  910.  
  911.       Minecraft minecraft = getMinecraftInstance();
  912.       if(minecraft.h == entityplayer) {
  913.          if(guiscreen != null) {
  914.             minecraft.a(guiscreen);
  915.          }
  916.  
  917.       }
  918.    }
  919.  
  920.    public static void PopulateChunk(cl ichunkprovider, int i, int j, fd world) {
  921.       if(!hasInit) {
  922.          init();
  923.          logger.fine("Initialized");
  924.       }
  925.  
  926.       Random random = new Random(world.s());
  927.       long l = random.nextLong() / 2L * 2L + 1L;
  928.       long l1 = random.nextLong() / 2L * 2L + 1L;
  929.       random.setSeed((long)i * l + (long)j * l1 ^ world.s());
  930.       Iterator iterator = modList.iterator();
  931.  
  932.       while(iterator.hasNext()) {
  933.          BaseMod basemod = (BaseMod)iterator.next();
  934.          if(ichunkprovider.c().equals("RandomLevelSource")) {
  935.             basemod.GenerateSurface(world, random, i << 4, j << 4);
  936.          } else if(ichunkprovider.c().equals("HellRandomLevelSource")) {
  937.             basemod.GenerateNether(world, random, i << 4, j << 4);
  938.          }
  939.       }
  940.  
  941.    }
  942.  
  943.    private static void readFromClassPath(File file) throws FileNotFoundException, IOException {
  944.       logger.finer("Adding mods from " + file.getCanonicalPath());
  945.       ClassLoader classloader = ModLoader.class.getClassLoader();
  946.       if(file.isFile() && (file.getName().endsWith(".jar") || file.getName().endsWith(".zip"))) {
  947.          logger.finer("Zip found.");
  948.          FileInputStream var7 = new FileInputStream(file);
  949.          ZipInputStream var9 = new ZipInputStream(var7);
  950.          Object var10 = null;
  951.  
  952.          while(true) {
  953.             ZipEntry var11 = var9.getNextEntry();
  954.             if(var11 == null) {
  955.                var7.close();
  956.                break;
  957.             }
  958.  
  959.             String s1 = var11.getName();
  960.             if(!var11.isDirectory() && s1.startsWith("mod_") && s1.endsWith(".class")) {
  961.                addMod(classloader, s1);
  962.             }
  963.          }
  964.       } else if(file.isDirectory()) {
  965.          Package package1 = ModLoader.class.getPackage();
  966.          if(package1 != null) {
  967.             String afile = package1.getName().replace('.', File.separatorChar);
  968.             file = new File(file, afile);
  969.          }
  970.  
  971.          logger.finer("Directory found.");
  972.          File[] var8 = file.listFiles();
  973.          if(var8 != null) {
  974.             for(int i = 0; i < var8.length; ++i) {
  975.                String s2 = var8[i].getName();
  976.                if(var8[i].isFile() && s2.startsWith("mod_") && s2.endsWith(".class")) {
  977.                   addMod(classloader, s2);
  978.                }
  979.             }
  980.          }
  981.       }
  982.  
  983.    }
  984.  
  985.       ClassLoader classloader = Minecraft.class.getClassLoader();
  986.       Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
  987.       method.setAccessible(true);
  988.       if(!file.isDirectory()) {
  989.          throw new IllegalArgumentException("folder must be a Directory.");
  990.       } else {
  991.          File[] afile = file.listFiles();
  992.          int j;
  993.          File file2;
  994.          if(classloader instanceof URLClassLoader) {
  995.             for(j = 0; j < afile.length; ++j) {
  996.                file2 = afile[j];
  997.                if(file2.isDirectory() || file2.isFile() && (file2.getName().endsWith(".jar") || file2.getName().endsWith(".zip"))) {
  998.                   method.invoke(classloader, new Object[]{file2.toURI().toURL()});
  999.                }
  1000.             }
  1001.          }
  1002.  
  1003.          for(j = 0; j < afile.length; ++j) {
  1004.             file2 = afile[j];
  1005.             if(file2.isDirectory() || file2.isFile() && (file2.getName().endsWith(".jar") || file2.getName().endsWith(".zip"))) {
  1006.                logger.finer("Adding mods from " + file2.getCanonicalPath());
  1007.                if(file2.isFile()) {
  1008.                   logger.finer("Zip found.");
  1009.                   FileInputStream package1 = new FileInputStream(file2);
  1010.                   ZipInputStream afile1 = new ZipInputStream(package1);
  1011.                   Object k = null;
  1012.  
  1013.                   while(true) {
  1014.                      ZipEntry s2 = afile1.getNextEntry();
  1015.                      if(s2 == null) {
  1016.                         afile1.close();
  1017.                         package1.close();
  1018.                         break;
  1019.                      }
  1020.  
  1021.                      String s1 = s2.getName();
  1022.                      if(!s2.isDirectory() && s1.startsWith("mod_") && s1.endsWith(".class")) {
  1023.                         addMod(classloader, s1);
  1024.                      }
  1025.                   }
  1026.                } else if(file2.isDirectory()) {
  1027.                   Package var11 = ModLoader.class.getPackage();
  1028.                   if(var11 != null) {
  1029.                      String var12 = var11.getName().replace('.', File.separatorChar);
  1030.                      file2 = new File(file2, var12);
  1031.                   }
  1032.  
  1033.                   logger.finer("Directory found.");
  1034.                   File[] var13 = file2.listFiles();
  1035.                   if(var13 != null) {
  1036.                      for(int var14 = 0; var14 < var13.length; ++var14) {
  1037.                         String var15 = var13[var14].getName();
  1038.                         if(var13[var14].isFile() && var15.startsWith("mod_") && var15.endsWith(".class")) {
  1039.                            addMod(classloader, var15);
  1040.                         }
  1041.                      }
  1042.                   }
  1043.                }
  1044.             }
  1045.          }
  1046.  
  1047.       }
  1048.    }
  1049.  
  1050.    public static qb[] RegisterAllKeys(qb[] akeybinding) {
  1051.       LinkedList linkedlist = new LinkedList();
  1052.       linkedlist.addAll(Arrays.asList(akeybinding));
  1053.       Iterator iterator = keyList.values().iterator();
  1054.  
  1055.       while(iterator.hasNext()) {
  1056.          Map map = (Map)iterator.next();
  1057.          linkedlist.addAll(map.keySet());
  1058.       }
  1059.  
  1060.       return (qb[])((qb[])linkedlist.toArray(new qb[0]));
  1061.    }
  1062.  
  1063.    private static void checkTerrainSizes() {
  1064.       File file = new File(PReader.MF(), "mods/smith_61/ExtendedTerrains");
  1065.       if(file.exists()) {
  1066.          try {
  1067.             BufferedImage e = ImageIO.read(instance.D.a.a("/terrain.png"));
  1068.             File[] files = file.listFiles();
  1069.  
  1070.             for(int i = 0; i < files.length; ++i) {
  1071.                File temp = files[i];
  1072.                if(temp.isFile() && temp.getName().endsWith(".png") && !checkImageSizes(e, ImageIO.read(temp))) {
  1073.                   terrainsToCopy.add(temp);
  1074.                }
  1075.             }
  1076.          } catch (Exception var5) {
  1077.             throw new RuntimeException(var5);
  1078.          }
  1079.       }
  1080.  
  1081.    }
  1082.  
  1083.    private static void checkItemSizes() {
  1084.       File file = new File(PReader.MF(), "mods/smith_61/ExtendedItems");
  1085.       if(file.exists()) {
  1086.          try {
  1087.             BufferedImage e = ImageIO.read(instance.D.a.a("/gui/items.png"));
  1088.             File[] files = file.listFiles();
  1089.  
  1090.             for(int i = 0; i < files.length; ++i) {
  1091.                File temp = files[i];
  1092.                if(temp.isFile() && temp.getName().endsWith(".png") && !checkImageSizes(e, ImageIO.read(temp))) {
  1093.                   itemsToCopy.add(temp);
  1094.                }
  1095.             }
  1096.          } catch (Exception var5) {
  1097.             throw new RuntimeException(var5);
  1098.          }
  1099.       }
  1100.  
  1101.    }
  1102.  
  1103.    private static boolean checkImageSizes(BufferedImage image, BufferedImage image1) {
  1104.       int width = image.getWidth();
  1105.       int hieght = image.getHeight();
  1106.       return width == image1.getWidth() && hieght == image1.getHeight();
  1107.    }
  1108.  
  1109.    private static void copyImages() {
  1110.       try {
  1111.          int throwable;
  1112.          File file;
  1113.          for(throwable = 0; throwable < terrainsToCopy.size(); ++throwable) {
  1114.             file = (File)terrainsToCopy.get(throwable);
  1115.             ImageIO.write(ImageIO.read(instance.D.a.a("/terrain.png")), "png", file);
  1116.          }
  1117.  
  1118.          for(throwable = 0; throwable < itemsToCopy.size(); ++throwable) {
  1119.             file = (File)itemsToCopy.get(throwable);
  1120.             ImageIO.write(ImageIO.read(instance.D.a.a("/gui/items.png")), "png", file);
  1121.          }
  1122.       } catch (Throwable var2) {
  1123.          throw new RuntimeException(var2);
  1124.       }
  1125.  
  1126.       terrainsToCopy.clear();
  1127.       itemsToCopy.clear();
  1128.    }
  1129.  
  1130.    public static void RegisterAllTextureOverrides(ji renderengine) {
  1131.       checkTerrainSizes();
  1132.       checkItemSizes();
  1133.       copyImages();
  1134.       animList.clear();
  1135.       Minecraft minecraft = getMinecraftInstance();
  1136.       Iterator texturefx = modList.iterator();
  1137.  
  1138.       while(texturefx.hasNext()) {
  1139.          BaseMod basemod = (BaseMod)texturefx.next();
  1140.          basemod.RegisterAnimation(minecraft);
  1141.       }
  1142.  
  1143.       Iterator iterator2 = animList.iterator();
  1144.  
  1145.       while(iterator2.hasNext()) {
  1146.          aw texturefx1 = (aw)iterator2.next();
  1147.          renderengine.a(texturefx1);
  1148.       }
  1149.  
  1150.       iterator2 = overrides.entrySet().iterator();
  1151.  
  1152.       while(iterator2.hasNext()) {
  1153.          Entry entry = (Entry)iterator2.next();
  1154.          Iterator iterator3 = ((Map)entry.getValue()).entrySet().iterator();
  1155.  
  1156.          while(iterator3.hasNext()) {
  1157.             Entry entry1 = (Entry)iterator3.next();
  1158.             String s = (String)entry1.getKey();
  1159.             int i = ((Integer)entry1.getValue()).intValue();
  1160.             int j = ((Integer)entry.getKey()).intValue();
  1161.  
  1162.             try {
  1163.                BufferedImage exception = loadImage(renderengine, s);
  1164.                ModTextureStatic modtexturestatic = new ModTextureStatic(i, j, exception);
  1165.                renderengine.a(modtexturestatic);
  1166.             } catch (Exception var13) {
  1167.                logger.throwing("ModLoader", "RegisterAllTextureOverrides", var13);
  1168.                ThrowException(var13);
  1169.                throw new RuntimeException(var13);
  1170.             }
  1171.          }
  1172.       }
  1173.  
  1174.    }
  1175.  
  1176.    public static void RegisterBlock(uu block) {
  1177.       RegisterBlock(block, (Class)null);
  1178.    }
  1179.  
  1180.    public static void RegisterBlock(uu block, Class class1) {
  1181.       try {
  1182.          if(block == null) {
  1183.             throw new IllegalArgumentException("block parameter cannot be null.");
  1184.          }
  1185.  
  1186.          List nosuchmethodexception = (List)field_blockList.get((Object)null);
  1187.          nosuchmethodexception.add(block);
  1188.          int i = block.bn;
  1189.          ck itemblock = null;
  1190.          if(class1 != null) {
  1191.             itemblock = (ck)class1.getConstructor(new Class[]{Integer.TYPE}).newInstance(new Object[]{Integer.valueOf(i - 256)});
  1192.          } else {
  1193.             itemblock = new ck(i - 256);
  1194.          }
  1195.  
  1196.          if(uu.m[i] != null && gm.c[i] == null) {
  1197.             gm.c[i] = itemblock;
  1198.          }
  1199.       } catch (IllegalArgumentException var5) {
  1200.          logger.throwing("ModLoader", "RegisterBlock", var5);
  1201.          ThrowException(var5);
  1202.       } catch (IllegalAccessException var6) {
  1203.          logger.throwing("ModLoader", "RegisterBlock", var6);
  1204.          ThrowException(var6);
  1205.       } catch (SecurityException var7) {
  1206.          logger.throwing("ModLoader", "RegisterBlock", var7);
  1207.          ThrowException(var7);
  1208.       } catch (InstantiationException var8) {
  1209.          logger.throwing("ModLoader", "RegisterBlock", var8);
  1210.          ThrowException(var8);
  1211.       } catch (InvocationTargetException var9) {
  1212.          logger.throwing("ModLoader", "RegisterBlock", var9);
  1213.          ThrowException(var9);
  1214.       } catch (NoSuchMethodException var10) {
  1215.          logger.throwing("ModLoader", "RegisterBlock", var10);
  1216.          ThrowException(var10);
  1217.       }
  1218.  
  1219.    }
  1220.  
  1221.    public static void RegisterEntityID(Class class1, String s, int i) {
  1222.       try {
  1223.          method_RegisterEntityID.invoke((Object)null, new Object[]{class1, s, Integer.valueOf(i)});
  1224.       } catch (IllegalArgumentException var4) {
  1225.          logger.throwing("ModLoader", "RegisterEntityID", var4);
  1226.          ThrowException(var4);
  1227.       } catch (IllegalAccessException var5) {
  1228.          logger.throwing("ModLoader", "RegisterEntityID", var5);
  1229.          ThrowException(var5);
  1230.       } catch (InvocationTargetException var6) {
  1231.          logger.throwing("ModLoader", "RegisterEntityID", var6);
  1232.          ThrowException(var6);
  1233.       }
  1234.  
  1235.    }
  1236.  
  1237.    public static void RegisterKey(BaseMod basemod, qb keybinding, boolean flag) {
  1238.       Object obj = (Map)keyList.get(basemod);
  1239.       if(obj == null) {
  1240.          obj = new HashMap();
  1241.       }
  1242.  
  1243.       boolean[] aflag = new boolean[]{flag, false};
  1244.       ((Map)((Map)obj)).put(keybinding, aflag);
  1245.       keyList.put(basemod, obj);
  1246.    }
  1247.  
  1248.    public static void RegisterTileEntity(Class class1, String s) {
  1249.       RegisterTileEntity(class1, s, (je)null);
  1250.    }
  1251.  
  1252.    public static void RegisterTileEntity(Class class1, String s, je tileentityspecialrenderer) {
  1253.       try {
  1254.          method_RegisterTileEntity.invoke((Object)null, new Object[]{class1, s});
  1255.          if(tileentityspecialrenderer != null) {
  1256.             ll invocationtargetexception = ll.a;
  1257.             Map map = (Map)field_TileEntityRenderers.get(invocationtargetexception);
  1258.             map.put(class1, tileentityspecialrenderer);
  1259.             tileentityspecialrenderer.a(invocationtargetexception);
  1260.          }
  1261.       } catch (IllegalArgumentException var5) {
  1262.          logger.throwing("ModLoader", "RegisterTileEntity", var5);
  1263.          ThrowException(var5);
  1264.       } catch (IllegalAccessException var6) {
  1265.          logger.throwing("ModLoader", "RegisterTileEntity", var6);
  1266.          ThrowException(var6);
  1267.       } catch (InvocationTargetException var7) {
  1268.          logger.throwing("ModLoader", "RegisterTileEntity", var7);
  1269.          ThrowException(var7);
  1270.       }
  1271.  
  1272.    }
  1273.  
  1274.    public static void RemoveSpawn(Class class1, lk enumcreaturetype) {
  1275.       RemoveSpawn(class1, enumcreaturetype, (kd[])null);
  1276.    }
  1277.  
  1278.    public static void RemoveSpawn(Class class1, lk enumcreaturetype, kd[] abiomegenbase) {
  1279.       if(class1 == null) {
  1280.          throw new IllegalArgumentException("entityClass cannot be null");
  1281.       } else if(enumcreaturetype == null) {
  1282.          throw new IllegalArgumentException("spawnList cannot be null");
  1283.       } else {
  1284.          if(abiomegenbase == null) {
  1285.             abiomegenbase = standardBiomes;
  1286.          }
  1287.  
  1288.          for(int i = 0; i < abiomegenbase.length; ++i) {
  1289.             List list = abiomegenbase[i].a(enumcreaturetype);
  1290.             if(list != null) {
  1291.                Iterator iterator = list.iterator();
  1292.  
  1293.                while(iterator.hasNext()) {
  1294.                   bj spawnlistentry = (bj)iterator.next();
  1295.                   if(spawnlistentry.a == class1) {
  1296.                      iterator.remove();
  1297.                   }
  1298.                }
  1299.             }
  1300.          }
  1301.  
  1302.       }
  1303.    }
  1304.  
  1305.    public static void RemoveSpawn(String s, lk enumcreaturetype) {
  1306.       RemoveSpawn(s, enumcreaturetype, (kd[])null);
  1307.    }
  1308.  
  1309.    public static void RemoveSpawn(String s, lk enumcreaturetype, kd[] abiomegenbase) {
  1310.       Class class1 = (Class)classMap.get(s);
  1311.       if(class1 != null && ls.class.isAssignableFrom(class1)) {
  1312.          RemoveSpawn(class1, enumcreaturetype, abiomegenbase);
  1313.       }
  1314.  
  1315.    }
  1316.  
  1317.    public static boolean RenderBlockIsItemFull3D(int i) {
  1318.       return !blockSpecialInv.containsKey(Integer.valueOf(i))?i == 16:((Boolean)blockSpecialInv.get(Integer.valueOf(i))).booleanValue();
  1319.    }
  1320.  
  1321.    public static void RenderInvBlock(cv renderblocks, uu block, int i, int j) {
  1322.       BaseMod basemod = (BaseMod)blockModels.get(Integer.valueOf(j));
  1323.       if(basemod != null) {
  1324.          basemod.RenderInvBlock(renderblocks, block, i, j);
  1325.       }
  1326.    }
  1327.  
  1328.    public static boolean RenderWorldBlock(cv renderblocks, xp iblockaccess, int i, int j, int k, uu block, int l) {
  1329.       BaseMod basemod = (BaseMod)blockModels.get(Integer.valueOf(l));
  1330.       return basemod == null?false:basemod.RenderWorldBlock(renderblocks, iblockaccess, i, j, k, block, l);
  1331.    }
  1332.  
  1333.    public static void saveConfig() throws IOException {
  1334.       cfgdir.mkdir();
  1335.       if(cfgfile.exists() || cfgfile.createNewFile()) {
  1336.          if(cfgfile.canWrite()) {
  1337.             FileOutputStream fileoutputstream = new FileOutputStream(cfgfile);
  1338.             props.store(fileoutputstream, "ModLoader Config");
  1339.             fileoutputstream.close();
  1340.          }
  1341.  
  1342.       }
  1343.    }
  1344.  
  1345.    public static void SetInGameHook(BaseMod basemod, boolean flag, boolean flag1) {
  1346.       if(flag) {
  1347.          inGameHooks.put(basemod, Boolean.valueOf(flag1));
  1348.       } else {
  1349.          inGameHooks.remove(basemod);
  1350.       }
  1351.  
  1352.    }
  1353.  
  1354.    public static void SetInGUIHook(BaseMod basemod, boolean flag, boolean flag1) {
  1355.       if(flag) {
  1356.          inGUIHooks.put(basemod, Boolean.valueOf(flag1));
  1357.       } else {
  1358.          inGUIHooks.remove(basemod);
  1359.       }
  1360.  
  1361.    }
  1362.  
  1363.    public static void setPrivateValue(Class class1, Object obj, int i, Object obj1) throws IllegalArgumentException, SecurityException, NoSuchFieldException {
  1364.       try {
  1365.          Field illegalaccessexception = class1.getDeclaredFields()[i];
  1366.          illegalaccessexception.setAccessible(true);
  1367.          int j = field_modifiers.getInt(illegalaccessexception);
  1368.          if((j & 16) != 0) {
  1369.             field_modifiers.setInt(illegalaccessexception, j & -17);
  1370.          }
  1371.  
  1372.          illegalaccessexception.set(obj, obj1);
  1373.       } catch (IllegalAccessException var6) {
  1374.          logger.throwing("ModLoader", "setPrivateValue", var6);
  1375.          ThrowException("An impossible error has occured!", var6);
  1376.       }
  1377.  
  1378.    }
  1379.  
  1380.    public static void setPrivateValue(Class class1, Object obj, String s, Object obj1) throws IllegalArgumentException, SecurityException, NoSuchFieldException {
  1381.       try {
  1382.          Field illegalaccessexception = class1.getDeclaredField(s);
  1383.          int i = field_modifiers.getInt(illegalaccessexception);
  1384.          if((i & 16) != 0) {
  1385.             field_modifiers.setInt(illegalaccessexception, i & -17);
  1386.          }
  1387.  
  1388.          illegalaccessexception.setAccessible(true);
  1389.          illegalaccessexception.set(obj, obj1);
  1390.       } catch (IllegalAccessException var6) {
  1391.          logger.throwing("ModLoader", "setPrivateValue", var6);
  1392.          ThrowException("An impossible error has occured!", var6);
  1393.       }
  1394.  
  1395.    }
  1396.  
  1397.    private static void setupProperties(Class class1) throws IllegalArgumentException, IllegalAccessException, IOException, SecurityException, NoSuchFieldException {
  1398.       Properties properties = new Properties();
  1399.       File file = new File(cfgdir, class1.getName() + ".cfg");
  1400.       if(file.exists() && file.canRead()) {
  1401.          properties.load(new FileInputStream(file));
  1402.       }
  1403.  
  1404.       StringBuilder stringbuilder = new StringBuilder();
  1405.       Field[] afield;
  1406.       int j = (afield = class1.getFields()).length;
  1407.  
  1408.       for(int i = 0; i < j; ++i) {
  1409.          Field field = afield[i];
  1410.          if((field.getModifiers() & 8) != 0 && field.isAnnotationPresent(MLProp.class)) {
  1411.             Class class2 = field.getType();
  1412.             MLProp mlprop = (MLProp)field.getAnnotation(MLProp.class);
  1413.             String s = mlprop.name().length() != 0?mlprop.name():field.getName();
  1414.             Object obj = field.get((Object)null);
  1415.             StringBuilder stringbuilder1 = new StringBuilder();
  1416.             if(mlprop.min() != Double.NEGATIVE_INFINITY) {
  1417.                stringbuilder1.append(String.format(",>=%.1f", new Object[]{Double.valueOf(mlprop.min())}));
  1418.             }
  1419.  
  1420.             if(mlprop.max() != Double.POSITIVE_INFINITY) {
  1421.                stringbuilder1.append(String.format(",<=%.1f", new Object[]{Double.valueOf(mlprop.max())}));
  1422.             }
  1423.  
  1424.             StringBuilder stringbuilder2 = new StringBuilder();
  1425.             if(mlprop.info().length() > 0) {
  1426.                stringbuilder2.append(" -- ");
  1427.                stringbuilder2.append(mlprop.info());
  1428.             }
  1429.  
  1430.             stringbuilder.append(String.format("%s (%s:%s%s)%s\n", new Object[]{s, class2.getName(), obj, stringbuilder1, stringbuilder2}));
  1431.             if(properties.containsKey(s)) {
  1432.                String s1 = properties.getProperty(s);
  1433.                Object obj1 = null;
  1434.                if(class2.isAssignableFrom(String.class)) {
  1435.                   obj1 = s1;
  1436.                } else if(class2.isAssignableFrom(Integer.TYPE)) {
  1437.                   obj1 = Integer.valueOf(Integer.parseInt(s1));
  1438.                } else if(class2.isAssignableFrom(Short.TYPE)) {
  1439.                   obj1 = Short.valueOf(Short.parseShort(s1));
  1440.                } else if(class2.isAssignableFrom(Byte.TYPE)) {
  1441.                   obj1 = Byte.valueOf(Byte.parseByte(s1));
  1442.                } else if(class2.isAssignableFrom(Boolean.TYPE)) {
  1443.                   obj1 = Boolean.valueOf(Boolean.parseBoolean(s1));
  1444.                } else if(class2.isAssignableFrom(Float.TYPE)) {
  1445.                   obj1 = Float.valueOf(Float.parseFloat(s1));
  1446.                } else if(class2.isAssignableFrom(Double.TYPE)) {
  1447.                   obj1 = Double.valueOf(Double.parseDouble(s1));
  1448.                }
  1449.  
  1450.                if(obj1 != null) {
  1451.                   if(obj1 instanceof Number) {
  1452.                      double d = ((Number)obj1).doubleValue();
  1453.                      if(mlprop.min() != Double.NEGATIVE_INFINITY && d < mlprop.min() || mlprop.max() != Double.POSITIVE_INFINITY && d > mlprop.max()) {
  1454.                         continue;
  1455.                      }
  1456.                   }
  1457.  
  1458.                   logger.finer(s + " set to " + obj1);
  1459.                   if(!obj1.equals(obj)) {
  1460.                      field.set((Object)null, obj1);
  1461.                   }
  1462.                }
  1463.             } else {
  1464.                logger.finer(s + " not in config, using default: " + obj);
  1465.                properties.setProperty(s, obj.toString());
  1466.             }
  1467.          }
  1468.       }
  1469.  
  1470.       if(!properties.isEmpty() && (file.exists() || file.createNewFile()) && file.canWrite()) {
  1471.          properties.store(new FileOutputStream(file), stringbuilder.toString());
  1472.       }
  1473.  
  1474.    }
  1475.  
  1476.    public static void TakenFromCrafting(gs entityplayer, iz itemstack) {
  1477.       Iterator iterator = modList.iterator();
  1478.  
  1479.       while(iterator.hasNext()) {
  1480.          BaseMod basemod = (BaseMod)iterator.next();
  1481.          basemod.TakenFromCrafting(entityplayer, itemstack);
  1482.       }
  1483.  
  1484.    }
  1485.  
  1486.    public static void TakenFromFurnace(gs entityplayer, iz itemstack) {
  1487.       Iterator iterator = modList.iterator();
  1488.  
  1489.       while(iterator.hasNext()) {
  1490.          BaseMod basemod = (BaseMod)iterator.next();
  1491.          basemod.TakenFromFurnace(entityplayer, itemstack);
  1492.       }
  1493.  
  1494.    }
  1495.  
  1496.    public static void ThrowException(String s, Throwable throwable) {
  1497.       Minecraft minecraft = getMinecraftInstance();
  1498.       if(minecraft != null) {
  1499.          minecraft.a(new mh(s, throwable));
  1500.       } else {
  1501.          throw new RuntimeException(throwable);
  1502.       }
  1503.    }
  1504.  
  1505.    private static void ThrowException(Throwable throwable) {
  1506.       ThrowException("Exception occured in ModLoader", throwable);
  1507.    }
  1508.  
  1509. }



  • Recent Pastes