Advertisement
Corosus

ModLoader.java fernflower decompiled

Apr 24th, 2012
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 71.34 KB | None | 0 0
  1. package net.minecraft.src;
  2.  
  3. import java.awt.image.BufferedImage;
  4.  
  5. public final class ModLoader
  6. {
  7.     private static final List animList = new LinkedList();
  8.     private static final Map blockModels = new HashMap();
  9.     private static final Map blockSpecialInv = new HashMap();
  10.     private static final File cfgdir = new File(Minecraft.getMinecraftDir(), "/config/");
  11.     private static final File cfgfile = new File(cfgdir, "ModLoader.cfg");
  12.     public static Level cfgLoggingLevel = Level.FINER;
  13.     private static Map classMap = null;
  14.     private static long clock = 0L;
  15.     public static final boolean DEBUG = false;
  16.     private static Field field_animList = null;
  17.     private static Field field_armorList = null;
  18.     private static Field field_modifiers = null;
  19.     private static Field field_TileEntityRenderers = null;
  20.     private static boolean hasInit = false;
  21.     private static int highestEntityId = 3000;
  22.     private static final Map inGameHooks = new HashMap();
  23.     private static final Map inGUIHooks = new HashMap();
  24.     private static Minecraft instance = null;
  25.     private static int itemSpriteIndex = 0;
  26.     private static int itemSpritesLeft = 0;
  27.     private static final Map keyList = new HashMap();
  28.     private static String langPack = null;
  29.     private static Map localizedStrings = new HashMap();
  30.     private static final File logfile = new File(Minecraft.getMinecraftDir(), "ModLoader.txt");
  31.     private static final Logger logger = Logger.getLogger("ModLoader");
  32.     private static FileHandler logHandler = null;
  33.     private static Method method_RegisterEntityID = null;
  34.     private static Method method_RegisterTileEntity = null;
  35.     private static final File modDir = new File(Minecraft.getMinecraftDir(), "/mods/");
  36.     private static final LinkedList modList = new LinkedList();
  37.     private static int nextBlockModelID = 1000;
  38.     private static final Map overrides = new HashMap();
  39.     private static final Map packetChannels = new HashMap();
  40.     public static final Properties props = new Properties();
  41.     private static BiomeGenBase[] standardBiomes;
  42.     private static int terrainSpriteIndex = 0;
  43.     private static int terrainSpritesLeft = 0;
  44.     private static String texPack = null;
  45.     private static boolean texturesAdded = false;
  46.     private static final boolean[] usedItemSprites = new boolean[256];
  47.     private static final boolean[] usedTerrainSprites = new boolean[256];
  48.     public static final String VERSION = "ModLoader 1.2.5";
  49.     private static NetClientHandler netHandler = null;
  50.  
  51.     public static void addAchievementDesc(Achievement var0, String var1, String var2)
  52.     {
  53.         try
  54.         {
  55.             if (var0.getName().contains("."))
  56.             {
  57.                 String[] var3 = var0.getName().split("\\.");
  58.  
  59.                 if (var3.length == 2)
  60.                 {
  61.                     String var4 = var3[1];
  62.                     addLocalization("achievement." + var4, var1);
  63.                     addLocalization("achievement." + var4 + ".desc", var2);
  64.                     setPrivateValue(StatBase.class, var0, 1, StatCollector.translateToLocal("achievement." + var4));
  65.                     setPrivateValue(Achievement.class, var0, 3, StatCollector.translateToLocal("achievement." + var4 + ".desc"));
  66.                 }
  67.                 else
  68.                 {
  69.                     setPrivateValue(StatBase.class, var0, 1, var1);
  70.                     setPrivateValue(Achievement.class, var0, 3, var2);
  71.                 }
  72.             }
  73.             else
  74.             {
  75.                 setPrivateValue(StatBase.class, var0, 1, var1);
  76.                 setPrivateValue(Achievement.class, var0, 3, var2);
  77.             }
  78.         }
  79.         catch (IllegalArgumentException var5)
  80.         {
  81.             logger.throwing("ModLoader", "AddAchievementDesc", var5);
  82.             throwException(var5);
  83.         }
  84.         catch (SecurityException var6)
  85.         {
  86.             logger.throwing("ModLoader", "AddAchievementDesc", var6);
  87.             throwException(var6);
  88.         }
  89.         catch (NoSuchFieldException var7)
  90.         {
  91.             logger.throwing("ModLoader", "AddAchievementDesc", var7);
  92.             throwException(var7);
  93.         }
  94.     }
  95.  
  96.     public static int addAllFuel(int var0, int var1)
  97.     {
  98.         logger.finest("Finding fuel for " + var0);
  99.         int var2 = 0;
  100.  
  101.         for (Iterator var3 = modList.iterator(); var3.hasNext() && var2 == 0; var2 = ((BaseMod)var3.next()).addFuel(var0, var1))
  102.         {
  103.             ;
  104.         }
  105.  
  106.         if (var2 != 0)
  107.         {
  108.             logger.finest("Returned " + var2);
  109.         }
  110.  
  111.         return var2;
  112.     }
  113.  
  114.     public static void addAllRenderers(Map var0)
  115.     {
  116.         if (!hasInit)
  117.         {
  118.             init();
  119.             logger.fine("Initialized");
  120.         }
  121.  
  122.         Iterator var2 = modList.iterator();
  123.  
  124.         while (var2.hasNext())
  125.         {
  126.             BaseMod var1 = (BaseMod)var2.next();
  127.             var1.addRenderer(var0);
  128.         }
  129.     }
  130.  
  131.     public static void addAnimation(TextureFX var0)
  132.     {
  133.         logger.finest("Adding animation " + var0.toString());
  134.         Iterator var2 = animList.iterator();
  135.  
  136.         while (var2.hasNext())
  137.         {
  138.             TextureFX var1 = (TextureFX)var2.next();
  139.  
  140.             if (var1.iconIndex == var0.iconIndex && var1.tileImage == var0.tileImage)
  141.             {
  142.                 animList.remove(var0);
  143.                 break;
  144.             }
  145.         }
  146.  
  147.         animList.add(var0);
  148.     }
  149.  
  150.     public static int addArmor(String var0)
  151.     {
  152.         try
  153.         {
  154.             String[] var1 = (String[])field_armorList.get((Object)null);
  155.             List var2 = Arrays.asList(var1);
  156.             ArrayList var3 = new ArrayList();
  157.             var3.addAll(var2);
  158.  
  159.             if (!var3.contains(var0))
  160.             {
  161.                 var3.add(var0);
  162.             }
  163.  
  164.             int var4 = var3.indexOf(var0);
  165.             field_armorList.set((Object)null, var3.toArray(new String[0]));
  166.             return var4;
  167.         }
  168.         catch (IllegalArgumentException var5)
  169.         {
  170.             logger.throwing("ModLoader", "AddArmor", var5);
  171.             throwException("An impossible error has occured!", var5);
  172.         }
  173.         catch (IllegalAccessException var6)
  174.         {
  175.             logger.throwing("ModLoader", "AddArmor", var6);
  176.             throwException("An impossible error has occured!", var6);
  177.         }
  178.  
  179.         return -1;
  180.     }
  181.  
  182.     public static void addBiome(BiomeGenBase var0)
  183.     {
  184.         BiomeGenBase[] var1 = GenLayerBiome.biomeArray;
  185.         List var2 = Arrays.asList(var1);
  186.         ArrayList var3 = new ArrayList();
  187.         var3.addAll(var2);
  188.  
  189.         if (!var3.contains(var0))
  190.         {
  191.             var3.add(var0);
  192.         }
  193.  
  194.         GenLayerBiome.biomeArray = (BiomeGenBase[])var3.toArray(new BiomeGenBase[0]);
  195.     }
  196.  
  197.     public static void addLocalization(String var0, String var1)
  198.     {
  199.         addLocalization(var0, "en_US", var1);
  200.     }
  201.  
  202.     public static void addLocalization(String var0, String var1, String var2)
  203.     {
  204.         Object var3;
  205.  
  206.         if (localizedStrings.containsKey(var1))
  207.         {
  208.             var3 = (Map)localizedStrings.get(var1);
  209.         }
  210.         else
  211.         {
  212.             var3 = new HashMap();
  213.             localizedStrings.put(var1, var3);
  214.         }
  215.  
  216.         ((Map)var3).put(var0, var2);
  217.     }
  218.  
  219.     private static void addMod(ClassLoader var0, String var1)
  220.     {
  221.         try
  222.         {
  223.             String var2 = var1.split("\\.")[0];
  224.  
  225.             if (var2.contains("$"))
  226.             {
  227.                 return;
  228.             }
  229.  
  230.             if (props.containsKey(var2) && (props.getProperty(var2).equalsIgnoreCase("no") || props.getProperty(var2).equalsIgnoreCase("off")))
  231.             {
  232.                 return;
  233.             }
  234.  
  235.             Package var3 = ModLoader.class.getPackage();
  236.  
  237.             if (var3 != null)
  238.             {
  239.                 var2 = var3.getName() + "." + var2;
  240.             }
  241.  
  242.             Class var4 = var0.loadClass(var2);
  243.  
  244.             if (!BaseMod.class.isAssignableFrom(var4))
  245.             {
  246.                 return;
  247.             }
  248.  
  249.             setupProperties(var4);
  250.             BaseMod var5 = (BaseMod)var4.newInstance();
  251.  
  252.             if (var5 != null)
  253.             {
  254.                 modList.add(var5);
  255.                 logger.fine("Mod Initialized: \"" + var5.toString() + "\" from " + var1);
  256.                 System.out.println("Mod Initialized: " + var5.toString());
  257.             }
  258.         }
  259.         catch (Throwable var6)
  260.         {
  261.             logger.fine("Failed to load mod from \"" + var1 + "\"");
  262.             System.out.println("Failed to load mod from \"" + var1 + "\"");
  263.             logger.throwing("ModLoader", "addMod", var6);
  264.             throwException(var6);
  265.         }
  266.     }
  267.  
  268.     public static void addName(Object var0, String var1)
  269.     {
  270.         addName(var0, "en_US", var1);
  271.     }
  272.  
  273.     public static void addName(Object var0, String var1, String var2)
  274.     {
  275.         String var3 = null;
  276.         Exception var8;
  277.  
  278.         if (var0 instanceof Item)
  279.         {
  280.             Item var4 = (Item)var0;
  281.  
  282.             if (var4.getItemName() != null)
  283.             {
  284.                 var3 = var4.getItemName() + ".name";
  285.             }
  286.         }
  287.         else if (var0 instanceof Block)
  288.         {
  289.             Block var6 = (Block)var0;
  290.  
  291.             if (var6.getBlockName() != null)
  292.             {
  293.                 var3 = var6.getBlockName() + ".name";
  294.             }
  295.         }
  296.         else if (var0 instanceof ItemStack)
  297.         {
  298.             ItemStack var7 = (ItemStack)var0;
  299.             String var5 = Item.itemsList[var7.itemID].getItemNameIS(var7);
  300.  
  301.             if (var5 != null)
  302.             {
  303.                 var3 = var5 + ".name";
  304.             }
  305.         }
  306.         else
  307.         {
  308.             var8 = new Exception(var0.getClass().getName() + " cannot have name attached to it!");
  309.             logger.throwing("ModLoader", "AddName", var8);
  310.             throwException(var8);
  311.         }
  312.  
  313.         if (var3 != null)
  314.         {
  315.             addLocalization(var3, var1, var2);
  316.         }
  317.         else
  318.         {
  319.             var8 = new Exception(var0 + " is missing name tag!");
  320.             logger.throwing("ModLoader", "AddName", var8);
  321.             throwException(var8);
  322.         }
  323.     }
  324.  
  325.     public static int addOverride(String var0, String var1)
  326.     {
  327.         try
  328.         {
  329.             int var2 = getUniqueSpriteIndex(var0);
  330.             addOverride(var0, var1, var2);
  331.             return var2;
  332.         }
  333.         catch (Throwable var3)
  334.         {
  335.             logger.throwing("ModLoader", "addOverride", var3);
  336.             throwException(var3);
  337.             throw new RuntimeException(var3);
  338.         }
  339.     }
  340.  
  341.     public static void addOverride(String var0, String var1, int var2)
  342.     {
  343.         boolean var3 = true;
  344.         boolean var4 = false;
  345.         byte var6;
  346.         int var7;
  347.  
  348.         if (var0.equals("/terrain.png"))
  349.         {
  350.             var6 = 0;
  351.             var7 = terrainSpritesLeft;
  352.         }
  353.         else
  354.         {
  355.             if (!var0.equals("/gui/items.png"))
  356.             {
  357.                 return;
  358.             }
  359.  
  360.             var6 = 1;
  361.             var7 = itemSpritesLeft;
  362.         }
  363.  
  364.         System.out.println("Overriding " + var0 + " with " + var1 + " @ " + var2 + ". " + var7 + " left.");
  365.         logger.finer("addOverride(" + var0 + "," + var1 + "," + var2 + "). " + var7 + " left.");
  366.         Object var5 = (Map)overrides.get(Integer.valueOf(var6));
  367.  
  368.         if (var5 == null)
  369.         {
  370.             var5 = new HashMap();
  371.             overrides.put(Integer.valueOf(var6), var5);
  372.         }
  373.  
  374.         ((Map)var5).put(var1, Integer.valueOf(var2));
  375.     }
  376.  
  377.     public static void addRecipe(ItemStack var0, Object ... var1)
  378.     {
  379.         CraftingManager.getInstance().addRecipe(var0, var1);
  380.     }
  381.  
  382.     public static void addShapelessRecipe(ItemStack var0, Object ... var1)
  383.     {
  384.         CraftingManager.getInstance().addShapelessRecipe(var0, var1);
  385.     }
  386.  
  387.     public static void addSmelting(int var0, ItemStack var1)
  388.     {
  389.         FurnaceRecipes.smelting().addSmelting(var0, var1);
  390.     }
  391.  
  392.     public static void addSpawn(Class var0, int var1, int var2, int var3, EnumCreatureType var4)
  393.     {
  394.         addSpawn(var0, var1, var2, var3, var4, (BiomeGenBase[])null);
  395.     }
  396.  
  397.     public static void addSpawn(Class var0, int var1, int var2, int var3, EnumCreatureType var4, BiomeGenBase ... var5)
  398.     {
  399.         if (var0 == null)
  400.         {
  401.             throw new IllegalArgumentException("entityClass cannot be null");
  402.         }
  403.         else if (var4 == null)
  404.         {
  405.             throw new IllegalArgumentException("spawnList cannot be null");
  406.         }
  407.         else
  408.         {
  409.             if (var5 == null)
  410.             {
  411.                 var5 = standardBiomes;
  412.             }
  413.  
  414.             for (int var6 = 0; var6 < var5.length; ++var6)
  415.             {
  416.                 List var7 = var5[var6].getSpawnableList(var4);
  417.  
  418.                 if (var7 != null)
  419.                 {
  420.                     boolean var8 = false;
  421.                     Iterator var10 = var7.iterator();
  422.  
  423.                     while (var10.hasNext())
  424.                     {
  425.                         SpawnListEntry var9 = (SpawnListEntry)var10.next();
  426.  
  427.                         if (var9.entityClass == var0)
  428.                         {
  429.                             var9.itemWeight = var1;
  430.                             var9.minGroupCount = var2;
  431.                             var9.maxGroupCount = var3;
  432.                             var8 = true;
  433.                             break;
  434.                         }
  435.                     }
  436.  
  437.                     if (!var8)
  438.                     {
  439.                         var7.add(new SpawnListEntry(var0, var1, var2, var3));
  440.                     }
  441.                 }
  442.             }
  443.         }
  444.     }
  445.  
  446.     public static void addSpawn(String var0, int var1, int var2, int var3, EnumCreatureType var4)
  447.     {
  448.         addSpawn(var0, var1, var2, var3, var4, (BiomeGenBase[])null);
  449.     }
  450.  
  451.     public static void addSpawn(String var0, int var1, int var2, int var3, EnumCreatureType var4, BiomeGenBase ... var5)
  452.     {
  453.         Class var6 = (Class)classMap.get(var0);
  454.  
  455.         if (var6 != null && EntityLiving.class.isAssignableFrom(var6))
  456.         {
  457.             addSpawn(var6, var1, var2, var3, var4, var5);
  458.         }
  459.     }
  460.  
  461.     public static boolean dispenseEntity(World var0, double var1, double var3, double var5, int var7, int var8, ItemStack var9)
  462.     {
  463.         boolean var10 = false;
  464.  
  465.         for (Iterator var11 = modList.iterator(); var11.hasNext() && !var10; var10 = ((BaseMod)var11.next()).dispenseEntity(var0, var1, var3, var5, var7, var8, var9))
  466.         {
  467.             ;
  468.         }
  469.  
  470.         return var10;
  471.     }
  472.  
  473.     public static void genericContainerRemoval(World var0, int var1, int var2, int var3)
  474.     {
  475.         IInventory var4 = (IInventory)var0.getBlockTileEntity(var1, var2, var3);
  476.  
  477.         if (var4 != null)
  478.         {
  479.             for (int var5 = 0; var5 < var4.getSizeInventory(); ++var5)
  480.             {
  481.                 ItemStack var6 = var4.getStackInSlot(var5);
  482.  
  483.                 if (var6 != null)
  484.                 {
  485.                     double var7 = var0.rand.nextDouble() * 0.8D + 0.1D;
  486.                     double var9 = var0.rand.nextDouble() * 0.8D + 0.1D;
  487.                     EntityItem var14;
  488.  
  489.                     for (double var11 = var0.rand.nextDouble() * 0.8D + 0.1D; var6.stackSize > 0; var0.spawnEntityInWorld(var14))
  490.                     {
  491.                         int var13 = var0.rand.nextInt(21) + 10;
  492.  
  493.                         if (var13 > var6.stackSize)
  494.                         {
  495.                             var13 = var6.stackSize;
  496.                         }
  497.  
  498.                         var6.stackSize -= var13;
  499.                         var14 = new EntityItem(var0, (double)var1 + var7, (double)var2 + var9, (double)var3 + var11, new ItemStack(var6.itemID, var13, var6.getItemDamage()));
  500.                         double var15 = 0.05D;
  501.                         var14.motionX = var0.rand.nextGaussian() * var15;
  502.                         var14.motionY = var0.rand.nextGaussian() * var15 + 0.2D;
  503.                         var14.motionZ = var0.rand.nextGaussian() * var15;
  504.  
  505.                         if (var6.hasTagCompound())
  506.                         {
  507.                             var14.item.setTagCompound((NBTTagCompound)var6.getTagCompound().copy());
  508.                         }
  509.                     }
  510.  
  511.                     var4.setInventorySlotContents(var5, (ItemStack)null);
  512.                 }
  513.             }
  514.         }
  515.     }
  516.  
  517.     public static List getLoadedMods()
  518.     {
  519.         return Collections.unmodifiableList(modList);
  520.     }
  521.  
  522.     public static Logger getLogger()
  523.     {
  524.         return logger;
  525.     }
  526.  
  527.     public static Minecraft getMinecraftInstance()
  528.     {
  529.         if (instance == null)
  530.         {
  531.             try
  532.             {
  533.                 ThreadGroup var0 = Thread.currentThread().getThreadGroup();
  534.                 int var1 = var0.activeCount();
  535.                 Thread[] var2 = new Thread[var1];
  536.                 var0.enumerate(var2);
  537.                 int var3;
  538.  
  539.                 for (var3 = 0; var3 < var2.length; ++var3)
  540.                 {
  541.                     System.out.println(var2[var3].getName());
  542.                 }
  543.  
  544.                 for (var3 = 0; var3 < var2.length; ++var3)
  545.                 {
  546.                     if (var2[var3].getName().equals("Minecraft main thread"))
  547.                     {
  548.                         instance = (Minecraft)getPrivateValue(Thread.class, var2[var3], "target");
  549.                         break;
  550.                     }
  551.                 }
  552.             }
  553.             catch (SecurityException var4)
  554.             {
  555.                 logger.throwing("ModLoader", "getMinecraftInstance", var4);
  556.                 throw new RuntimeException(var4);
  557.             }
  558.             catch (NoSuchFieldException var5)
  559.             {
  560.                 logger.throwing("ModLoader", "getMinecraftInstance", var5);
  561.                 throw new RuntimeException(var5);
  562.             }
  563.         }
  564.  
  565.         return instance;
  566.     }
  567.  
  568.     public static Object getPrivateValue(Class var0, Object var1, int var2) throws IllegalArgumentException, SecurityException, NoSuchFieldException
  569.     {
  570.         try
  571.         {
  572.             Field var3 = var0.getDeclaredFields()[var2];
  573.             var3.setAccessible(true);
  574.             return var3.get(var1);
  575.         }
  576.         catch (IllegalAccessException var4)
  577.         {
  578.             logger.throwing("ModLoader", "getPrivateValue", var4);
  579.             throwException("An impossible error has occured!", var4);
  580.             return null;
  581.         }
  582.     }
  583.  
  584.     public static Object getPrivateValue(Class var0, Object var1, String var2) throws IllegalArgumentException, SecurityException, NoSuchFieldException
  585.     {
  586.         try
  587.         {
  588.             Field var3 = var0.getDeclaredField(var2);
  589.             var3.setAccessible(true);
  590.             return var3.get(var1);
  591.         }
  592.         catch (IllegalAccessException var4)
  593.         {
  594.             logger.throwing("ModLoader", "getPrivateValue", var4);
  595.             throwException("An impossible error has occured!", var4);
  596.             return null;
  597.         }
  598.     }
  599.  
  600.     public static int getUniqueBlockModelID(BaseMod var0, boolean var1)
  601.     {
  602.         int var2 = nextBlockModelID++;
  603.         blockModels.put(Integer.valueOf(var2), var0);
  604.         blockSpecialInv.put(Integer.valueOf(var2), Boolean.valueOf(var1));
  605.         return var2;
  606.     }
  607.  
  608.     public static int getUniqueEntityId()
  609.     {
  610.         return highestEntityId++;
  611.     }
  612.  
  613.     private static int getUniqueItemSpriteIndex()
  614.     {
  615.         while (itemSpriteIndex < usedItemSprites.length)
  616.         {
  617.             if (!usedItemSprites[itemSpriteIndex])
  618.             {
  619.                 usedItemSprites[itemSpriteIndex] = true;
  620.                 --itemSpritesLeft;
  621.                 return itemSpriteIndex++;
  622.             }
  623.  
  624.             ++itemSpriteIndex;
  625.         }
  626.  
  627.         Exception var0 = new Exception("No more empty item sprite indices left!");
  628.         logger.throwing("ModLoader", "getUniqueItemSpriteIndex", var0);
  629.         throwException(var0);
  630.         return 0;
  631.     }
  632.  
  633.     public static int getUniqueSpriteIndex(String var0)
  634.     {
  635.         if (var0.equals("/gui/items.png"))
  636.         {
  637.             return getUniqueItemSpriteIndex();
  638.         }
  639.         else if (var0.equals("/terrain.png"))
  640.         {
  641.             return getUniqueTerrainSpriteIndex();
  642.         }
  643.         else
  644.         {
  645.             Exception var1 = new Exception("No registry for this texture: " + var0);
  646.             logger.throwing("ModLoader", "getUniqueItemSpriteIndex", var1);
  647.             throwException(var1);
  648.             return 0;
  649.         }
  650.     }
  651.  
  652.     private static int getUniqueTerrainSpriteIndex()
  653.     {
  654.         while (terrainSpriteIndex < usedTerrainSprites.length)
  655.         {
  656.             if (!usedTerrainSprites[terrainSpriteIndex])
  657.             {
  658.                 usedTerrainSprites[terrainSpriteIndex] = true;
  659.                 --terrainSpritesLeft;
  660.                 return terrainSpriteIndex++;
  661.             }
  662.  
  663.             ++terrainSpriteIndex;
  664.         }
  665.  
  666.         Exception var0 = new Exception("No more empty terrain sprite indices left!");
  667.         logger.throwing("ModLoader", "getUniqueItemSpriteIndex", var0);
  668.         throwException(var0);
  669.         return 0;
  670.     }
  671.  
  672.     private static void init()
  673.     {
  674.         hasInit = true;
  675.         String var0 = "1111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111110111111111111111000111111111111101111111110000000101111111000000010101111100000000000000110000000000000000000000000000000000000000000000001111111111111111";
  676.         String var1 = "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000001111111111000000001111111100000111111111100000001111111110000001111111111111111111";
  677.  
  678.         for (int var2 = 0; var2 < 256; ++var2)
  679.         {
  680.             usedItemSprites[var2] = var0.charAt(var2) == 49;
  681.  
  682.             if (!usedItemSprites[var2])
  683.             {
  684.                 ++itemSpritesLeft;
  685.             }
  686.  
  687.             usedTerrainSprites[var2] = var1.charAt(var2) == 49;
  688.  
  689.             if (!usedTerrainSprites[var2])
  690.             {
  691.                 ++terrainSpritesLeft;
  692.             }
  693.         }
  694.  
  695.         try
  696.         {
  697.             instance = (Minecraft)getPrivateValue(Minecraft.class, (Object)null, 1);
  698.             instance.entityRenderer = new EntityRendererProxy(instance);
  699.             classMap = (Map)getPrivateValue(EntityList.class, (Object)null, 0);
  700.             field_modifiers = Field.class.getDeclaredField("modifiers");
  701.             field_modifiers.setAccessible(true);
  702.             field_TileEntityRenderers = TileEntityRenderer.class.getDeclaredFields()[0];
  703.             field_TileEntityRenderers.setAccessible(true);
  704.             field_armorList = RenderPlayer.class.getDeclaredFields()[3];
  705.             field_modifiers.setInt(field_armorList, field_armorList.getModifiers() & -17);
  706.             field_armorList.setAccessible(true);
  707.             field_animList = RenderEngine.class.getDeclaredFields()[6];
  708.             field_animList.setAccessible(true);
  709.             Field[] var15 = BiomeGenBase.class.getDeclaredFields();
  710.             LinkedList var3 = new LinkedList();
  711.             int var4 = 0;
  712.  
  713.             while (true)
  714.             {
  715.                 if (var4 >= var15.length)
  716.                 {
  717.                     standardBiomes = (BiomeGenBase[])var3.toArray(new BiomeGenBase[0]);
  718.  
  719.                     try
  720.                     {
  721.                         method_RegisterTileEntity = TileEntity.class.getDeclaredMethod("a", new Class[] {Class.class, String.class});
  722.                     }
  723.                     catch (NoSuchMethodException var8)
  724.                     {
  725.                         method_RegisterTileEntity = TileEntity.class.getDeclaredMethod("addMapping", new Class[] {Class.class, String.class});
  726.                     }
  727.  
  728.                     method_RegisterTileEntity.setAccessible(true);
  729.  
  730.                     try
  731.                     {
  732.                         method_RegisterEntityID = EntityList.class.getDeclaredMethod("a", new Class[] {Class.class, String.class, Integer.TYPE});
  733.                     }
  734.                     catch (NoSuchMethodException var7)
  735.                     {
  736.                         method_RegisterEntityID = EntityList.class.getDeclaredMethod("addMapping", new Class[] {Class.class, String.class, Integer.TYPE});
  737.                     }
  738.  
  739.                     method_RegisterEntityID.setAccessible(true);
  740.                     break;
  741.                 }
  742.  
  743.                 Class var5 = var15[var4].getType();
  744.  
  745.                 if ((var15[var4].getModifiers() & 8) != 0 && var5.isAssignableFrom(BiomeGenBase.class))
  746.                 {
  747.                     BiomeGenBase var6 = (BiomeGenBase)var15[var4].get((Object)null);
  748.  
  749.                     if (!(var6 instanceof BiomeGenHell) && !(var6 instanceof BiomeGenEnd))
  750.                     {
  751.                         var3.add(var6);
  752.                     }
  753.                 }
  754.  
  755.                 ++var4;
  756.             }
  757.         }
  758.         catch (SecurityException var10)
  759.         {
  760.             logger.throwing("ModLoader", "init", var10);
  761.             throwException(var10);
  762.             throw new RuntimeException(var10);
  763.         }
  764.         catch (NoSuchFieldException var11)
  765.         {
  766.             logger.throwing("ModLoader", "init", var11);
  767.             throwException(var11);
  768.             throw new RuntimeException(var11);
  769.         }
  770.         catch (NoSuchMethodException var12)
  771.         {
  772.             logger.throwing("ModLoader", "init", var12);
  773.             throwException(var12);
  774.             throw new RuntimeException(var12);
  775.         }
  776.         catch (IllegalArgumentException var13)
  777.         {
  778.             logger.throwing("ModLoader", "init", var13);
  779.             throwException(var13);
  780.             throw new RuntimeException(var13);
  781.         }
  782.         catch (IllegalAccessException var14)
  783.         {
  784.             logger.throwing("ModLoader", "init", var14);
  785.             throwException(var14);
  786.             throw new RuntimeException(var14);
  787.         }
  788.  
  789.         try
  790.         {
  791.             loadConfig();
  792.  
  793.             if (props.containsKey("loggingLevel"))
  794.             {
  795.                 cfgLoggingLevel = Level.parse(props.getProperty("loggingLevel"));
  796.             }
  797.  
  798.             if (props.containsKey("grassFix"))
  799.             {
  800.                 RenderBlocks.cfgGrassFix = Boolean.parseBoolean(props.getProperty("grassFix"));
  801.             }
  802.  
  803.             logger.setLevel(cfgLoggingLevel);
  804.  
  805.             if ((logfile.exists() || logfile.createNewFile()) && logfile.canWrite() && logHandler == null)
  806.             {
  807.                 logHandler = new FileHandler(logfile.getPath());
  808.                 logHandler.setFormatter(new SimpleFormatter());
  809.                 logger.addHandler(logHandler);
  810.             }
  811.  
  812.             logger.fine("ModLoader 1.2.5 Initializing...");
  813.             System.out.println("ModLoader 1.2.5 Initializing...");
  814.             File var16 = new File(ModLoader.class.getProtectionDomain().getCodeSource().getLocation().toURI());
  815.             modDir.mkdirs();
  816.             readFromClassPath(var16);
  817.             readFromModFolder(modDir);
  818.             sortModList();
  819.             Iterator var18 = modList.iterator();
  820.             BaseMod var17;
  821.  
  822.             while (var18.hasNext())
  823.             {
  824.                 var17 = (BaseMod)var18.next();
  825.                 var17.load();
  826.                 logger.fine("Mod Loaded: \"" + var17.toString() + "\"");
  827.                 System.out.println("Mod Loaded: " + var17.toString());
  828.  
  829.                 if (!props.containsKey(var17.getClass().getSimpleName()))
  830.                 {
  831.                     props.setProperty(var17.getClass().getSimpleName(), "on");
  832.                 }
  833.             }
  834.  
  835.             var18 = modList.iterator();
  836.  
  837.             while (var18.hasNext())
  838.             {
  839.                 var17 = (BaseMod)var18.next();
  840.                 var17.modsLoaded();
  841.             }
  842.  
  843.             System.out.println("Done.");
  844.             props.setProperty("loggingLevel", cfgLoggingLevel.getName());
  845.             props.setProperty("grassFix", Boolean.toString(RenderBlocks.cfgGrassFix));
  846.             instance.gameSettings.keyBindings = registerAllKeys(instance.gameSettings.keyBindings);
  847.             instance.gameSettings.loadOptions();
  848.             initStats();
  849.             saveConfig();
  850.         }
  851.         catch (Throwable var9)
  852.         {
  853.             logger.throwing("ModLoader", "init", var9);
  854.             throwException("ModLoader has failed to initialize.", var9);
  855.  
  856.             if (logHandler != null)
  857.             {
  858.                 logHandler.close();
  859.             }
  860.  
  861.             throw new RuntimeException(var9);
  862.         }
  863.     }
  864.  
  865.     private static void initStats()
  866.     {
  867.         int var0;
  868.         String var1;
  869.  
  870.         for (var0 = 0; var0 < Block.blocksList.length; ++var0)
  871.         {
  872.             if (!StatList.oneShotStats.containsKey(Integer.valueOf(16777216 + var0)) && Block.blocksList[var0] != null && Block.blocksList[var0].getEnableStats())
  873.             {
  874.                 var1 = StatCollector.translateToLocalFormatted("stat.mineBlock", new Object[] {Block.blocksList[var0].translateBlockName()});
  875.                 StatList.mineBlockStatArray[var0] = (new StatCrafting(16777216 + var0, var1, var0)).registerStat();
  876.                 StatList.objectMineStats.add(StatList.mineBlockStatArray[var0]);
  877.             }
  878.         }
  879.  
  880.         for (var0 = 0; var0 < Item.itemsList.length; ++var0)
  881.         {
  882.             if (!StatList.oneShotStats.containsKey(Integer.valueOf(16908288 + var0)) && Item.itemsList[var0] != null)
  883.             {
  884.                 var1 = StatCollector.translateToLocalFormatted("stat.useItem", new Object[] {Item.itemsList[var0].getStatName()});
  885.                 StatList.objectUseStats[var0] = (new StatCrafting(16908288 + var0, var1, var0)).registerStat();
  886.  
  887.                 if (var0 >= Block.blocksList.length)
  888.                 {
  889.                     StatList.itemStats.add(StatList.objectUseStats[var0]);
  890.                 }
  891.             }
  892.  
  893.             if (!StatList.oneShotStats.containsKey(Integer.valueOf(16973824 + var0)) && Item.itemsList[var0] != null && Item.itemsList[var0].isDamageable())
  894.             {
  895.                 var1 = StatCollector.translateToLocalFormatted("stat.breakItem", new Object[] {Item.itemsList[var0].getStatName()});
  896.                 StatList.objectBreakStats[var0] = (new StatCrafting(16973824 + var0, var1, var0)).registerStat();
  897.             }
  898.         }
  899.  
  900.         HashSet var4 = new HashSet();
  901.         Iterator var2 = CraftingManager.getInstance().getRecipeList().iterator();
  902.         Object var5;
  903.  
  904.         while (var2.hasNext())
  905.         {
  906.             var5 = var2.next();
  907.             var4.add(Integer.valueOf(((IRecipe)var5).getRecipeOutput().itemID));
  908.         }
  909.  
  910.         var2 = FurnaceRecipes.smelting().getSmeltingList().values().iterator();
  911.  
  912.         while (var2.hasNext())
  913.         {
  914.             var5 = var2.next();
  915.             var4.add(Integer.valueOf(((ItemStack)var5).itemID));
  916.         }
  917.  
  918.         var2 = var4.iterator();
  919.  
  920.         while (var2.hasNext())
  921.         {
  922.             int var6 = ((Integer)var2.next()).intValue();
  923.  
  924.             if (!StatList.oneShotStats.containsKey(Integer.valueOf(16842752 + var6)) && Item.itemsList[var6] != null)
  925.             {
  926.                 String var3 = StatCollector.translateToLocalFormatted("stat.craftItem", new Object[] {Item.itemsList[var6].getStatName()});
  927.                 StatList.objectCraftStats[var6] = (new StatCrafting(16842752 + var6, var3, var6)).registerStat();
  928.             }
  929.         }
  930.     }
  931.  
  932.     public static boolean isGUIOpen(Class var0)
  933.     {
  934.         Minecraft var1 = getMinecraftInstance();
  935.         return var0 == null ? var1.currentScreen == null : (var1.currentScreen == null && var0 != null ? false : var0.isInstance(var1.currentScreen));
  936.     }
  937.  
  938.     public static boolean isModLoaded(String var0)
  939.     {
  940.         Iterator var2 = modList.iterator();
  941.  
  942.         while (var2.hasNext())
  943.         {
  944.             BaseMod var1 = (BaseMod)var2.next();
  945.  
  946.             if (var0.contentEquals(var1.getName()))
  947.             {
  948.                 return true;
  949.             }
  950.         }
  951.  
  952.         return false;
  953.     }
  954.  
  955.     public static void loadConfig() throws IOException
  956.     {
  957.         cfgdir.mkdir();
  958.  
  959.         if (cfgfile.exists() || cfgfile.createNewFile())
  960.         {
  961.             if (cfgfile.canRead())
  962.             {
  963.                 FileInputStream var0 = new FileInputStream(cfgfile);
  964.                 props.load(var0);
  965.                 var0.close();
  966.             }
  967.         }
  968.     }
  969.  
  970.     public static BufferedImage loadImage(RenderEngine var0, String var1) throws Exception
  971.     {
  972.         TexturePackList var2 = (TexturePackList)getPrivateValue(RenderEngine.class, var0, 11);
  973.         InputStream var3 = var2.selectedTexturePack.getResourceAsStream(var1);
  974.  
  975.         if (var3 == null)
  976.         {
  977.             throw new Exception("Image not found: " + var1);
  978.         }
  979.         else
  980.         {
  981.             BufferedImage var4 = ImageIO.read(var3);
  982.  
  983.             if (var4 == null)
  984.             {
  985.                 throw new Exception("Image corrupted: " + var1);
  986.             }
  987.             else
  988.             {
  989.                 return var4;
  990.             }
  991.         }
  992.     }
  993.  
  994.     public static void onItemPickup(EntityPlayer var0, ItemStack var1)
  995.     {
  996.         Iterator var3 = modList.iterator();
  997.  
  998.         while (var3.hasNext())
  999.         {
  1000.             BaseMod var2 = (BaseMod)var3.next();
  1001.             var2.onItemPickup(var0, var1);
  1002.         }
  1003.     }
  1004.  
  1005.     public static void onTick(float var0, Minecraft var1)
  1006.     {
  1007.         Profiler.endSection();
  1008.         Profiler.endSection();
  1009.         Profiler.startSection("modtick");
  1010.  
  1011.         if (!hasInit)
  1012.         {
  1013.             init();
  1014.             logger.fine("Initialized");
  1015.         }
  1016.  
  1017.         if (texPack == null || var1.gameSettings.skin != texPack)
  1018.         {
  1019.             texturesAdded = false;
  1020.             texPack = var1.gameSettings.skin;
  1021.         }
  1022.  
  1023.         if (langPack == null || StringTranslate.getInstance().getCurrentLanguage() != langPack)
  1024.         {
  1025.             Properties var2 = null;
  1026.  
  1027.             try
  1028.             {
  1029.                 var2 = (Properties)getPrivateValue(StringTranslate.class, StringTranslate.getInstance(), 1);
  1030.             }
  1031.             catch (SecurityException var12)
  1032.             {
  1033.                 logger.throwing("ModLoader", "AddLocalization", var12);
  1034.                 throwException(var12);
  1035.             }
  1036.             catch (NoSuchFieldException var13)
  1037.             {
  1038.                 logger.throwing("ModLoader", "AddLocalization", var13);
  1039.                 throwException(var13);
  1040.             }
  1041.  
  1042.             langPack = StringTranslate.getInstance().getCurrentLanguage();
  1043.  
  1044.             if (var2 != null)
  1045.             {
  1046.                 if (localizedStrings.containsKey("en_US"))
  1047.                 {
  1048.                     var2.putAll((Map)localizedStrings.get("en_US"));
  1049.                 }
  1050.  
  1051.                 if (!langPack.contentEquals("en_US") && localizedStrings.containsKey(langPack))
  1052.                 {
  1053.                     var2.putAll((Map)localizedStrings.get(langPack));
  1054.                 }
  1055.             }
  1056.         }
  1057.  
  1058.         if (!texturesAdded && var1.renderEngine != null)
  1059.         {
  1060.             registerAllTextureOverrides(var1.renderEngine);
  1061.             texturesAdded = true;
  1062.         }
  1063.  
  1064.         long var14 = 0L;
  1065.         Iterator var4;
  1066.         Entry var5;
  1067.  
  1068.         if (var1.theWorld != null)
  1069.         {
  1070.             var14 = var1.theWorld.getWorldTime();
  1071.             var4 = inGameHooks.entrySet().iterator();
  1072.  
  1073.             while (var4.hasNext())
  1074.             {
  1075.                 var5 = (Entry)var4.next();
  1076.  
  1077.                 if ((clock != var14 || !((Boolean)var5.getValue()).booleanValue()) && !((BaseMod)var5.getKey()).onTickInGame(var0, var1))
  1078.                 {
  1079.                     var4.remove();
  1080.                 }
  1081.             }
  1082.         }
  1083.  
  1084.         if (var1.standardGalacticFontRenderer != null)
  1085.         {
  1086.             var4 = inGUIHooks.entrySet().iterator();
  1087.  
  1088.             while (var4.hasNext())
  1089.             {
  1090.                 var5 = (Entry)var4.next();
  1091.  
  1092.                 if ((clock != var14 || !(((Boolean)var5.getValue()).booleanValue() & var1.theWorld != null)) && !((BaseMod)var5.getKey()).onTickInGUI(var0, var1, var1.currentScreen))
  1093.                 {
  1094.                     var4.remove();
  1095.                 }
  1096.             }
  1097.         }
  1098.  
  1099.         if (clock != var14)
  1100.         {
  1101.             Iterator var16 = keyList.entrySet().iterator();
  1102.  
  1103.             while (var16.hasNext())
  1104.             {
  1105.                 Entry var15 = (Entry)var16.next();
  1106.                 Iterator var7 = ((Map)var15.getValue()).entrySet().iterator();
  1107.  
  1108.                 while (var7.hasNext())
  1109.                 {
  1110.                     Entry var6 = (Entry)var7.next();
  1111.                     int var8 = ((KeyBinding)var6.getKey()).keyCode;
  1112.                     boolean var9;
  1113.  
  1114.                     if (var8 < 0)
  1115.                     {
  1116.                         var8 += 100;
  1117.                         var9 = Mouse.isButtonDown(var8);
  1118.                     }
  1119.                     else
  1120.                     {
  1121.                         var9 = Keyboard.isKeyDown(var8);
  1122.                     }
  1123.  
  1124.                     boolean[] var10 = (boolean[])var6.getValue();
  1125.                     boolean var11 = var10[1];
  1126.                     var10[1] = var9;
  1127.  
  1128.                     if (var9 && (!var11 || var10[0]))
  1129.                     {
  1130.                         ((BaseMod)var15.getKey()).keyboardEvent((KeyBinding)var6.getKey());
  1131.                     }
  1132.                 }
  1133.             }
  1134.         }
  1135.  
  1136.         clock = var14;
  1137.         Profiler.endSection();
  1138.         Profiler.startSection("render");
  1139.         Profiler.startSection("gameRenderer");
  1140.     }
  1141.  
  1142.     public static void openGUI(EntityPlayer var0, GuiScreen var1)
  1143.     {
  1144.         if (!hasInit)
  1145.         {
  1146.             init();
  1147.             logger.fine("Initialized");
  1148.         }
  1149.  
  1150.         Minecraft var2 = getMinecraftInstance();
  1151.  
  1152.         if (var2.renderViewEntity == var0)
  1153.         {
  1154.             if (var1 != null)
  1155.             {
  1156.                 var2.displayGuiScreen(var1);
  1157.             }
  1158.         }
  1159.     }
  1160.  
  1161.     public static void populateChunk(IChunkProvider var0, int var1, int var2, World var3)
  1162.     {
  1163.         if (!hasInit)
  1164.         {
  1165.             init();
  1166.             logger.fine("Initialized");
  1167.         }
  1168.  
  1169.         Random var4 = new Random(var3.getSeed());
  1170.         long var5 = var4.nextLong() / 2L * 2L + 1L;
  1171.         long var7 = var4.nextLong() / 2L * 2L + 1L;
  1172.         var4.setSeed((long)var1 * var5 + (long)var2 * var7 ^ var3.getSeed());
  1173.         Iterator var10 = modList.iterator();
  1174.  
  1175.         while (var10.hasNext())
  1176.         {
  1177.             BaseMod var9 = (BaseMod)var10.next();
  1178.  
  1179.             if (var0.makeString().equals("RandomLevelSource"))
  1180.             {
  1181.                 var9.generateSurface(var3, var4, var1 << 4, var2 << 4);
  1182.             }
  1183.             else if (var0.makeString().equals("HellRandomLevelSource"))
  1184.             {
  1185.                 var9.generateNether(var3, var4, var1 << 4, var2 << 4);
  1186.             }
  1187.         }
  1188.     }
  1189.  
  1190.     private static void readFromClassPath(File var0) throws FileNotFoundException, IOException
  1191.     {
  1192.         logger.finer("Adding mods from " + var0.getCanonicalPath());
  1193.         ClassLoader var1 = ModLoader.class.getClassLoader();
  1194.         String var5;
  1195.  
  1196.         if (var0.isFile() && (var0.getName().endsWith(".jar") || var0.getName().endsWith(".zip")))
  1197.         {
  1198.             logger.finer("Zip found.");
  1199.             FileInputStream var6 = new FileInputStream(var0);
  1200.             ZipInputStream var8 = new ZipInputStream(var6);
  1201.             ZipEntry var9 = null;
  1202.  
  1203.             while (true)
  1204.             {
  1205.                 var9 = var8.getNextEntry();
  1206.  
  1207.                 if (var9 == null)
  1208.                 {
  1209.                     var6.close();
  1210.                     break;
  1211.                 }
  1212.  
  1213.                 var5 = var9.getName();
  1214.  
  1215.                 if (!var9.isDirectory() && var5.startsWith("mod_") && var5.endsWith(".class"))
  1216.                 {
  1217.                     addMod(var1, var5);
  1218.                 }
  1219.             }
  1220.         }
  1221.         else if (var0.isDirectory())
  1222.         {
  1223.             Package var2 = ModLoader.class.getPackage();
  1224.  
  1225.             if (var2 != null)
  1226.             {
  1227.                 String var3 = var2.getName().replace('.', File.separatorChar);
  1228.                 var0 = new File(var0, var3);
  1229.             }
  1230.  
  1231.             logger.finer("Directory found.");
  1232.             File[] var7 = var0.listFiles();
  1233.  
  1234.             if (var7 != null)
  1235.             {
  1236.                 for (int var4 = 0; var4 < var7.length; ++var4)
  1237.                 {
  1238.                     var5 = var7[var4].getName();
  1239.  
  1240.                     if (var7[var4].isFile() && var5.startsWith("mod_") && var5.endsWith(".class"))
  1241.                     {
  1242.                         addMod(var1, var5);
  1243.                     }
  1244.                 }
  1245.             }
  1246.         }
  1247.     }
  1248.  
  1249.     private static void readFromModFolder(File var0) throws IOException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException
  1250.     {
  1251.         ClassLoader var1 = Minecraft.class.getClassLoader();
  1252.         Method var2 = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] {URL.class});
  1253.         var2.setAccessible(true);
  1254.  
  1255.         if (!var0.isDirectory())
  1256.         {
  1257.             throw new IllegalArgumentException("folder must be a Directory.");
  1258.         }
  1259.         else
  1260.         {
  1261.             File[] var3 = var0.listFiles();
  1262.             Arrays.sort(var3);
  1263.             int var4;
  1264.             File var5;
  1265.  
  1266.             if (var1 instanceof URLClassLoader)
  1267.             {
  1268.                 for (var4 = 0; var4 < var3.length; ++var4)
  1269.                 {
  1270.                     var5 = var3[var4];
  1271.  
  1272.                     if (var5.isDirectory() || var5.isFile() && (var5.getName().endsWith(".jar") || var5.getName().endsWith(".zip")))
  1273.                     {
  1274.                         var2.invoke(var1, new Object[] {var5.toURI().toURL()});
  1275.                     }
  1276.                 }
  1277.             }
  1278.  
  1279.             for (var4 = 0; var4 < var3.length; ++var4)
  1280.             {
  1281.                 var5 = var3[var4];
  1282.  
  1283.                 if (var5.isDirectory() || var5.isFile() && (var5.getName().endsWith(".jar") || var5.getName().endsWith(".zip")))
  1284.                 {
  1285.                     logger.finer("Adding mods from " + var5.getCanonicalPath());
  1286.                     String var9;
  1287.  
  1288.                     if (var5.isFile())
  1289.                     {
  1290.                         logger.finer("Zip found.");
  1291.                         FileInputStream var6 = new FileInputStream(var5);
  1292.                         ZipInputStream var7 = new ZipInputStream(var6);
  1293.                         ZipEntry var8 = null;
  1294.  
  1295.                         while (true)
  1296.                         {
  1297.                             var8 = var7.getNextEntry();
  1298.  
  1299.                             if (var8 == null)
  1300.                             {
  1301.                                 var7.close();
  1302.                                 var6.close();
  1303.                                 break;
  1304.                             }
  1305.  
  1306.                             var9 = var8.getName();
  1307.  
  1308.                             if (!var8.isDirectory() && var9.startsWith("mod_") && var9.endsWith(".class"))
  1309.                             {
  1310.                                 addMod(var1, var9);
  1311.                             }
  1312.                         }
  1313.                     }
  1314.                     else if (var5.isDirectory())
  1315.                     {
  1316.                         Package var10 = ModLoader.class.getPackage();
  1317.  
  1318.                         if (var10 != null)
  1319.                         {
  1320.                             String var11 = var10.getName().replace('.', File.separatorChar);
  1321.                             var5 = new File(var5, var11);
  1322.                         }
  1323.  
  1324.                         logger.finer("Directory found.");
  1325.                         File[] var12 = var5.listFiles();
  1326.  
  1327.                         if (var12 != null)
  1328.                         {
  1329.                             for (int var13 = 0; var13 < var12.length; ++var13)
  1330.                             {
  1331.                                 var9 = var12[var13].getName();
  1332.  
  1333.                                 if (var12[var13].isFile() && var9.startsWith("mod_") && var9.endsWith(".class"))
  1334.                                 {
  1335.                                     addMod(var1, var9);
  1336.                                 }
  1337.                             }
  1338.                         }
  1339.                     }
  1340.                 }
  1341.             }
  1342.         }
  1343.     }
  1344.  
  1345.     public static void receivePacket(Packet250CustomPayload var0)
  1346.     {
  1347.         if (packetChannels.containsKey(var0.channel))
  1348.         {
  1349.             BaseMod var1 = (BaseMod)packetChannels.get(var0.channel);
  1350.  
  1351.             if (var1 != null)
  1352.             {
  1353.                 var1.receiveCustomPacket(var0);
  1354.             }
  1355.         }
  1356.     }
  1357.  
  1358.     public static KeyBinding[] registerAllKeys(KeyBinding[] var0)
  1359.     {
  1360.         LinkedList var1 = new LinkedList();
  1361.         var1.addAll(Arrays.asList(var0));
  1362.         Iterator var3 = keyList.values().iterator();
  1363.  
  1364.         while (var3.hasNext())
  1365.         {
  1366.             Map var2 = (Map)var3.next();
  1367.             var1.addAll(var2.keySet());
  1368.         }
  1369.  
  1370.         return (KeyBinding[])var1.toArray(new KeyBinding[0]);
  1371.     }
  1372.  
  1373.     public static void registerAllTextureOverrides(RenderEngine var0)
  1374.     {
  1375.         animList.clear();
  1376.         Minecraft var1 = getMinecraftInstance();
  1377.         Iterator var3 = modList.iterator();
  1378.  
  1379.         while (var3.hasNext())
  1380.         {
  1381.             BaseMod var2 = (BaseMod)var3.next();
  1382.             var2.registerAnimation(var1);
  1383.         }
  1384.  
  1385.         var3 = animList.iterator();
  1386.  
  1387.         while (var3.hasNext())
  1388.         {
  1389.             TextureFX var12 = (TextureFX)var3.next();
  1390.             var0.registerTextureFX(var12);
  1391.         }
  1392.  
  1393.         var3 = overrides.entrySet().iterator();
  1394.  
  1395.         while (var3.hasNext())
  1396.         {
  1397.             Entry var13 = (Entry)var3.next();
  1398.             Iterator var5 = ((Map)var13.getValue()).entrySet().iterator();
  1399.  
  1400.             while (var5.hasNext())
  1401.             {
  1402.                 Entry var4 = (Entry)var5.next();
  1403.                 String var6 = (String)var4.getKey();
  1404.                 int var7 = ((Integer)var4.getValue()).intValue();
  1405.                 int var8 = ((Integer)var13.getKey()).intValue();
  1406.  
  1407.                 try
  1408.                 {
  1409.                     BufferedImage var9 = loadImage(var0, var6);
  1410.                     ModTextureStatic var10 = new ModTextureStatic(var7, var8, var9);
  1411.                     var0.registerTextureFX(var10);
  1412.                 }
  1413.                 catch (Exception var11)
  1414.                 {
  1415.                     logger.throwing("ModLoader", "RegisterAllTextureOverrides", var11);
  1416.                     throwException(var11);
  1417.                     throw new RuntimeException(var11);
  1418.                 }
  1419.             }
  1420.         }
  1421.     }
  1422.  
  1423.     public static void registerBlock(Block var0)
  1424.     {
  1425.         registerBlock(var0, (Class)null);
  1426.     }
  1427.  
  1428.     public static void registerBlock(Block var0, Class var1)
  1429.     {
  1430.         try
  1431.         {
  1432.             if (var0 == null)
  1433.             {
  1434.                 throw new IllegalArgumentException("block parameter cannot be null.");
  1435.             }
  1436.  
  1437.             int var2 = var0.blockID;
  1438.             ItemBlock var3 = null;
  1439.  
  1440.             if (var1 != null)
  1441.             {
  1442.                 var3 = (ItemBlock)var1.getConstructor(new Class[] {Integer.TYPE}).newInstance(new Object[] {Integer.valueOf(var2 - 256)});
  1443.             }
  1444.             else
  1445.             {
  1446.                 var3 = new ItemBlock(var2 - 256);
  1447.             }
  1448.  
  1449.             if (Block.blocksList[var2] != null && Item.itemsList[var2] == null)
  1450.             {
  1451.                 Item.itemsList[var2] = var3;
  1452.             }
  1453.         }
  1454.         catch (IllegalArgumentException var4)
  1455.         {
  1456.             logger.throwing("ModLoader", "RegisterBlock", var4);
  1457.             throwException(var4);
  1458.         }
  1459.         catch (IllegalAccessException var5)
  1460.         {
  1461.             logger.throwing("ModLoader", "RegisterBlock", var5);
  1462.             throwException(var5);
  1463.         }
  1464.         catch (SecurityException var6)
  1465.         {
  1466.             logger.throwing("ModLoader", "RegisterBlock", var6);
  1467.             throwException(var6);
  1468.         }
  1469.         catch (InstantiationException var7)
  1470.         {
  1471.             logger.throwing("ModLoader", "RegisterBlock", var7);
  1472.             throwException(var7);
  1473.         }
  1474.         catch (InvocationTargetException var8)
  1475.         {
  1476.             logger.throwing("ModLoader", "RegisterBlock", var8);
  1477.             throwException(var8);
  1478.         }
  1479.         catch (NoSuchMethodException var9)
  1480.         {
  1481.             logger.throwing("ModLoader", "RegisterBlock", var9);
  1482.             throwException(var9);
  1483.         }
  1484.     }
  1485.  
  1486.     public static void registerEntityID(Class var0, String var1, int var2)
  1487.     {
  1488.         try
  1489.         {
  1490.             method_RegisterEntityID.invoke((Object)null, new Object[] {var0, var1, Integer.valueOf(var2)});
  1491.         }
  1492.         catch (IllegalArgumentException var4)
  1493.         {
  1494.             logger.throwing("ModLoader", "RegisterEntityID", var4);
  1495.             throwException(var4);
  1496.         }
  1497.         catch (IllegalAccessException var5)
  1498.         {
  1499.             logger.throwing("ModLoader", "RegisterEntityID", var5);
  1500.             throwException(var5);
  1501.         }
  1502.         catch (InvocationTargetException var6)
  1503.         {
  1504.             logger.throwing("ModLoader", "RegisterEntityID", var6);
  1505.             throwException(var6);
  1506.         }
  1507.     }
  1508.  
  1509.     public static void registerEntityID(Class var0, String var1, int var2, int var3, int var4)
  1510.     {
  1511.         registerEntityID(var0, var1, var2);
  1512.         EntityList.entityEggs.put(Integer.valueOf(var2), new EntityEggInfo(var2, var3, var4));
  1513.     }
  1514.  
  1515.     public static void registerKey(BaseMod var0, KeyBinding var1, boolean var2)
  1516.     {
  1517.         Object var3 = (Map)keyList.get(var0);
  1518.  
  1519.         if (var3 == null)
  1520.         {
  1521.             var3 = new HashMap();
  1522.         }
  1523.  
  1524.         ((Map)var3).put(var1, new boolean[] {var2, false});
  1525.         keyList.put(var0, var3);
  1526.     }
  1527.  
  1528.     public static void registerPacketChannel(BaseMod var0, String var1)
  1529.     {
  1530.         if (var1.length() < 16)
  1531.         {
  1532.             packetChannels.put(var1, var0);
  1533.         }
  1534.         else
  1535.         {
  1536.             throw new RuntimeException(String.format("Invalid channel name: %s. Must be less than 16 characters.", new Object[] {var1}));
  1537.         }
  1538.     }
  1539.  
  1540.     public static void registerTileEntity(Class var0, String var1)
  1541.     {
  1542.         registerTileEntity(var0, var1, (TileEntitySpecialRenderer)null);
  1543.     }
  1544.  
  1545.     public static void registerTileEntity(Class var0, String var1, TileEntitySpecialRenderer var2)
  1546.     {
  1547.         try
  1548.         {
  1549.             method_RegisterTileEntity.invoke((Object)null, new Object[] {var0, var1});
  1550.  
  1551.             if (var2 != null)
  1552.             {
  1553.                 TileEntityRenderer var3 = TileEntityRenderer.instance;
  1554.                 Map var4 = (Map)field_TileEntityRenderers.get(var3);
  1555.                 var4.put(var0, var2);
  1556.                 var2.setTileEntityRenderer(var3);
  1557.             }
  1558.         }
  1559.         catch (IllegalArgumentException var5)
  1560.         {
  1561.             logger.throwing("ModLoader", "RegisterTileEntity", var5);
  1562.             throwException(var5);
  1563.         }
  1564.         catch (IllegalAccessException var6)
  1565.         {
  1566.             logger.throwing("ModLoader", "RegisterTileEntity", var6);
  1567.             throwException(var6);
  1568.         }
  1569.         catch (InvocationTargetException var7)
  1570.         {
  1571.             logger.throwing("ModLoader", "RegisterTileEntity", var7);
  1572.             throwException(var7);
  1573.         }
  1574.     }
  1575.  
  1576.     public static void removeBiome(BiomeGenBase var0)
  1577.     {
  1578.         BiomeGenBase[] var1 = GenLayerBiome.biomeArray;
  1579.         List var2 = Arrays.asList(var1);
  1580.         ArrayList var3 = new ArrayList();
  1581.         var3.addAll(var2);
  1582.  
  1583.         if (var3.contains(var0))
  1584.         {
  1585.             var3.remove(var0);
  1586.         }
  1587.  
  1588.         GenLayerBiome.biomeArray = (BiomeGenBase[])var3.toArray(new BiomeGenBase[0]);
  1589.     }
  1590.  
  1591.     public static void removeSpawn(Class var0, EnumCreatureType var1)
  1592.     {
  1593.         removeSpawn(var0, var1, (BiomeGenBase[])null);
  1594.     }
  1595.  
  1596.     public static void removeSpawn(Class var0, EnumCreatureType var1, BiomeGenBase ... var2)
  1597.     {
  1598.         if (var0 == null)
  1599.         {
  1600.             throw new IllegalArgumentException("entityClass cannot be null");
  1601.         }
  1602.         else if (var1 == null)
  1603.         {
  1604.             throw new IllegalArgumentException("spawnList cannot be null");
  1605.         }
  1606.         else
  1607.         {
  1608.             if (var2 == null)
  1609.             {
  1610.                 var2 = standardBiomes;
  1611.             }
  1612.  
  1613.             for (int var3 = 0; var3 < var2.length; ++var3)
  1614.             {
  1615.                 List var4 = var2[var3].getSpawnableList(var1);
  1616.  
  1617.                 if (var4 != null)
  1618.                 {
  1619.                     Iterator var5 = var4.iterator();
  1620.  
  1621.                     while (var5.hasNext())
  1622.                     {
  1623.                         SpawnListEntry var6 = (SpawnListEntry)var5.next();
  1624.  
  1625.                         if (var6.entityClass == var0)
  1626.                         {
  1627.                             var5.remove();
  1628.                         }
  1629.                     }
  1630.                 }
  1631.             }
  1632.         }
  1633.     }
  1634.  
  1635.     public static void removeSpawn(String var0, EnumCreatureType var1)
  1636.     {
  1637.         removeSpawn(var0, var1, (BiomeGenBase[])null);
  1638.     }
  1639.  
  1640.     public static void removeSpawn(String var0, EnumCreatureType var1, BiomeGenBase ... var2)
  1641.     {
  1642.         Class var3 = (Class)classMap.get(var0);
  1643.  
  1644.         if (var3 != null && EntityLiving.class.isAssignableFrom(var3))
  1645.         {
  1646.             removeSpawn(var3, var1, var2);
  1647.         }
  1648.     }
  1649.  
  1650.     public static boolean renderBlockIsItemFull3D(int var0)
  1651.     {
  1652.         return !blockSpecialInv.containsKey(Integer.valueOf(var0)) ? var0 == 16 : ((Boolean)blockSpecialInv.get(Integer.valueOf(var0))).booleanValue();
  1653.     }
  1654.  
  1655.     public static void renderInvBlock(RenderBlocks var0, Block var1, int var2, int var3)
  1656.     {
  1657.         BaseMod var4 = (BaseMod)blockModels.get(Integer.valueOf(var3));
  1658.  
  1659.         if (var4 != null)
  1660.         {
  1661.             var4.renderInvBlock(var0, var1, var2, var3);
  1662.         }
  1663.     }
  1664.  
  1665.     public static boolean renderWorldBlock(RenderBlocks var0, IBlockAccess var1, int var2, int var3, int var4, Block var5, int var6)
  1666.     {
  1667.         BaseMod var7 = (BaseMod)blockModels.get(Integer.valueOf(var6));
  1668.         return var7 == null ? false : var7.renderWorldBlock(var0, var1, var2, var3, var4, var5, var6);
  1669.     }
  1670.  
  1671.     public static void saveConfig() throws IOException
  1672.     {
  1673.         cfgdir.mkdir();
  1674.  
  1675.         if (cfgfile.exists() || cfgfile.createNewFile())
  1676.         {
  1677.             if (cfgfile.canWrite())
  1678.             {
  1679.                 FileOutputStream var0 = new FileOutputStream(cfgfile);
  1680.                 props.store(var0, "ModLoader Config");
  1681.                 var0.close();
  1682.             }
  1683.         }
  1684.     }
  1685.  
  1686.     public static void serverChat(String var0)
  1687.     {
  1688.         Iterator var2 = modList.iterator();
  1689.  
  1690.         while (var2.hasNext())
  1691.         {
  1692.             BaseMod var1 = (BaseMod)var2.next();
  1693.             var1.receiveChatPacket(var0);
  1694.         }
  1695.     }
  1696.  
  1697.     public static void serverConnect(NetClientHandler var0, Packet1Login var1)
  1698.     {
  1699.         netHandler = var0;
  1700.  
  1701.         if (packetChannels.size() > 0)
  1702.         {
  1703.             Packet250CustomPayload var2 = new Packet250CustomPayload();
  1704.             var2.channel = "REGISTER";
  1705.             StringBuilder var3 = new StringBuilder();
  1706.             Iterator var4 = packetChannels.keySet().iterator();
  1707.             var3.append((String)var4.next());
  1708.  
  1709.             while (var4.hasNext())
  1710.             {
  1711.                 var3.append("\u0000");
  1712.                 var3.append((String)var4.next());
  1713.             }
  1714.  
  1715.             var2.data = var3.toString().getBytes(Charset.forName("UTF8"));
  1716.             var2.length = var2.data.length;
  1717.             sendPacket(var2);
  1718.         }
  1719.  
  1720.         Iterator var6 = modList.iterator();
  1721.  
  1722.         while (var6.hasNext())
  1723.         {
  1724.             BaseMod var5 = (BaseMod)var6.next();
  1725.             var5.serverConnect(netHandler);
  1726.         }
  1727.     }
  1728.  
  1729.     public static void serverDisconnect()
  1730.     {
  1731.         Iterator var1 = modList.iterator();
  1732.  
  1733.         while (var1.hasNext())
  1734.         {
  1735.             BaseMod var0 = (BaseMod)var1.next();
  1736.             var0.serverDisconnect();
  1737.         }
  1738.  
  1739.         netHandler = null;
  1740.     }
  1741.  
  1742.     public static void sendPacket(Packet var0)
  1743.     {
  1744.         if (netHandler != null)
  1745.         {
  1746.             netHandler.addToSendQueue(var0);
  1747.         }
  1748.     }
  1749.  
  1750.     public static void setInGameHook(BaseMod var0, boolean var1, boolean var2)
  1751.     {
  1752.         if (var1)
  1753.         {
  1754.             inGameHooks.put(var0, Boolean.valueOf(var2));
  1755.         }
  1756.         else
  1757.         {
  1758.             inGameHooks.remove(var0);
  1759.         }
  1760.     }
  1761.  
  1762.     public static void setInGUIHook(BaseMod var0, boolean var1, boolean var2)
  1763.     {
  1764.         if (var1)
  1765.         {
  1766.             inGUIHooks.put(var0, Boolean.valueOf(var2));
  1767.         }
  1768.         else
  1769.         {
  1770.             inGUIHooks.remove(var0);
  1771.         }
  1772.     }
  1773.  
  1774.     public static void setPrivateValue(Class var0, Object var1, int var2, Object var3) throws IllegalArgumentException, SecurityException, NoSuchFieldException
  1775.     {
  1776.         try
  1777.         {
  1778.             Field var4 = var0.getDeclaredFields()[var2];
  1779.             var4.setAccessible(true);
  1780.             int var5 = field_modifiers.getInt(var4);
  1781.  
  1782.             if ((var5 & 16) != 0)
  1783.             {
  1784.                 field_modifiers.setInt(var4, var5 & -17);
  1785.             }
  1786.  
  1787.             var4.set(var1, var3);
  1788.         }
  1789.         catch (IllegalAccessException var6)
  1790.         {
  1791.             logger.throwing("ModLoader", "setPrivateValue", var6);
  1792.             throwException("An impossible error has occured!", var6);
  1793.         }
  1794.     }
  1795.  
  1796.     public static void setPrivateValue(Class var0, Object var1, String var2, Object var3) throws IllegalArgumentException, SecurityException, NoSuchFieldException
  1797.     {
  1798.         try
  1799.         {
  1800.             Field var4 = var0.getDeclaredField(var2);
  1801.             int var5 = field_modifiers.getInt(var4);
  1802.  
  1803.             if ((var5 & 16) != 0)
  1804.             {
  1805.                 field_modifiers.setInt(var4, var5 & -17);
  1806.             }
  1807.  
  1808.             var4.setAccessible(true);
  1809.             var4.set(var1, var3);
  1810.         }
  1811.         catch (IllegalAccessException var6)
  1812.         {
  1813.             logger.throwing("ModLoader", "setPrivateValue", var6);
  1814.             throwException("An impossible error has occured!", var6);
  1815.         }
  1816.     }
  1817.  
  1818.     private static void setupProperties(Class var0) throws IllegalArgumentException, IllegalAccessException, IOException, SecurityException, NoSuchFieldException, NoSuchAlgorithmException, DigestException
  1819.     {
  1820.         LinkedList var1 = new LinkedList();
  1821.         Properties var2 = new Properties();
  1822.         int var3 = 0;
  1823.         int var4 = 0;
  1824.         File var5 = new File(cfgdir, var0.getSimpleName() + ".cfg");
  1825.  
  1826.         if (var5.exists() && var5.canRead())
  1827.         {
  1828.             var2.load(new FileInputStream(var5));
  1829.         }
  1830.  
  1831.         if (var2.containsKey("checksum"))
  1832.         {
  1833.             var4 = Integer.parseInt(var2.getProperty("checksum"), 36);
  1834.         }
  1835.  
  1836.         Field[] var9;
  1837.         int var8 = (var9 = var0.getDeclaredFields()).length;
  1838.  
  1839.         for (int var7 = 0; var7 < var8; ++var7)
  1840.         {
  1841.             Field var6 = var9[var7];
  1842.  
  1843.             if ((var6.getModifiers() & 8) != 0 && var6.isAnnotationPresent(MLProp.class))
  1844.             {
  1845.                 var1.add(var6);
  1846.                 Object var10 = var6.get((Object)null);
  1847.                 var3 += var10.hashCode();
  1848.             }
  1849.         }
  1850.  
  1851.         StringBuilder var19 = new StringBuilder();
  1852.         Iterator var21 = var1.iterator();
  1853.  
  1854.         while (var21.hasNext())
  1855.         {
  1856.             Field var20 = (Field)var21.next();
  1857.  
  1858.             if ((var20.getModifiers() & 8) != 0 && var20.isAnnotationPresent(MLProp.class))
  1859.             {
  1860.                 Class var22 = var20.getType();
  1861.                 MLProp var23 = (MLProp)var20.getAnnotation(MLProp.class);
  1862.                 String var11 = var23.name().length() == 0 ? var20.getName() : var23.name();
  1863.                 Object var12 = var20.get((Object)null);
  1864.                 StringBuilder var13 = new StringBuilder();
  1865.  
  1866.                 if (var23.min() != Double.NEGATIVE_INFINITY)
  1867.                 {
  1868.                     var13.append(String.format(",>=%.1f", new Object[] {Double.valueOf(var23.min())}));
  1869.                 }
  1870.  
  1871.                 if (var23.max() != Double.POSITIVE_INFINITY)
  1872.                 {
  1873.                     var13.append(String.format(",<=%.1f", new Object[] {Double.valueOf(var23.max())}));
  1874.                 }
  1875.  
  1876.                 StringBuilder var14 = new StringBuilder();
  1877.  
  1878.                 if (var23.info().length() > 0)
  1879.                 {
  1880.                     var14.append(" -- ");
  1881.                     var14.append(var23.info());
  1882.                 }
  1883.  
  1884.                 var19.append(String.format("%s (%s:%s%s)%s\n", new Object[] {var11, var22.getName(), var12, var13, var14}));
  1885.  
  1886.                 if (var4 == var3 && var2.containsKey(var11))
  1887.                 {
  1888.                     String var15 = var2.getProperty(var11);
  1889.                     Object var16 = null;
  1890.  
  1891.                     if (var22.isAssignableFrom(String.class))
  1892.                     {
  1893.                         var16 = var15;
  1894.                     }
  1895.                     else if (var22.isAssignableFrom(Integer.TYPE))
  1896.                     {
  1897.                         var16 = Integer.valueOf(Integer.parseInt(var15));
  1898.                     }
  1899.                     else if (var22.isAssignableFrom(Short.TYPE))
  1900.                     {
  1901.                         var16 = Short.valueOf(Short.parseShort(var15));
  1902.                     }
  1903.                     else if (var22.isAssignableFrom(Byte.TYPE))
  1904.                     {
  1905.                         var16 = Byte.valueOf(Byte.parseByte(var15));
  1906.                     }
  1907.                     else if (var22.isAssignableFrom(Boolean.TYPE))
  1908.                     {
  1909.                         var16 = Boolean.valueOf(Boolean.parseBoolean(var15));
  1910.                     }
  1911.                     else if (var22.isAssignableFrom(Float.TYPE))
  1912.                     {
  1913.                         var16 = Float.valueOf(Float.parseFloat(var15));
  1914.                     }
  1915.                     else if (var22.isAssignableFrom(Double.TYPE))
  1916.                     {
  1917.                         var16 = Double.valueOf(Double.parseDouble(var15));
  1918.                     }
  1919.  
  1920.                     if (var16 != null)
  1921.                     {
  1922.                         if (var16 instanceof Number)
  1923.                         {
  1924.                             double var17 = ((Number)var16).doubleValue();
  1925.  
  1926.                             if (var23.min() != Double.NEGATIVE_INFINITY && var17 < var23.min() || var23.max() != Double.POSITIVE_INFINITY && var17 > var23.max())
  1927.                             {
  1928.                                 continue;
  1929.                             }
  1930.                         }
  1931.  
  1932.                         logger.finer(var11 + " set to " + var16);
  1933.  
  1934.                         if (!var16.equals(var12))
  1935.                         {
  1936.                             var20.set((Object)null, var16);
  1937.                         }
  1938.                     }
  1939.                 }
  1940.                 else
  1941.                 {
  1942.                     logger.finer(var11 + " not in config, using default: " + var12);
  1943.                     var2.setProperty(var11, var12.toString());
  1944.                 }
  1945.             }
  1946.         }
  1947.  
  1948.         var2.put("checksum", Integer.toString(var3, 36));
  1949.  
  1950.         if (!var2.isEmpty() && (var5.exists() || var5.createNewFile()) && var5.canWrite())
  1951.         {
  1952.             var2.store(new FileOutputStream(var5), var19.toString());
  1953.         }
  1954.     }
  1955.  
  1956.     private static void sortModList() throws Exception
  1957.     {
  1958.         HashMap var0 = new HashMap();
  1959.         Iterator var2 = getLoadedMods().iterator();
  1960.  
  1961.         while (var2.hasNext())
  1962.         {
  1963.             BaseMod var1 = (BaseMod)var2.next();
  1964.             var0.put(var1.getClass().getSimpleName(), var1);
  1965.         }
  1966.  
  1967.         LinkedList var17 = new LinkedList();
  1968.  
  1969.         for (int var18 = 0; var17.size() != modList.size() && var18 <= 10; ++var18)
  1970.         {
  1971.             Iterator var4 = modList.iterator();
  1972.  
  1973.             while (var4.hasNext())
  1974.             {
  1975.                 BaseMod var3 = (BaseMod)var4.next();
  1976.  
  1977.                 if (!var17.contains(var3))
  1978.                 {
  1979.                     String var5 = var3.getPriorities();
  1980.  
  1981.                     if (var5 != null && var5.length() != 0 && var5.indexOf(58) != -1)
  1982.                     {
  1983.                         if (var18 > 0)
  1984.                         {
  1985.                             int var7 = -1;
  1986.                             int var8 = Integer.MIN_VALUE;
  1987.                             int var9 = Integer.MAX_VALUE;
  1988.                             String[] var6;
  1989.  
  1990.                             if (var5.indexOf(59) > 0)
  1991.                             {
  1992.                                 var6 = var5.split(";");
  1993.                             }
  1994.                             else
  1995.                             {
  1996.                                 var6 = new String[] {var5};
  1997.                             }
  1998.  
  1999.                             int var10 = 0;
  2000.  
  2001.                             while (true)
  2002.                             {
  2003.                                 if (var10 < var6.length)
  2004.                                 {
  2005.                                     label141:
  2006.                                     {
  2007.                                         String var11 = var6[var10];
  2008.  
  2009.                                         if (var11.indexOf(58) != -1)
  2010.                                         {
  2011.                                             String[] var12 = var11.split(":");
  2012.                                             String var13 = var12[0];
  2013.                                             String var14 = var12[1];
  2014.  
  2015.                                             if (var13.contentEquals("required-before") || var13.contentEquals("before") || var13.contentEquals("after") || var13.contentEquals("required-after"))
  2016.                                             {
  2017.                                                 if (var14.contentEquals("*"))
  2018.                                                 {
  2019.                                                     if (!var13.contentEquals("required-before") && !var13.contentEquals("before"))
  2020.                                                     {
  2021.                                                         if (var13.contentEquals("required-after") || var13.contentEquals("after"))
  2022.                                                         {
  2023.                                                             var7 = var17.size();
  2024.                                                         }
  2025.                                                     }
  2026.                                                     else
  2027.                                                     {
  2028.                                                         var7 = 0;
  2029.                                                     }
  2030.  
  2031.                                                     break label141;
  2032.                                                 }
  2033.  
  2034.                                                 if ((var13.contentEquals("required-before") || var13.contentEquals("required-after")) && !var0.containsKey(var14))
  2035.                                                 {
  2036.                                                     throw new Exception(String.format("%s is missing dependency: %s", new Object[] {var3, var14}));
  2037.                                                 }
  2038.  
  2039.                                                 BaseMod var15 = (BaseMod)var0.get(var14);
  2040.  
  2041.                                                 if (!var17.contains(var15))
  2042.                                                 {
  2043.                                                     break;
  2044.                                                 }
  2045.  
  2046.                                                 int var16 = var17.indexOf(var15);
  2047.  
  2048.                                                 if (!var13.contentEquals("required-before") && !var13.contentEquals("before"))
  2049.                                                 {
  2050.                                                     if (var13.contentEquals("required-after") || var13.contentEquals("after"))
  2051.                                                     {
  2052.                                                         var7 = var16 + 1;
  2053.  
  2054.                                                         if (var7 > var8)
  2055.                                                         {
  2056.                                                             var8 = var7;
  2057.                                                         }
  2058.                                                         else
  2059.                                                         {
  2060.                                                             var7 = var8;
  2061.                                                         }
  2062.                                                     }
  2063.                                                 }
  2064.                                                 else
  2065.                                                 {
  2066.                                                     var7 = var16;
  2067.  
  2068.                                                     if (var16 < var9)
  2069.                                                     {
  2070.                                                         var9 = var16;
  2071.                                                     }
  2072.                                                     else
  2073.                                                     {
  2074.                                                         var7 = var9;
  2075.                                                     }
  2076.                                                 }
  2077.                                             }
  2078.                                         }
  2079.  
  2080.                                         ++var10;
  2081.                                         continue;
  2082.                                     }
  2083.                                 }
  2084.  
  2085.                                 if (var7 != -1)
  2086.                                 {
  2087.                                     var17.add(var7, var3);
  2088.                                 }
  2089.  
  2090.                                 break;
  2091.                             }
  2092.                         }
  2093.                     }
  2094.                     else
  2095.                     {
  2096.                         var17.add(var3);
  2097.                     }
  2098.                 }
  2099.             }
  2100.         }
  2101.  
  2102.         modList.clear();
  2103.         modList.addAll(var17);
  2104.     }
  2105.  
  2106.     public static void takenFromCrafting(EntityPlayer var0, ItemStack var1, IInventory var2)
  2107.     {
  2108.         Iterator var4 = modList.iterator();
  2109.  
  2110.         while (var4.hasNext())
  2111.         {
  2112.             BaseMod var3 = (BaseMod)var4.next();
  2113.             var3.takenFromCrafting(var0, var1, var2);
  2114.         }
  2115.     }
  2116.  
  2117.     public static void takenFromFurnace(EntityPlayer var0, ItemStack var1)
  2118.     {
  2119.         Iterator var3 = modList.iterator();
  2120.  
  2121.         while (var3.hasNext())
  2122.         {
  2123.             BaseMod var2 = (BaseMod)var3.next();
  2124.             var2.takenFromFurnace(var0, var1);
  2125.         }
  2126.     }
  2127.  
  2128.     public static void throwException(String var0, Throwable var1)
  2129.     {
  2130.         Minecraft var2 = getMinecraftInstance();
  2131.  
  2132.         if (var2 != null)
  2133.         {
  2134.             var2.displayUnexpectedThrowable(new UnexpectedThrowable(var0, var1));
  2135.         }
  2136.         else
  2137.         {
  2138.             throw new RuntimeException(var1);
  2139.         }
  2140.     }
  2141.  
  2142.     private static void throwException(Throwable var0)
  2143.     {
  2144.         throwException("Exception occured in ModLoader", var0);
  2145.     }
  2146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement