public static String randomTexture(EntityLiving var0, String var1) {
    if (var1 != null && var1.startsWith("/mob/") && var1.endsWith(".png")) {
      String var2 = var1 + ":" + var0.entityId;
      String var3 = (String) cache.get(var2);

      if (var3 == null) {
        MobRandomizer$ExtraInfo var4 = MobRandomizer$ExtraInfo.getInfo(var0);
        MobRuleList var5 = MobRuleList.get(var1);
        var3 =
            var5.getSkin(
                MobRandomizer$ExtraInfo.access$100(var4),
                MobRandomizer$ExtraInfo.access$200(var4),
                MobRandomizer$ExtraInfo.access$300(var4),
                MobRandomizer$ExtraInfo.access$400(var4),
                MobRandomizer$ExtraInfo.access$500(var4));
        cache.put(var2, var3);

        if (cache.size() > 250) {
          while (cache.size() > 200) {
            cache.remove(cache.keySet().iterator().next());
          }
        }
      }

      return var3;
    } else {
      return var1;
    }
  }
  static MobRuleList$MobRuleEntry load(Properties properties, int index, int limit) {
    String skinList = properties.getProperty("skins." + index, "").trim().toLowerCase();
    int[] skins;
    int chooser;

    if (!skinList.equals("*") && !skinList.equals("all") && !skinList.equals("any")) {
      skins = MCPatcherUtils.parseIntegerList(skinList, 1, limit);

      if (skins.length <= 0) {
        return null;
      }

      for (chooser = 0; chooser < skins.length; ++chooser) {
        --skins[chooser];
      }
    } else {
      skins = new int[limit];

      for (chooser = 0; chooser < skins.length; skins[chooser] = chooser++) {;
      }
    }

    WeightedIndex var11 =
        WeightedIndex.create(skins.length, properties.getProperty("weights." + index, ""));

    if (var11 == null) {
      return null;
    } else {
      String biomeList = MCPatcherUtils.getStringProperty(properties, "biomes." + index, "");
      BitSet biomes;

      if (biomeList.isEmpty()) {
        biomes = null;
      } else {
        biomes = new BitSet();

        if (MobRuleList.access$000() != null) {
          try {
            MobRuleList.access$000().invoke((Object) null, new Object[] {biomeList, biomes});
          } catch (Throwable var10) {
            var10.printStackTrace();
            MobRuleList.access$002((Method) null);
          }
        }
      }

      int minHeight = MCPatcherUtils.getIntProperty(properties, "minHeight." + index, -1);
      int maxHeight =
          MCPatcherUtils.getIntProperty(properties, "maxHeight." + index, Integer.MAX_VALUE);

      if (minHeight < 0 || minHeight > maxHeight) {
        minHeight = -1;
        maxHeight = Integer.MAX_VALUE;
      }

      return new MobRuleList$MobRuleEntry(skins, var11, biomes, minHeight, maxHeight);
    }
  }