Advertisement
Guest User

modloader.clas fix for 1.1 (untested)

a guest
Jan 19th, 2012
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 58.39 KB | None | 0 0
  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.io.OutputStream;
  9. import java.io.PrintStream;
  10. import java.lang.reflect.Constructor;
  11. import java.lang.reflect.Field;
  12. import java.lang.reflect.InvocationTargetException;
  13. import java.lang.reflect.Method;
  14. import java.net.URI;
  15. import java.net.URL;
  16. import java.net.URLClassLoader;
  17. import java.security.DigestException;
  18. import java.security.NoSuchAlgorithmException;
  19. import java.util.ArrayList;
  20. import java.util.Arrays;
  21. import java.util.Collection;
  22. import java.util.Collections;
  23. import java.util.HashMap;
  24. import java.util.HashSet;
  25. import java.util.Iterator;
  26. import java.util.LinkedList;
  27. import java.util.List;
  28. import java.util.Map;
  29. import java.util.Map.Entry;
  30. import java.util.Properties;
  31. import java.util.Random;
  32. import java.util.Set;
  33. import java.util.logging.FileHandler;
  34. import java.util.logging.Level;
  35. import java.util.logging.Logger;
  36. import java.util.logging.SimpleFormatter;
  37. import java.util.zip.ZipEntry;
  38. import java.util.zip.ZipInputStream;
  39. import javax.imageio.ImageIO;
  40. import net.minecraft.client.Minecraft;
  41. import org.lwjgl.input.Keyboard;
  42. import org.lwjgl.input.Mouse;
  43.  
  44. public final class ModLoader
  45. {
  46.   private static final List<sr> animList = new LinkedList();
  47.   private static final Map<Integer, BaseMod> blockModels = new HashMap();
  48.   private static final Map<Integer, Boolean> blockSpecialInv = new HashMap();
  49.   private static final File cfgdir = new File(Minecraft.b(), "/config/");
  50.   private static final File cfgfile = new File(cfgdir, "ModLoader.cfg");
  51.  
  52.   public static Level cfgLoggingLevel = Level.FINER;
  53.   private static Map<String, Class<? extends ms>> classMap = null;
  54.   private static long clock = 0L;
  55.   public static final boolean DEBUG = false;
  56.   private static Field field_animList = null;
  57.   private static Field field_armorList = null;
  58.   private static Field field_modifiers = null;
  59.   private static Field field_TileEntityRenderers = null;
  60.   private static boolean hasInit = false;
  61.   private static int highestEntityId = 3000;
  62.   private static final Map<BaseMod, Boolean> inGameHooks = new HashMap();
  63.   private static final Map<BaseMod, Boolean> inGUIHooks = new HashMap();
  64.  
  65.   private static Minecraft instance = null;
  66.   private static int itemSpriteIndex = 0;
  67.   private static int itemSpritesLeft = 0;
  68.   private static final Map<BaseMod, Map<ads, boolean[]>> keyList = new HashMap();
  69.   private static final File logfile = new File(Minecraft.b(), "ModLoader.txt");
  70.   private static final Logger logger = Logger.getLogger("ModLoader");
  71.   private static FileHandler logHandler = null;
  72.   private static Method method_RegisterEntityID = null;
  73.   private static Method method_RegisterTileEntity = null;
  74.   private static final File modDir = new File(Minecraft.b(), "/mods/");
  75.   private static final LinkedList<BaseMod> modList = new LinkedList();
  76.   private static int nextBlockModelID = 1000;
  77.   private static final Map<Integer, Map<String, Integer>> overrides = new HashMap();
  78.  
  79.   public static final Properties props = new Properties();
  80.   private static zp[] standardBiomes;
  81.   private static int terrainSpriteIndex = 0;
  82.   private static int terrainSpritesLeft = 0;
  83.   private static String texPack = null;
  84.  
  85.   private static boolean texturesAdded = false;
  86.  
  87.   private static final boolean[] usedItemSprites = new boolean[256];
  88.  
  89.   private static final boolean[] usedTerrainSprites = new boolean[256];
  90.   public static final String VERSION = "ModLoader 1.1";
  91.   private static Map<String, String> localizedStrings = new HashMap();
  92.  
  93.   private static String langPack = null;
  94.  
  95.   public static void AddAchievementDesc(aca paramws, String paramString1, String paramString2)
  96.   {
  97.     try
  98.     {
  99.       if (paramws.i().contains(".")) {
  100.         String[] arrayOfString = paramws.i().split("\\.");
  101.         if (arrayOfString.length == 2) {
  102.           String str = arrayOfString[1];
  103.           AddLocalization(new StringBuilder().append("achievement.").append(str).toString(), paramString1);
  104.           AddLocalization(new StringBuilder().append("achievement.").append(str).append(".desc").toString(), paramString2);
  105.           setPrivateValue(ahm.class, paramws, 1, cs.a(new StringBuilder().append("achievement.").append(str).toString()));
  106.           setPrivateValue(aca.class, paramws, 3, cs.a(new StringBuilder().append("achievement.").append(str).append(".desc").toString()));
  107.         } else {
  108.           setPrivateValue(ahm.class, paramws, 1, paramString1);
  109.           setPrivateValue(aca.class, paramws, 3, paramString2);
  110.         }
  111.       } else {
  112.         setPrivateValue(ahm.class, paramws, 1, paramString1);
  113.         setPrivateValue(aca.class, paramws, 3, paramString2);
  114.       }
  115.     } catch (IllegalArgumentException localIllegalArgumentException) {
  116.       logger.throwing("ModLoader", "AddAchievementDesc", localIllegalArgumentException);
  117.       ThrowException(localIllegalArgumentException);
  118.     } catch (SecurityException localSecurityException) {
  119.       logger.throwing("ModLoader", "AddAchievementDesc", localSecurityException);
  120.       ThrowException(localSecurityException);
  121.     } catch (NoSuchFieldException localNoSuchFieldException) {
  122.       logger.throwing("ModLoader", "AddAchievementDesc", localNoSuchFieldException);
  123.       ThrowException(localNoSuchFieldException);
  124.     }
  125.   }
  126.  
  127.   public static int AddAllFuel(int paramInt1, int paramInt2)
  128.   {
  129.     logger.finest(new StringBuilder().append("Finding fuel for ").append(paramInt1).toString());
  130.     int i = 0;
  131.     for (Iterator localIterator = modList.iterator(); (localIterator.hasNext()) && (i == 0); )
  132.       i = ((BaseMod)localIterator.next()).AddFuel(paramInt1, paramInt2);
  133.     if (i != 0)
  134.       logger.finest(new StringBuilder().append("Returned ").append(i).toString());
  135.     return i;
  136.   }
  137.  
  138.   public static void AddAllRenderers(Map<Class<? extends ms>, ti> paramMap)
  139.   {
  140.     if (!hasInit) {
  141.       init();
  142.       logger.fine("Initialized");
  143.     }
  144.  
  145.     for (BaseMod localBaseMod : modList)
  146.       localBaseMod.AddRenderer(paramMap);
  147.   }
  148.  
  149.   public static void addAnimation(sr paramdt)
  150.   {
  151.     logger.finest(new StringBuilder().append("Adding animation ").append(paramdt.toString()).toString());
  152.     for (sr localdt : animList) {
  153.       if ((localdt.g == paramdt.g) && (localdt.k == paramdt.k)) {
  154.         animList.remove(paramdt);
  155.         break;
  156.       }
  157.     }
  158.     animList.add(paramdt);
  159.   }
  160.  
  161.   public static int AddArmor(String paramString)
  162.   {
  163.     try
  164.     {
  165.       String[] arrayOfString = (String[])(String[])field_armorList.get(null);
  166.       List localList = Arrays.asList(arrayOfString);
  167.       ArrayList localArrayList = new ArrayList();
  168.       localArrayList.addAll(localList);
  169.       if (!localArrayList.contains(paramString))
  170.         localArrayList.add(paramString);
  171.       int i = localArrayList.indexOf(paramString);
  172.       field_armorList.set(null, localArrayList.toArray(new String[0]));
  173.       return i;
  174.     } catch (IllegalArgumentException localIllegalArgumentException) {
  175.       logger.throwing("ModLoader", "AddArmor", localIllegalArgumentException);
  176.       ThrowException("An impossible error has occured!", localIllegalArgumentException);
  177.     } catch (IllegalAccessException localIllegalAccessException) {
  178.       logger.throwing("ModLoader", "AddArmor", localIllegalAccessException);
  179.       ThrowException("An impossible error has occured!", localIllegalAccessException);
  180.     }
  181.     return -1;
  182.   }
  183.  
  184.   public static void AddLocalization(String paramString1, String paramString2)
  185.   {
  186.     localizedStrings.put(key, value);
  187.   }
  188.  
  189.   private static void addMod(ClassLoader paramClassLoader, String paramString)
  190.   {
  191.     try
  192.     {
  193.       String str = paramString.split("\\.")[0];
  194.       if (str.contains("$"))
  195.         return;
  196.       if ((props.containsKey(str)) && ((props.getProperty(str).equalsIgnoreCase("no")) || (props.getProperty(str).equalsIgnoreCase("off"))))
  197.         return;
  198.       Package localPackage = ModLoader.class.getPackage();
  199.       if (localPackage != null)
  200.         str = new StringBuilder().append(localPackage.getName()).append(".").append(str).toString();
  201.       Class localClass = paramClassLoader.loadClass(str);
  202.       if (!BaseMod.class.isAssignableFrom(localClass)) {
  203.         return;
  204.       }
  205.       setupProperties(localClass);
  206.       BaseMod localBaseMod = (BaseMod)localClass.newInstance();
  207.  
  208.       if (localBaseMod != null) {
  209.         modList.add(localBaseMod);
  210.         logger.fine(new StringBuilder().append("Mod Initialized: \"").append(localBaseMod.toString()).append("\" from ").append(paramString).toString());
  211.         System.out.println(new StringBuilder().append("Mod Initialized: ").append(localBaseMod.toString()).toString());
  212.       }
  213.     } catch (Throwable localThrowable) {
  214.       logger.fine(new StringBuilder().append("Failed to load mod from \"").append(paramString).append("\"").toString());
  215.       System.out.println(new StringBuilder().append("Failed to load mod from \"").append(paramString).append("\"").toString());
  216.       logger.throwing("ModLoader", "addMod", localThrowable);
  217.       ThrowException(localThrowable);
  218.     }
  219.   }
  220.  
  221.   public static void AddName(Object paramObject, String paramString)
  222.   {
  223.     String str1 = null;
  224.     Object localObject;
  225.     if ((paramObject instanceof ww)) {
  226.       localObject = (ww)paramObject;
  227.       if (((acy)localObject).e() != null)
  228.         str1 = new StringBuilder().append(((acy)localObject).e()).append(".name").toString();
  229.     } else if ((paramObject instanceof oe)) {
  230.       localObject = (oe)paramObject;
  231.       if (((oe)localObject).p() != null).p() != null)
  232.       str1 = new StringBuilder().append(((oe)localObject).p()).append(".name").toString();
  233.     } else if ((paramObject instanceof yq)) {
  234.       localObject = (yq)paramObject;
  235.       String str2 = ww.e[localObject.c].a((yq)localObject);
  236.       if (str2 != null)
  237.         str1 = new StringBuilder().append(str2).append(".name").toString();
  238.     } else {
  239.       localObject = new Exception(new StringBuilder().append(paramObject.getClass().getName()).append(" cannot have name attached to it!").toString());
  240.       logger.throwing("ModLoader", "AddName", (Throwable)localObject);
  241.       ThrowException((Throwable)localObject);
  242.     }
  243.     if (str1 != null) { AddLocalization(str1, paramString);
  244.     } else {
  245.       localObject = new Exception(new StringBuilder().append(paramObject).append(" is missing name tag!").toString());
  246.       logger.throwing("ModLoader", "AddName", (Throwable)localObject);
  247.       ThrowException((Throwable)localObject);
  248.     }
  249.   }
  250.  
  251.   public static int addOverride(String paramString1, String paramString2)
  252.   {
  253.     try
  254.     {
  255.       int i = getUniqueSpriteIndex(paramString1);
  256.       addOverride(paramString1, paramString2, i);
  257.       return i;
  258.     } catch (Throwable localThrowable) {
  259.       logger.throwing("ModLoader", "addOverride", localThrowable);
  260.       ThrowException(localThrowable);
  261.     }throw new RuntimeException(localThrowable);
  262.   }
  263.  
  264.  public static void addOverride(String paramString1, String paramString2, int paramInt)
  265.   {
  266.     int i = -1;
  267.     int j = 0;
  268.     if (paramString1.equals("/terrain.png")) {
  269.       i = 0;
  270.       j = terrainSpritesLeft;
  271.     } else if (paramString1.equals("/gui/items.png")) {
  272.       i = 1;
  273.       j = itemSpritesLeft; } else {
  274.       return;
  275.     }System.out.println(new StringBuilder().append("Overriding ").append(paramString1).append(" with ").append(paramString2).append(" @ ").append(paramInt).append(". ").append(j).append(" left.").toString());
  276.     logger.finer(new StringBuilder().append("addOverride(").append(paramString1).append(",").append(paramString2).append(",").append(paramInt).append("). ").append(j).append(" left.").toString());
  277.     Object localObject = (Map)overrides.get(Integer.valueOf(i));
  278.     if (localObject == null) {
  279.       localObject = new HashMap();
  280.       overrides.put(Integer.valueOf(i), localObject);
  281.     }
  282.     ((Map)localObject).put(paramString2, Integer.valueOf(paramInt));
  283.   }
  284.  
  285.   public static void AddRecipe(yq paramdk, Object[] paramArrayOfObject)
  286.   {
  287.     fk.a().a(paramdk, paramArrayOfObject);
  288.   }
  289.  
  290.   public static void AddShapelessRecipe(yq paramdk, Object[] paramArrayOfObject)
  291.   {
  292.     fk.a().b(paramdk, paramArrayOfObject);
  293.   }
  294.  
  295.   public static void AddSmelting(int paramInt, yq paramdk)
  296.   {
  297.     ds.a().a(paramInt, paramdk);
  298.   }
  299.  
  300.   public static void AddSpawn(Class<? extends aar> paramClass, int paramInt1, int paramInt2, int paramInt3, aah paramjf)
  301.   {
  302.     AddSpawn(paramClass, paramInt1, paramInt2, paramInt3, paramjf, null);
  303.   }
  304.  
  305.   public static void AddSpawn(Class<? extends aar> paramClass, int paramInt1, int paramInt2, int paramInt3, aah paramjf, zp[] paramArrayOfsr)
  306.   {
  307.     if (paramClass == null) {
  308.       throw new IllegalArgumentException("entityClass cannot be null");
  309.     }
  310.     if (paramjf == null) {
  311.       throw new IllegalArgumentException("spawnList cannot be null");
  312.     }
  313.     if (paramArrayOfsr == null) {
  314.       paramArrayOfsr = standardBiomes;
  315.     }
  316.     for (int i = 0; i < paramArrayOfsr.length; i++)
  317.     {
  318.       List list = biomes[i].a(spawnList);
  319.  
  320. List localList = paramArrayOfsr[i].a(paramjf);
  321.  
  322.       if (localList != null) {
  323.         int j = 0;
  324.         for (bd localyx : localList) {
  325.           if (localyx.a == paramClass) {
  326.             localyx.d = paramInt1;
  327.             localyx.b = paramInt2;
  328.             localyx.c = paramInt3;
  329.             j = 1;
  330.             break;
  331.           }
  332.         }
  333.         if (j == 0)
  334.           localList.add(new bd(paramClass, paramInt1, paramInt2, paramInt3));
  335.       }
  336.     }
  337.   }
  338.  
  339.   public static void AddSpawn(String paramString, int paramInt1, int paramInt2, int paramInt3, aah paramjf)
  340.   {
  341.     AddSpawn(paramString, paramInt1, paramInt2, paramInt3, paramjf, null);
  342.   }
  343.  
  344.   public static void AddSpawn(String paramString, int paramInt1, int paramInt2, int paramInt3, aah paramjf, zp[] paramArrayOfsr)
  345.   {
  346.     Class localClass = (Class)classMap.get(paramString);
  347.     if ((localClass != null) && (aar.class.isAssignableFrom(localClass)))
  348.       AddSpawn(localClass, paramInt1, paramInt2, paramInt3, paramjf, paramArrayOfsr);
  349.   }
  350.  
  351.   public static boolean DispenseEntity(vq world, paramry, double paramDouble1, double paramDouble2, double paramDouble3, int paramInt1, int paramInt2, yq paramdk)
  352.   {
  353.     boolean bool = false;
  354.     for (Iterator localIterator = modList.iterator(); (localIterator.hasNext()) && (!bool); )
  355.       bool = ((BaseMod)localIterator.next()).DispenseEntity(paramry, paramDouble1, paramDouble2, paramDouble3, paramInt1, paramInt2, paramdk);
  356.     return bool;
  357.   }
  358.  
  359.   public static List<BaseMod> getLoadedMods()
  360.   {
  361.     return Collections.unmodifiableList(modList);
  362.   }
  363.  
  364.   public static Logger getLogger()
  365.   {
  366.     return logger;
  367.   }
  368.  
  369.   public static Minecraft getMinecraftInstance()
  370.   {
  371.     if (instance == null) {
  372.       try {
  373.         ThreadGroup localThreadGroup = Thread.currentThread().getThreadGroup();
  374.         int i = localThreadGroup.activeCount();
  375.         Thread[] arrayOfThread = new Thread[i];
  376.         localThreadGroup.enumerate(arrayOfThread);
  377.         for (int j = 0; j < arrayOfThread.length; j++) {
  378.           System.out.println(arrayOfThread[j].getName());
  379.         }
  380.         for (j = 0; j < arrayOfThread.length; j++)
  381.           if (arrayOfThread[j].getName().equals("Minecraft main thread")) {
  382.             instance = (Minecraft)getPrivateValue(Thread.class, arrayOfThread[j], "target");
  383.             break;
  384.           }
  385.       }
  386.       catch (SecurityException localSecurityException) {
  387.         logger.throwing("ModLoader", "getMinecraftInstance", localSecurityException);
  388.         throw new RuntimeException(localSecurityException);
  389.       } catch (NoSuchFieldException localNoSuchFieldException) {
  390.         logger.throwing("ModLoader", "getMinecraftInstance", localNoSuchFieldException);
  391.         throw new RuntimeException(localNoSuchFieldException);
  392.       }
  393.     }
  394.     return instance;
  395.   }
  396.  
  397.   public static <T, E> T getPrivateValue(Class<? super E> paramClass, E paramE, int paramInt)
  398.     throws IllegalArgumentException, SecurityException, NoSuchFieldException
  399.   {
  400.     try
  401.     {
  402.       Field localField = paramClass.getDeclaredFields()[paramInt];
  403.       localField.setAccessible(true);
  404.       return localField.get(paramE);
  405.     } catch (IllegalAccessException localIllegalAccessException) {
  406.       logger.throwing("ModLoader", "getPrivateValue", localIllegalAccessException);
  407.       ThrowException("An impossible error has occured!", localIllegalAccessException);
  408.     }
  409.     return null;
  410.   }
  411.  
  412.   public static <T, E> T getPrivateValue(Class<? super E> paramClass, E paramE, String paramString)
  413.     throws IllegalArgumentException, SecurityException, NoSuchFieldException
  414.   {
  415.     try
  416.     {
  417.       Field localField = paramClass.getDeclaredField(paramString);
  418.       localField.setAccessible(true);
  419.       return localField.get(paramE);
  420.     } catch (IllegalAccessException localIllegalAccessException) {
  421.       logger.throwing("ModLoader", "getPrivateValue", localIllegalAccessException);
  422.       ThrowException("An impossible error has occured!", localIllegalAccessException);
  423.     }
  424.     return null;
  425.   }
  426.  
  427.   public static int getUniqueBlockModelID(BaseMod paramBaseMod, boolean paramBoolean)
  428.   {
  429.     int i = nextBlockModelID++;
  430.     blockModels.put(Integer.valueOf(i), paramBaseMod);
  431.     blockSpecialInv.put(Integer.valueOf(i), Boolean.valueOf(paramBoolean));
  432.     return i;
  433.   }
  434.  
  435.   public static int getUniqueEntityId()
  436.   {
  437.     return highestEntityId++;
  438.   }
  439.  
  440.   private static int getUniqueItemSpriteIndex()
  441.   {
  442.     for (; itemSpriteIndex < usedItemSprites.length; itemSpriteIndex += 1)
  443.       if (usedItemSprites[itemSpriteIndex] == 0) {
  444.         usedItemSprites[itemSpriteIndex] = true;
  445.         itemSpritesLeft -= 1;
  446.         return itemSpriteIndex++;
  447.       }
  448.     Exception localException = new Exception("No more empty item sprite indices left!");
  449.     logger.throwing("ModLoader", "getUniqueItemSpriteIndex", localException);
  450.     ThrowException(localException);
  451.     return 0;
  452.   }
  453.  
  454.   public static int getUniqueSpriteIndex(String paramString)
  455.   {
  456.     if (paramString.equals("/gui/items.png")) return getUniqueItemSpriteIndex();
  457.     if (paramString.equals("/terrain.png"))
  458.       return getUniqueTerrainSpriteIndex();
  459.     Exception localException = new Exception(new StringBuilder().append("No registry for this texture: ").append(paramString).toString());
  460.     logger.throwing("ModLoader", "getUniqueItemSpriteIndex", localException);
  461.     ThrowException(localException);
  462.     return 0;
  463.   }
  464.  
  465.   private static int getUniqueTerrainSpriteIndex()
  466.   {
  467.     for (; terrainSpriteIndex < usedTerrainSprites.length; terrainSpriteIndex += 1)
  468.       if (usedTerrainSprites[terrainSpriteIndex] == 0) {
  469.         usedTerrainSprites[terrainSpriteIndex] = true;
  470.         terrainSpritesLeft -= 1;
  471.         return terrainSpriteIndex++;
  472.       }
  473.     Exception localException = new Exception("No more empty terrain sprite indices left!");
  474.     logger.throwing("ModLoader", "getUniqueItemSpriteIndex", localException);
  475.     ThrowException(localException);
  476.     return 0;
  477.   }
  478.  
  479.   private static void init()
  480.   {
  481.     hasInit = true;
  482.  
  483.     String str1 = "1111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111110111111111111111000111111111111101111111110000000100111111000000010000111100000000000000110000000000000000000000000000000000000000000000001111111111111111";
  484.  
  485.     String str2 = "1111111111111111111111111111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110111111111111100000001111111111000000001111000000000111111000000000001111111000000001111111111111111111";
  486.  
  487.     for (int i = 0; i < 256; i++) {
  488.       usedItemSprites[i] = (str1.charAt(i) == '1' ? 1 : false);
  489.       if (usedItemSprites[i] == 0)
  490.         itemSpritesLeft += 1;
  491.       usedTerrainSprites[i] = (str2.charAt(i) == '1' ? 1 : false);
  492.       if (usedTerrainSprites[i] == 0) {
  493.         terrainSpritesLeft += 1;
  494.       }
  495.  
  496.     }
  497.     Object localObject1;
  498.     try
  499.     {
  500.       instance = (Minecraft)getPrivateValue(Minecraft.class, null, 1);
  501.  
  502.       instance.u = new EntityRendererProxy(instance);
  503.       classMap = (Map)getPrivateValue(yr.class, null, 0);
  504.       field_modifiers = Field.class.getDeclaredField("modifiers");
  505.       field_modifiers.setAccessible(true);
  506.       field_TileEntityRenderers = aai.class.getDeclaredFields()[0];
  507.       field_TileEntityRenderers.setAccessible(true);
  508.       field_armorList = us.class.getDeclaredFields()[3];
  509.       field_modifiers.setInt(field_armorList, field_armorList.getModifiers() & 0xFFFFFFEF);
  510.       field_armorList.setAccessible(true);
  511.       field_animList = yz.class.getDeclaredFields()[6];
  512.       field_animList.setAccessible(true);
  513.  
  514.       Field[] arrayOfField = zp.class.getDeclaredFields();
  515.  
  516.       localObject1 = new LinkedList();
  517.       for (int j = 0; j < arrayOfField.length; j++) {
  518.         Class localClass = arrayOfField[j].getType();
  519.  
  520.         if (((arrayOfField[j].getModifiers() & 0x8) != 0) && (localClass.isAssignableFrom(zp.class))) {
  521.           zp localsr = (zp)arrayOfField[j].get(null);
  522.           if (((localsr instanceof sd)) || ((localsr instanceof fr)))
  523.             continue;
  524.           ((List)localObject1).add(localsr);
  525.         }
  526.       }
  527.  
  528.       standardBiomes = (zp[])(zp[])((List)localObject1).toArray(new zp[0]);
  529.       try
  530.       {
  531.         method_RegisterTileEntity = kf.class.getDeclaredMethod("a", new Class[] { Class.class, String.class });
  532.       } catch (NoSuchMethodException localNoSuchMethodException2) {
  533.         method_RegisterTileEntity = kf.class.getDeclaredMethod("addMapping", new Class[] { Class.class, String.class });
  534.       }
  535.       method_RegisterTileEntity.setAccessible(true);
  536.       try
  537.       {
  538.         method_RegisterEntityID = yr.class.getDeclaredMethod("a", new Class[] { Class.class, String.class, Integer.TYPE });
  539.       } catch (NoSuchMethodException localNoSuchMethodException3) {
  540.         method_RegisterEntityID = yr.class.getDeclaredMethod("addMapping", new Class[] { Class.class, String.class, Integer.TYPE });
  541.       }
  542.       method_RegisterEntityID.setAccessible(true);
  543.     }
  544.     catch (SecurityException localSecurityException) {
  545.       logger.throwing("ModLoader", "init", localSecurityException);
  546.       ThrowException(localSecurityException);
  547.       throw new RuntimeException(localSecurityException);
  548.     } catch (NoSuchFieldException localNoSuchFieldException) {
  549.       logger.throwing("ModLoader", "init", localNoSuchFieldException);
  550.       ThrowException(localNoSuchFieldException);
  551.       throw new RuntimeException(localNoSuchFieldException);
  552.     } catch (NoSuchMethodException localNoSuchMethodException1) {
  553.       logger.throwing("ModLoader", "init", localNoSuchMethodException1);
  554.       ThrowException(localNoSuchMethodException1);
  555.       throw new RuntimeException(localNoSuchMethodException1);
  556.     } catch (IllegalArgumentException localIllegalArgumentException) {
  557.       logger.throwing("ModLoader", "init", localIllegalArgumentException);
  558.       ThrowException(localIllegalArgumentException);
  559.       throw new RuntimeException(localIllegalArgumentException);
  560.     } catch (IllegalAccessException localIllegalAccessException) {
  561.       logger.throwing("ModLoader", "init", localIllegalAccessException);
  562.       ThrowException(localIllegalAccessException);
  563.       throw new RuntimeException(localIllegalAccessException);
  564.     }
  565.  
  566.     try
  567.     {
  568.       loadConfig();
  569.       if (props.containsKey("loggingLevel"))
  570.         cfgLoggingLevel = Level.parse(props.getProperty("loggingLevel"));
  571.       if (props.containsKey("grassFix")) {
  572.         uc.cfgGrassFix = Boolean.parseBoolean(props.getProperty("grassFix"));
  573.       }
  574.       logger.setLevel(cfgLoggingLevel);
  575.       if (((logfile.exists()) || (logfile.createNewFile())) && (logfile.canWrite()) && (logHandler == null)) {
  576.         logHandler = new FileHandler(logfile.getPath());
  577.         logHandler.setFormatter(new SimpleFormatter());
  578.         logger.addHandler(logHandler);
  579.       }
  580.       logger.fine("ModLoader 1.1 Initializing...");
  581.  
  582.       System.out.println("ModLoader 1.1 Initializing...");
  583.       File source = new File(ModLoader.class.getProtectionDomain().getCodeSource().getLocation().toURI());
  584.       modDir.mkdirs();
  585.       URLClassLoader localURLClassLoader = (URLClassLoader)ModLoader.class.getClassLoader();
  586.       localObject1 = localURLClassLoader.getURLs();
  587.       for (Object localObject3 : localObject1) {
  588.         File localFile = new File(localObject3.toURI());
  589.         String str3 = localFile.getName();
  590.         if ((str3.startsWith("lwjgl")) || (str3.equals("jinput.jar")))
  591.           continue;
  592.         readFromClassPath(localFile);
  593.       }
  594.       readFromModFolder(modDir);
  595.       sortModList();
  596.  
  597.       for (??? = modList.iterator(); ((Iterator)???).hasNext(); ) { localBaseMod = (BaseMod)((Iterator)???).next();
  598.         localBaseMod.load();
  599.         logger.fine(new StringBuilder().append("Mod Loaded: \"").append(localBaseMod.toString()).append("\"").toString());
  600.         System.out.println(new StringBuilder().append("Mod Loaded: ").append(localBaseMod.toString()).toString());
  601.         if (!props.containsKey(localBaseMod.getClass().getSimpleName()))
  602.           props.setProperty(localBaseMod.getClass().getSimpleName(), "on");
  603.       }
  604.       BaseMod localBaseMod;
  605.       for (??? = modList.iterator(); ((Iterator)???).hasNext(); ) { localBaseMod = (BaseMod)((Iterator)???).next();
  606.         localBaseMod.ModsLoaded();
  607.       }
  608.  
  609.       System.out.println("Done.");
  610.  
  611.       props.setProperty("loggingLevel", cfgLoggingLevel.getName());
  612.       props.setProperty("grassFix", Boolean.toString(uc.cfgGrassFix));
  613.  
  614.       instance.A.A = RegisterAllKeys(instance.A.A);
  615.       instance.A.a();
  616.  
  617.       initStats();
  618.  
  619.       saveConfig();
  620.     } catch (Throwable localThrowable) {
  621.       logger.throwing("ModLoader", "init", localThrowable);
  622.       ThrowException("ModLoader has failed to initialize.", localThrowable);
  623.       if (logHandler != null)
  624.         logHandler.close();
  625.       throw new RuntimeException(localThrowable);
  626.     }
  627.   }
  628.  
  629.   private static void sortModList() throws Exception {
  630.     HashMap localHashMap = new HashMap();
  631.     for (Object localObject = getLoadedMods().iterator(); ((Iterator)localObject).hasNext(); ) { BaseMod localBaseMod1 = (BaseMod)((Iterator)localObject).next();
  632.       localHashMap.put(localBaseMod1.getClass().getSimpleName(), localBaseMod1);
  633.     }
  634.     localObject = new LinkedList();
  635.     int i = 0;
  636.     while ((((LinkedList)localObject).size() != modList.size()) &&
  637.       (i <= 10))
  638.     {
  639.       for (BaseMod localBaseMod2 : modList) {
  640.         if (((LinkedList)localObject).contains(localBaseMod2))
  641.           continue;
  642.         String str1 = localBaseMod2.getPriorities();
  643.  
  644.         if ((str1 == null) || (str1.length() == 0) || (str1.indexOf(58) == -1)) {
  645.           ((LinkedList)localObject).add(localBaseMod2);
  646.         }
  647.         else
  648.         {
  649.           if (i <= 0)
  650.             continue;
  651.           int j = -1;
  652.           int k = -2147483648;
  653.           int m = 2147483647;
  654.           String[] arrayOfString1;
  655.           if (str1.indexOf(59) > 0)
  656.             arrayOfString1 = str1.split(";");
  657.           else {
  658.             arrayOfString1 = new String[] { str1 };
  659.           }
  660.  
  661.           int n = 0;
  662.           while (true) { String str2 = arrayOfString1[n];
  663.             if (str2.indexOf(58) != -1)
  664.             {
  665.               String[] arrayOfString2 = str2.split(":");
  666.               String str3 = arrayOfString2[0];
  667.               String str4 = arrayOfString2[1];
  668.  
  669.               if ((str3.contentEquals("required-before")) || (str3.contentEquals("before")) || (str3.contentEquals("after")) || (str3.contentEquals("required-after")))
  670.               {
  671.                 if (str4.contentEquals("*")) {
  672.                   if ((str3.contentEquals("required-before")) || (str3.contentEquals("before"))) {
  673.                     j = 0; break label556;
  674.                   }if ((!str3.contentEquals("required-after")) && (!str3.contentEquals("after"))) break label556; j = newList.size();
  675.  
  676.                   break label556;
  677.                 }
  678.  
  679.                 if (((key.contentEquals("required-before")) || (key.contentEquals("required-after"))) && (!localHashMap.containsKey(str4))) {
  680.                   throw new Exception(String.format("%s is missing dependency: %s", new Object[] { mod, value }));
  681.                 }
  682.                 BaseMod localBaseMod3 = (BaseMod)localHashMap.get(str4);
  683.                 if (!((LinkedList)localObject).contains(localBaseMod3)) {
  684.                   break;
  685.                 }
  686.                 int i1 = ((LinkedList)localObject).indexOf(localBaseMod3);
  687.  
  688.                 if ((str3.contentEquals("required-before")) || (str3.contentEquals("before"))) {
  689.                   j = i1;
  690.                   if (j < m) m = j;
  691.                   else
  692.                     j = m;
  693.                 }
  694.                 else if ((str3.contentEquals("required-after")) || (str3.contentEquals("after"))) {
  695.                   j = i1 + 1;
  696.                   if (j > k) k = j;
  697.                   else
  698.                     j = k;
  699.                 }
  700.               }
  701.             }
  702.             n++; if (n < arrayOfString1.length)
  703.             {
  704.               continue;
  705.             }
  706.  
  707.             if (j == -1) break;
  708.             ((LinkedList)localObject).add(j, localBaseMod2); }
  709.         }
  710.       }
  711.       i++;
  712.     }
  713.     label556: modList.clear();
  714.     modList.addAll((Collection)localObject);
  715.   }
  716.  
  717.   private static void initStats() {
  718.     for (int i = 0; i < oe.m.length; i++) {
  719.       if ((!gl.a.containsKey(Integer.valueOf(16777216 + id))) && (oe.m[i] != null) && (oe.m[i].q())) {
  720.         String str = abn.a().a("stat.mineBlock", new Object[] { oe.m[i].o() });
  721.         gl.C[i] = new agd(16777216 + i, (String)localObject1, i).a();
  722.         gl.e.add(gl.C[i]);
  723.       }
  724.     }
  725.  
  726.     for (i = 0; i < ww.e.length; i++) {
  727.       if ((!gl.a.containsKey(Integer.valueOf(16908288 + i))) && (ww.e[i] != null)) {
  728.         localObject1 = abn.a().a("stat.useItem", new Object[] { Boolean.valueOf(ww.e[i].k()) });
  729.         gl.E[i] = new agd(16908288 + i, (String)localObject1, i).a();
  730.  
  731.         if (i >= oe.m.length) {
  732.           gl.d.add(gl.E[i]);
  733.         }
  734.       }
  735.  
  736.       if ((!gl.a.containsKey(Integer.valueOf(16973824 + i))) && (ww.e[i] != null) && (ww.e[i].i())) {
  737.         localObject1 = abn.a().a("stat.breakItem", new Object[] { Boolean.valueOf(ww.e[i].k()) });
  738.         gl.F[i] = new agd(16973824 + i, (String)localObject1, i).a();
  739.       }
  740.     }
  741.  
  742.     HashSet localHashSet = new HashSet();
  743.  
  744.     for (Object localObject1 = fk.a().b().iterator(); ((Iterator)localObject1).hasNext(); ) { localObject2 = ((Iterator)localObject1).next();
  745.       localHashSet.add(Integer.valueOf(((ut)localObject2).b().c));
  746.     }
  747.  Object localObject2;
  748.     for (localObject1 = ds.a().b().values().iterator(); ((Iterator)localObject1).hasNext(); ) { localObject2 = ((Iterator)localObject1).next();
  749.       localHashSet.add(Integer.valueOf((((yq)localObject2).c));
  750.     }
  751.     for (localObject1 = localHashSet.iterator(); ((Iterator)localObject1).hasNext(); ) { int j = ((Integer)((Iterator)localObject1).next()).intValue();
  752.       if ((!gl.a.containsKey(Integer.valueOf(16842752 + j))) && (ww.e[j] != null)) {
  753.         String str = abn.a().a("stat.craftItem", new Object[] { Boolean.valueOf(ww.e[j].k()) });
  754.         gl.D[j] = new agd(16842752 + j, str, j).a();
  755.       }
  756.     }
  757.   }
  758.  
  759.   public static boolean isGUIOpen(Class<? extends ug> paramClass)
  760.   {
  761.     Minecraft localMinecraft = getMinecraftInstance();
  762.     if (paramClass == null) {
  763.       return localMinecraft.s == null;
  764.     }
  765.     if ((localMinecraft.s == null) && (paramClass != null)) {
  766.       return false;
  767.     }
  768.     return gui.isInstance(game.s);
  769.   }
  770.  
  771.   public static boolean isModLoaded(String paramString)
  772.   {
  773.     Class localClass = null;
  774.     try {
  775.       localClass = Class.forName(paramString);
  776.     } catch (ClassNotFoundException localClassNotFoundException) {
  777.       return false;
  778.     }
  779.     if (localClass != null) {
  780.       for (BaseMod localBaseMod : modList) {
  781.         if (localClass.isInstance(localBaseMod))
  782.           return true;
  783.       }
  784.     }
  785.     return false;
  786.   }
  787.  
  788.   public static void loadConfig()
  789.     throws IOException
  790.   {
  791.     cfgdir.mkdir();
  792.  
  793.     if ((!cfgfile.exists()) && (!cfgfile.createNewFile())) {
  794.       return;
  795.     }
  796.     if (cfgfile.canRead()) {
  797.       FileInputStream localFileInputStream = new FileInputStream(cfgfile);
  798.       props.load(localFileInputStream);
  799.       localFileInputStream.close();
  800.     }
  801.   }
  802.  
  803.   public static BufferedImage loadImage(yz paramzh, String paramString)
  804.     throws Exception
  805.   {
  806.     fy localadk = (fy)getPrivateValue(yz.class, paramzh, 11);
  807.     InputStream localInputStream = localadk.a.a(paramString);
  808.     if (localInputStream == null)
  809.       throw new Exception(new StringBuilder().append("Image not found: ").append(paramString).toString());
  810.     BufferedImage localBufferedImage = ImageIO.read(localInputStream);
  811.     if (localBufferedImage == null)
  812.       throw new Exception(new StringBuilder().append("Image corrupted: ").append(paramString).toString());
  813.     return localBufferedImage;
  814.   }
  815.  
  816.   public static void OnItemPickup(xb paramvi, yq paramdk)
  817.   {
  818.     for (BaseMod localBaseMod : modList)
  819.       localBaseMod.OnItemPickup(paramvi, paramdk);
  820.   }
  821.  
  822.   public static void OnTick(float paramFloat, Minecraft paramMinecraft)
  823.   {
  824.     ld.b();
  825.     ld.b();
  826.     ld.a("modtick");
  827.     if (!hasInit) {
  828.       init();
  829.       logger.fine("Initialized");
  830.     }
  831.  
  832.     if ((texPack == null) || (paramMinecraft.A.m != texPack)) {
  833.       texturesAdded = false;
  834.       texPack = paramMinecraft.A.m;
  835.     }
  836.  
  837.     if ((langPack == null) || (abn.a().c() != langPack)) {
  838.       Properties localized = null;
  839.       try {
  840.         localized = (Properties)getPrivateValue(abn.class, abn.a(), 1);
  841.       } catch (SecurityException e) {
  842.         logger.throwing("ModLoader", "AddLocalization", e);
  843.         ThrowException(e);
  844.       } catch (NoSuchFieldException e) {
  845.         logger.throwing("ModLoader", "AddLocalization", e);
  846.         ThrowException(e);
  847.       }
  848.       if (localized != null)
  849.         localized.putAll(localizedStrings);
  850.       langPack = abn.a().c();
  851.     }
  852.  
  853.     if ((!texturesAdded) && (paramMinecraft.p != null))
  854.     {
  855.       RegisterAllTextureOverrides(paramMinecraft.p);
  856.  
  857.       texturesAdded = true;
  858.     }
  859.  
  860.     long l = 0L;
  861.     Object localObject1;
  862.     if (paramMinecraft.f != null)
  863.     {
  864.       l = paramMinecraft.f.u();
  865.       for (localObject1 = inGameHooks.entrySet().iterator(); ((Iterator)localObject1).hasNext(); ) {
  866.         localObject2 = (Map.Entry)((Iterator)localObject1).next();
  867.         if ((clock == l) && (((Boolean)((Map.Entry)localObject2).getValue()).booleanValue()))
  868.           continue;
  869.         if (!((BaseMod)((Map.Entry)localObject2).getKey()).OnTickInGame(paramFloat, paramMinecraft))
  870.           ((Iterator)localObject1).remove();
  871.       }
  872.     }
  873.     Object localObject2;
  874.     if (paramMinecraft.r != null) {
  875.       for (localObject2 = inGUIHooks.entrySet().iterator(); ((Iterator)localObject2).hasNext(); ) {
  876.         localObject1 = (Map.Entry)((Iterator)localObject2).next();
  877.         if (clock == l) if ((((Boolean)((Map.Entry)localObject1).getValue()).booleanValue() & paramMinecraft.f != null))
  878.             continue;
  879.         if (!((BaseMod)((Map.Entry)localObject1).getKey()).OnTickInGUI(paramFloat, paramMinecraft, paramMinecraft.s)) {
  880.           ((Iterator)localObject2).remove();
  881.         }
  882.       }
  883.     }
  884.     if (clock != l)
  885.       for (localObject2 = keyList.entrySet().iterator(); ((Iterator)localObject2).hasNext(); ) { localEntry1 = (Map.Entry)((Iterator)localObject2).next();
  886.         for (localIterator = ((Map)localEntry1.getValue()).entrySet().iterator(); localIterator.hasNext(); ) { Object localObject3 = localIterator.next();
  887.           Map.Entry localEntry2 = (Map.Entry)localObject3;
  888.           int i = ((ads)localEntry2.getKey()).d;
  889.           boolean bool;
  890.           if (i < 0) {
  891.             i += 100;
  892.             bool = Mouse.isButtonDown(i);
  893.           } else {
  894.             bool = Keyboard.isKeyDown(i);
  895.           }
  896.           boolean[] arrayOfBoolean = (boolean[])(boolean[])localEntry2.getValue();
  897.           int j = arrayOfBoolean[1];
  898.           arrayOfBoolean[1] = bool;
  899.           if ((!bool) || ((j != 0) && (arrayOfBoolean[0] == 0))) {
  900.             continue;
  901.           }
  902.           ((BaseMod)localEntry1.getKey()).KeyboardEvent((ads)localEntry2.getKey());
  903.         }
  904.       }
  905.     Map.Entry localEntry1;
  906.     Iterator localIterator;
  907.     clock = l;
  908.     ld.b();
  909.     ld.a("render");
  910.     ld.a("gameRenderer");
  911.   }
  912.  
  913.   public static void OpenGUI(xb paramvi, ug paramxe)
  914.   {
  915.     if (!hasInit) {
  916.       init();
  917.       logger.fine("Initialized");
  918.     }
  919.     Minecraft localMinecraft = getMinecraftInstance();
  920.     if (localMinecraft.i != paramvi)
  921.       return;
  922.     if (paramxe != null)
  923.       localMinecraft.a(paramxe);
  924.   }
  925.  
  926.   public static void PopulateChunk(bs paramej, int paramInt1, int paramInt2, vq paramry)
  927.   {
  928.     if (!hasInit) {
  929.       init();
  930.       logger.fine("Initialized");
  931.     }
  932.  
  933.     Random localRandom = new Random(paramry.t());
  934.     long l1 = localRandom.nextLong() / 2L * 2L + 1L;
  935.     long l2 = localRandom.nextLong() / 2L * 2L + 1L;
  936.     localRandom.setSeed(paramInt1 * l1 + paramInt2 * l2 ^ paramry.t());
  937.  
  938.     for (BaseMod localBaseMod : modList)
  939.     {
  940.       if (paramej.c().equals("RandomLevelSource")) localBaseMod.GenerateSurface(paramry, localRandom, paramInt1 << 4, paramInt2 << 4);
  941.       else if (paramej.c().equals("HellRandomLevelSource"))
  942.         localBaseMod.GenerateNether(paramry, localRandom, paramInt1 << 4, paramInt2 << 4);
  943.     }
  944.   }
  945.  
  946.   private static void readFromClassPath(File paramFile)
  947.     throws FileNotFoundException, IOException
  948.   {
  949.     logger.finer(new StringBuilder().append("Adding mods from ").append(paramFile.getCanonicalPath()).toString());
  950.     ClassLoader localClassLoader = ModLoader.class.getClassLoader();
  951.     Object localObject1;
  952.     Object localObject2;
  953.     String str;
  954.     if ((paramFile.isFile()) && ((paramFile.getName().endsWith(".jar")) || (paramFile.getName().endsWith(".zip")))) {
  955.       logger.finer("Zip found.");
  956.       localObject1 = new FileInputStream(paramFile);
  957.       localObject2 = new ZipInputStream((InputStream)localObject1);
  958.       ZipEntry localZipEntry = null;
  959.       while (true) {
  960.         localZipEntry = ((ZipInputStream)localObject2).getNextEntry();
  961.         if (localZipEntry == null) {
  962.           break;
  963.         }
  964.         str = localZipEntry.getName();
  965.         if ((!localZipEntry.isDirectory()) && (str.startsWith("mod_")) && (str.endsWith(".class")))
  966.           addMod(localClassLoader, str);
  967.       }
  968.       ((InputStream)localObject1).close();
  969.     } else if (paramFile.isDirectory()) {
  970.       localObject1 = ModLoader.class.getPackage();
  971.       if (localObject1 != null) {
  972.         localObject2 = ((Package)localObject1).getName().replace('.', File.separatorChar);
  973.         paramFile = new File(paramFile, (String)localObject2);
  974.       }
  975.       logger.finer("Directory found.");
  976.       localObject2 = paramFile.listFiles();
  977.       if (localObject2 != null)
  978.         for (int i = 0; i < localObject2.length; i++) {
  979.           str = localObject2[i].getName();
  980.           if ((localObject2[i].isFile()) && (str.startsWith("mod_")) && (str.endsWith(".class")))
  981.             addMod(localClassLoader, str);
  982.         }
  983.     }
  984.   }
  985.  
  986.   private static void readFromModFolder(File paramFile)
  987.     throws IOException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException
  988.   {
  989.     ClassLoader localClassLoader = Minecraft.class.getClassLoader();
  990.     Method localMethod = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });
  991.     localMethod.setAccessible(true);
  992.  
  993.     if (!paramFile.isDirectory()) {
  994.       throw new IllegalArgumentException("folder must be a Directory.");
  995.     }
  996.     File[] arrayOfFile = paramFile.listFiles();
  997.     Arrays.sort(arrayOfFile);
  998.     File localFile;
  999.     if ((localClassLoader instanceof URLClassLoader)) {
  1000.       for (i = 0; i < arrayOfFile.length; i++) {
  1001.         localFile = arrayOfFile[i];
  1002.  
  1003.         if ((!localFile.isDirectory()) && ((!localFile.isFile()) || ((!localFile.getName().endsWith(".jar")) && (!localFile.getName().endsWith(".zip"))))) {
  1004.           continue;
  1005.         }
  1006.         localMethod.invoke(localClassLoader, new Object[] { localFile.toURI().toURL() });
  1007.       }
  1008.     }
  1009.  
  1010.     for (int i = 0; i < arrayOfFile.length; i++) {
  1011.       localFile = arrayOfFile[i];
  1012.  
  1013.       if ((!localFile.isDirectory()) && ((!localFile.isFile()) || ((!localFile.getName().endsWith(".jar")) && (!localFile.getName().endsWith(".zip"))))) {
  1014.         continue;
  1015.       }
  1016.       logger.finer(new StringBuilder().append("Adding mods from ").append(localFile.getCanonicalPath()).toString());
  1017.       Object localObject1;
  1018.       Object localObject2;
  1019.       String str;
  1020.       if (localFile.isFile()) {
  1021.         logger.finer("Zip found.");
  1022.         localObject1 = new FileInputStream(localFile);
  1023.         localObject2 = new ZipInputStream((InputStream)localObject1);
  1024.         ZipEntry localZipEntry = null;
  1025.         while (true) {
  1026.           localZipEntry = ((ZipInputStream)localObject2).getNextEntry();
  1027.           if (localZipEntry == null) {
  1028.             break;
  1029.           }
  1030.           str = localZipEntry.getName();
  1031.           if ((!localZipEntry.isDirectory()) && (str.startsWith("mod_")) && (str.endsWith(".class")))
  1032.             addMod(localClassLoader, str);
  1033.         }
  1034.         ((ZipInputStream)localObject2).close();
  1035.         ((InputStream)localObject1).close();
  1036.       } else if (localFile.isDirectory()) {
  1037.         localObject1 = ModLoader.class.getPackage();
  1038.         if (localObject1 != null) {
  1039.           localObject2 = ((Package)localObject1).getName().replace('.', File.separatorChar);
  1040.           localFile = new File(localFile, (String)localObject2);
  1041.         }
  1042.         logger.finer("Directory found.");
  1043.         localObject2 = localFile.listFiles();
  1044.         if (localObject2 != null)
  1045.           for (int j = 0; j < localObject2.length; j++) {
  1046.             str = localObject2[j].getName();
  1047.             if ((localObject2[j].isFile()) && (str.startsWith("mod_")) && (str.endsWith(".class")))
  1048.               addMod(localClassLoader, str);
  1049.           }
  1050.       }
  1051.     }
  1052.   }
  1053.  
  1054.   public static ads[] RegisterAllKeys(ads[] paramArrayOfads)
  1055.   {
  1056.     LinkedList localLinkedList = new LinkedList();
  1057.     localLinkedList.addAll(Arrays.asList(paramArrayOfaby));
  1058.     for (Map localMap : keyList.values())
  1059.       localLinkedList.addAll(localMap.keySet());
  1060.     return (ads[])(ads[])localLinkedList.toArray(new ads[0]);
  1061.   }
  1062.  
  1063.   public static void RegisterAllTextureOverrides(yz paramzh)
  1064.   {
  1065.     animList.clear();
  1066.  
  1067.     Minecraft localMinecraft = getMinecraftInstance();
  1068.     for (Iterator localIterator1 = modList.iterator(); localIterator1.hasNext(); ) { localObject1 = (BaseMod)localIterator1.next();
  1069.       ((BaseMod)localObject1).RegisterAnimation(localMinecraft);
  1070.     }
  1071.     Object localObject1;
  1072.     for (localIterator1 = animList.iterator(); localIterator1.hasNext(); ) { localObject1 = (sr)localIterator1.next();
  1073.  
  1074.       paramzh.a((sr)localObject1);
  1075.     }
  1076.  
  1077.     for (localIterator1 = overrides.entrySet().iterator(); localIterator1.hasNext(); ) { localObject1 = (Map.Entry)localIterator1.next();
  1078.       for (localIterator2 = ((Map)((Map.Entry)localObject1).getValue()).entrySet().iterator(); localIterator2.hasNext(); ) { Object localObject2 = localIterator2.next();
  1079.         Map.Entry localEntry = (Map.Entry)localObject2;
  1080.         String str = (String)localEntry.getKey();
  1081.         int i = ((Integer)localEntry.getValue()).intValue();
  1082.         int j = ((Integer)((Map.Entry)localObject1).getKey()).intValue();
  1083.         try {
  1084.           BufferedImage localBufferedImage = loadImage(paramzh, str);
  1085.           ModTextureStatic localModTextureStatic = new ModTextureStatic(i, j, localBufferedImage);
  1086.  
  1087.           paramzh.a(localModTextureStatic);
  1088.         } catch (Exception localException) {
  1089.           logger.throwing("ModLoader", "RegisterAllTextureOverrides", localException);
  1090.           ThrowException(localException);
  1091.           throw new RuntimeException(localException);
  1092.         } } }
  1093.     Iterator localIterator2;
  1094.   }
  1095.  
  1096.   public static void RegisterBlock(oe paramoe)
  1097.   {
  1098.     RegisterBlock(paramoe, null);
  1099.   }
  1100.  
  1101.   public static void RegisterBlock(oe paramoe, Class<? extends tw> paramClass)
  1102.   {
  1103.     try
  1104.     {
  1105.       if (paramoe == null) {
  1106.         throw new IllegalArgumentException("block parameter cannot be null.");
  1107.       }
  1108.       int i = paramoe.bO;
  1109.       tw localtw = null;
  1110.       if (paramClass != null) localtw = (tw)paramClass.getConstructor(new Class[] { Integer.TYPE }).newInstance(new Object[] { Integer.valueOf(i - 256) }); else {
  1111.         localtw = new tw(i - 256);
  1112.       }
  1113.       if ((oe.m[i] != null) && (ww.e[i] == null))
  1114.         ww.e[i] = localtw;
  1115.     } catch (IllegalArgumentException localIllegalArgumentException) {
  1116.       logger.throwing("ModLoader", "RegisterBlock", localIllegalArgumentException);
  1117.       ThrowException(localIllegalArgumentException);
  1118.     } catch (IllegalAccessException localIllegalAccessException) {
  1119.       logger.throwing("ModLoader", "RegisterBlock", localIllegalAccessException);
  1120.       ThrowException(localIllegalAccessException);
  1121.     } catch (SecurityException localSecurityException) {
  1122.       logger.throwing("ModLoader", "RegisterBlock", localSecurityException);
  1123.       ThrowException(localSecurityException);
  1124.     } catch (InstantiationException localInstantiationException) {
  1125.       logger.throwing("ModLoader", "RegisterBlock", localInstantiationException);
  1126.       ThrowException(localInstantiationException);
  1127.     } catch (InvocationTargetException localInvocationTargetException) {
  1128.       logger.throwing("ModLoader", "RegisterBlock", localInvocationTargetException);
  1129.       ThrowException(localInvocationTargetException);
  1130.     } catch (NoSuchMethodException localNoSuchMethodException) {
  1131.       logger.throwing("ModLoader", "RegisterBlock", localNoSuchMethodException);
  1132.       ThrowException(localNoSuchMethodException);
  1133.     }
  1134.   }
  1135.  
  1136.   public static void RegisterEntityID(Class<? extends ms> paramClass, String paramString, int paramInt)
  1137.   {
  1138.     try
  1139.     {
  1140.       method_RegisterEntityID.invoke(null, new Object[] { paramClass, paramString, Integer.valueOf(paramInt) });
  1141.     } catch (IllegalArgumentException localIllegalArgumentException) {
  1142.       logger.throwing("ModLoader", "RegisterEntityID", localIllegalArgumentException);
  1143.       ThrowException(localIllegalArgumentException);
  1144.     } catch (IllegalAccessException localIllegalAccessException) {
  1145.       logger.throwing("ModLoader", "RegisterEntityID", localIllegalAccessException);
  1146.       ThrowException(localIllegalAccessException);
  1147.     } catch (InvocationTargetException localInvocationTargetException) {
  1148.       logger.throwing("ModLoader", "RegisterEntityID", localInvocationTargetException);
  1149.       ThrowException(localInvocationTargetException);
  1150.     }
  1151.   }
  1152.  
  1153.   public static void RegisterEntityID(Class<? extends ms> entityClass, String entityName, int id, int background, int foreground)
  1154.   {
  1155.     RegisterEntityID(entityClass, entityName, id);
  1156.  
  1157.     yr.a.put(Integer.valueOf(id), new he(id, background, foreground));
  1158.   }
  1159.  
  1160.   public static void RegisterKey(BaseMod paramBaseMod, ads paramaby, boolean paramBoolean)
  1161.   {
  1162.     Object localObject = (Map)keyList.get(paramBaseMod);
  1163.     if (localObject == null)
  1164.       localObject = new HashMap();
  1165.     ((Map)localObject).put(paramaby, new boolean[] { paramBoolean });
  1166.     keyList.put(paramBaseMod, localObject);
  1167.   }
  1168.  
  1169.   public static void RegisterTileEntity(Class<? extends bq> paramClass, String paramString)
  1170.   {
  1171.     RegisterTileEntity(paramClass, paramString, null);
  1172.   }
  1173.  
  1174.   public static void RegisterTileEntity(Class<? extends kf> tileEntityClass, String id)
  1175.   {
  1176.     RegisterTileEntity(tileEntityClass, id, null);
  1177.   }
  1178.  
  1179.   public static void RegisterTileEntity(Class<? extends kf> paramClass, String paramString, yu paramyu)
  1180.   {
  1181.     try
  1182.     {
  1183.       method_RegisterTileEntity.invoke(null, new Object[] { paramClass, paramString });
  1184.       if (paramyu != null) {
  1185.         aai localah = aai.a;
  1186.  
  1187.         Map localMap = (Map)field_TileEntityRenderers.get(localaai);
  1188.         localMap.put(paramClass, paramyu);
  1189.         paramyu.a(localaai);
  1190.       }
  1191.     } catch (IllegalArgumentException localIllegalArgumentException) {
  1192.       logger.throwing("ModLoader", "RegisterTileEntity", localIllegalArgumentException);
  1193.       ThrowException(localIllegalArgumentException);
  1194.     } catch (IllegalAccessException localIllegalAccessException) {
  1195.       logger.throwing("ModLoader", "RegisterTileEntity", localIllegalAccessException);
  1196.       ThrowException(localIllegalAccessException);
  1197.     } catch (InvocationTargetException localInvocationTargetException) {
  1198.       logger.throwing("ModLoader", "RegisterTileEntity", localInvocationTargetException);
  1199.       ThrowException(localInvocationTargetException);
  1200.     }
  1201.   }
  1202.  
  1203.   public static void RemoveSpawn(Class<? extends aar> paramClass, aah paramaah)
  1204.   {
  1205.     RemoveSpawn(paramClass, paramaah, null);
  1206.   }
  1207.  
  1208.   public static void RemoveSpawn(Class<? extends aar> paramClass, aah paramaah, zp[] paramArrayOfsr)
  1209.   {
  1210.     if (paramClass == null) {
  1211.       throw new IllegalArgumentException("entityClass cannot be null");
  1212.     }
  1213.     if (paramaah == null) {
  1214.       throw new IllegalArgumentException("spawnList cannot be null");
  1215.     }
  1216.     if (paramArrayOfsr == null)
  1217.       paramArrayOfsr = standardBiomes;
  1218.     Iterator localIterator;
  1219.     for (int i = 0; i < paramArrayOfsr.length; i++)
  1220.     {
  1221.       List localList = paramArrayOfsr[i].a(paramaah);
  1222.  
  1223.       if (localList != null)
  1224.         for (localIterator = localList.iterator(); localIterator.hasNext(); ) {
  1225.           bd localbd = (bd)localIterator.next();
  1226.           if (localbd.a == paramClass)
  1227.             localIterator.remove();
  1228.         }
  1229.     }
  1230.   }
  1231.  
  1232.   public static void RemoveSpawn(String paramString, aah paramaah)
  1233.   {
  1234.     RemoveSpawn(paramString, paramaah, null);
  1235.   }
  1236.  
  1237.   public static void RemoveSpawn(String paramString, aah paramaah, zp[] paramArrayOfsr)
  1238.   {
  1239.     Class localClass = (Class)classMap.get(paramString);
  1240.     if ((localClass != null) && (aar.class.isAssignableFrom(localClass)))
  1241.       RemoveSpawn(localClass, paramaah, paramArrayOfsr);
  1242.   }
  1243.  
  1244.   public static boolean RenderBlockIsItemFull3D(int paramInt)
  1245.   {
  1246.     if (!blockSpecialInv.containsKey(Integer.valueOf(paramInt)))
  1247.       return paramInt == 16;
  1248.     return ((Boolean)blockSpecialInv.get(Integer.valueOf(paramInt))).booleanValue();
  1249.   }
  1250.  
  1251.   public static void RenderInvBlock(uc paramuc, oe paramoe, int paramInt1, int paramInt2)
  1252.   {
  1253.     BaseMod localBaseMod = (BaseMod)blockModels.get(Integer.valueOf(paramInt2));
  1254.     if (localBaseMod == null)
  1255.       return;
  1256.     localBaseMod.RenderInvBlock(paramuc, paramoe, paramInt1, paramInt2);
  1257.   }
  1258.  
  1259.   public static boolean RenderWorldBlock(uc paramuc, aiw paramaiw, iint paramInt1, int paramInt2, int paramInt3, oe paramoe, int paramInt4)
  1260.   {
  1261.     BaseMod localBaseMod = (BaseMod)blockModels.get(Integer.valueOf(paramInt4));
  1262.     if (localBaseMod == null)
  1263.       return false;
  1264.     return localBaseMod.RenderWorldBlock(paramuc, paramaiw, paramInt1, paramInt2, paramInt3, paramoe, paramInt4);
  1265.   }
  1266.  
  1267.   public static void saveConfig()
  1268.     throws IOException
  1269.   {
  1270.     cfgdir.mkdir();
  1271.  
  1272.     if ((!cfgfile.exists()) && (!cfgfile.createNewFile())) {
  1273.       return;
  1274.     }
  1275.     if (cfgfile.canWrite()) {
  1276.       FileOutputStream localFileOutputStream = new FileOutputStream(cfgfile);
  1277.       props.store(localFileOutputStream, "ModLoader Config");
  1278.       localFileOutputStream.close();
  1279.     }
  1280.   }
  1281.  
  1282.   public static void SetInGameHook(BaseMod paramBaseMod, boolean paramBoolean1, boolean paramBoolean2)
  1283.   {
  1284.     if (paramBoolean1) inGameHooks.put(paramBaseMod, Boolean.valueOf(paramBoolean2)); else
  1285.       inGameHooks.remove(paramBaseMod);
  1286.   }
  1287.  
  1288.   public static void SetInGUIHook(BaseMod paramBaseMod, boolean paramBoolean1, boolean paramBoolean2)
  1289.   {
  1290.     if (paramBoolean1) inGUIHooks.put(paramBaseMod, Boolean.valueOf(paramBoolean2)); else
  1291.       inGUIHooks.remove(paramBaseMod);
  1292.   }
  1293.  
  1294.   public static <T, E> void setPrivateValue(Class<? super T> paramClass, T paramT, int paramInt, E paramE)
  1295.     throws IllegalArgumentException, SecurityException, NoSuchFieldException
  1296.   {
  1297.     try
  1298.     {
  1299.       Field localField = paramClass.getDeclaredFields()[paramInt];
  1300.       localField.setAccessible(true);
  1301.       int i = field_modifiers.getInt(localField);
  1302.       if ((i & 0x10) != 0)
  1303.         field_modifiers.setInt(localField, i & 0xFFFFFFEF);
  1304.       localField.set(paramT, paramE);
  1305.     } catch (IllegalAccessException localIllegalAccessException) {
  1306.       logger.throwing("ModLoader", "setPrivateValue", localIllegalAccessException);
  1307.       ThrowException("An impossible error has occured!", localIllegalAccessException);
  1308.     }
  1309.   }
  1310.  
  1311.   public static <T, E> void setPrivateValue(Class<? super T> paramClass, T paramT, String paramString, E paramE)
  1312.     throws IllegalArgumentException, SecurityException, NoSuchFieldException
  1313.   {
  1314.     try
  1315.     {
  1316.       Field localField = paramClass.getDeclaredField(paramString);
  1317.       int i = field_modifiers.getInt(localField);
  1318.       if ((i & 0x10) != 0)
  1319.         field_modifiers.setInt(localField, i & 0xFFFFFFEF);
  1320.       localField.setAccessible(true);
  1321.       localField.set(paramT, paramE);
  1322.     } catch (IllegalAccessException localIllegalAccessException) {
  1323.       logger.throwing("ModLoader", "setPrivateValue", localIllegalAccessException);
  1324.       ThrowException("An impossible error has occured!", localIllegalAccessException);
  1325.     }
  1326.   }
  1327.  
  1328.   private static void setupProperties(Class<? extends BaseMod> paramClass) throws IllegalArgumentException, IllegalAccessException, IOException, SecurityException, NoSuchFieldException
  1329.   {
  1330.     List fieldList = new LinkedList();
  1331.     Properties localProperties = new Properties();
  1332.     int currentHash = 0;
  1333.     int cfgHash = 0;
  1334.  
  1335.     File localFile = new File(cfgdir, new StringBuilder().append(paramClass.getName()).append(".cfg").toString());
  1336.     if ((localFile.exists()) && (localFile.canRead())) {
  1337.       localProperties.load(new FileInputStream(localFile));
  1338.     }
  1339.     if (modprops.containsKey("checksum")) {
  1340.       cfgHash = Integer.parseInt(modprops.getProperty("checksum"), 36);
  1341.     }
  1342.     for (Field field : mod.getDeclaredFields()) {
  1343.       if (((field.getModifiers() & 0x8) != 0) && (field.isAnnotationPresent(MLProp.class))) {
  1344.         fieldList.add(field);
  1345.         Object currentvalue = field.get(null);
  1346.         currentHash += currentvalue.hashCode();
  1347.       }
  1348.     }
  1349.  
  1350.     StringBuilder localStringBuilder1 = new StringBuilder();
  1351.  
  1352.     for (Field localField : paramClass.getFields()) {
  1353.       if (((localField.getModifiers() & 0x8) != 0) && (localField.isAnnotationPresent(MLProp.class))) {
  1354.         Class localClass = localField.getType();
  1355.         MLProp localMLProp = (MLProp)localField.getAnnotation(MLProp.class);
  1356.         String str1 = localMLProp.name().length() == 0 ? localField.getName() : localMLProp.name();
  1357.         Object localObject1 = localField.get(null);
  1358.  
  1359.         StringBuilder localStringBuilder2 = new StringBuilder();
  1360.         if (localMLProp.min() != (-1.0D / 0.0D))
  1361.           localStringBuilder2.append(String.format(",>=%.1f", new Object[] { Double.valueOf(localMLProp.min()) }));
  1362.         if (localMLProp.max() != (1.0D / 0.0D)) {
  1363.           localStringBuilder2.append(String.format(",<=%.1f", new Object[] { Double.valueOf(localMLProp.max()) }));
  1364.         }
  1365.         StringBuilder localStringBuilder3 = new StringBuilder();
  1366.         if (localMLProp.info().length() > 0) {
  1367.           localStringBuilder3.append(" -- ");
  1368.           localStringBuilder3.append(localMLProp.info());
  1369.         }
  1370.  
  1371.         localStringBuilder1.append(String.format("%s (%s:%s%s)%s\n", new Object[] { str1, localClass.getName(), localObject1, localStringBuilder2, localStringBuilder3 }));
  1372.  
  1373.         if ((cfgHash == currentHash) && (localProperties.containsKey(keystr1
  1374.           String str2 = localProperties.getProperty(str1);
  1375.  
  1376.           Object localObject2 = null;
  1377.           if (localClass.isAssignableFrom(String.class)) localObject2 = str2;
  1378.           else if (localClass.isAssignableFrom(Integer.TYPE)) localObject2 = Integer.valueOf(Integer.parseInt(str2));
  1379.           else if (localClass.isAssignableFrom(Short.TYPE)) localObject2 = Short.valueOf(Short.parseShort(str2));
  1380.           else if (localClass.isAssignableFrom(Byte.TYPE)) localObject2 = Byte.valueOf(Byte.parseByte(str2));
  1381.           else if (localClass.isAssignableFrom(Boolean.TYPE)) localObject2 = Boolean.valueOf(Boolean.parseBoolean(str2));
  1382.           else if (localClass.isAssignableFrom(Float.TYPE)) localObject2 = Float.valueOf(Float.parseFloat(str2));
  1383.           else if (localClass.isAssignableFrom(Double.TYPE)) {
  1384.             localObject2 = Double.valueOf(Double.parseDouble(str2));
  1385.           }
  1386.           if (localObject2 != null) {
  1387.             if ((localObject2 instanceof Number)) {
  1388.               double d = ((Number)localObject2).doubleValue();
  1389.               if ((localMLProp.min() != (-1.0D / 0.0D)) && (d < localMLProp.min()))
  1390.                 continue;
  1391.               if ((localMLProp.max() != (1.0D / 0.0D)) && (d > localMLProp.max())) {
  1392.                 continue;
  1393.               }
  1394.             }
  1395.             logger.finer(new StringBuilder().append(str1).append(" set to ").append(localObject2).toString());
  1396.             if (!((Object)localObject2).equals(localObject1))
  1397.               localField.set(null, localObject2);
  1398.           }
  1399.         } else {
  1400.           logger.finer(new StringBuilder().append(str1).append(" not in config, using default: ").append(localObject1).toString());
  1401.           localProperties.setProperty(str1, localObject1.toString());
  1402.         }
  1403.       }
  1404.     }
  1405.  
  1406.     if ((!localProperties.isEmpty()) && ((localFile.exists()) || (localFile.createNewFile())) && (localFile.canWrite()))
  1407.       localProperties.store(new FileOutputStream(localFile), localStringBuilder1.toString());
  1408.   }
  1409.  
  1410.   public static void TakenFromCrafting(xb paramxb, yq paramyq, ic paramic)
  1411.   {
  1412.     for (BaseMod localBaseMod : modList)
  1413.       localBaseMod.TakenFromCrafting(paramxb, paramyq, paramic);
  1414.   }
  1415.  
  1416.   public static void TakenFromFurnace(xb paramxb, yq paramyq)
  1417.   {
  1418.     for (BaseMod localBaseMod : modList)
  1419.       localBaseMod.TakenFromFurnace(paramxb, paramyq);
  1420.   }
  1421.  
  1422.   public static void ThrowException(String paramString, Throwable paramThrowable)
  1423.   {
  1424.     Minecraft localMinecraft = getMinecraftInstance();
  1425.     if (localMinecraft != null) localMinecraft.a(new im(paramString, paramThrowable)); else
  1426.       throw new RuntimeException(paramThrowable);
  1427.   }
  1428.  
  1429.   private static void ThrowException(Throwable paramThrowable)
  1430.   {
  1431.     ThrowException("Exception occured in ModLoader", paramThrowable);
  1432.   }
  1433. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement