package net.minecraft.entity; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import net.minecraft.entity.ai.EntityMinecartMobSpawner; import net.minecraft.entity.boss.EntityDragon; import net.minecraft.entity.boss.EntityWither; import net.minecraft.entity.effect.EntityLightningBolt; import net.minecraft.entity.item.EntityArmorStand; import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.item.EntityEnderCrystal; import net.minecraft.entity.item.EntityEnderEye; import net.minecraft.entity.item.EntityEnderPearl; import net.minecraft.entity.item.EntityExpBottle; import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItemFrame; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.item.EntityMinecartChest; import net.minecraft.entity.item.EntityMinecartEmpty; import net.minecraft.entity.item.EntityMinecartFurnace; import net.minecraft.entity.item.EntityMinecartHopper; import net.minecraft.entity.item.EntityMinecartTNT; import net.minecraft.entity.item.EntityPainting; import net.minecraft.entity.item.EntityTNTPrimed; import net.minecraft.entity.item.EntityXPOrb; import net.minecraft.entity.monster.EntityBlaze; import net.minecraft.entity.monster.EntityCaveSpider; import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.entity.monster.EntityEndermite; import net.minecraft.entity.monster.EntityGhast; import net.minecraft.entity.monster.EntityGiantZombie; import net.minecraft.entity.monster.EntityGuardian; import net.minecraft.entity.monster.EntityIronGolem; import net.minecraft.entity.monster.EntityMagmaCube; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.monster.EntityPigZombie; import net.minecraft.entity.monster.EntitySilverfish; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntitySlime; import net.minecraft.entity.monster.EntitySnowman; import net.minecraft.entity.monster.EntitySpider; import net.minecraft.entity.monster.EntityWitch; import net.minecraft.entity.monster.EntityZombie; import net.minecraft.entity.passive.EntityBat; import net.minecraft.entity.passive.EntityChicken; import net.minecraft.entity.passive.EntityCow; import net.minecraft.entity.passive.EntityHorse; import net.minecraft.entity.passive.EntityMooshroom; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.passive.EntityPig; import net.minecraft.entity.passive.EntityRabbit; import net.minecraft.entity.passive.EntitySheep; import net.minecraft.entity.passive.EntitySquid; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.passive.EntityWolf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.entity.projectile.EntityLargeFireball; import net.minecraft.entity.projectile.EntityPotion; import net.minecraft.entity.projectile.EntitySmallFireball; import net.minecraft.entity.projectile.EntitySnowball; import net.minecraft.entity.projectile.EntityWitherSkull; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.stats.StatBase; import net.minecraft.stats.StatList; import net.minecraft.world.World; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class EntityList { private static final Logger logger = LogManager.getLogger(); /** Provides a mapping between entity classes and a string */ private static final Map stringToClassMapping = Maps.newHashMap(); /** Provides a mapping between a string and an entity classes */ private static final Map classToStringMapping = Maps.newHashMap(); /** provides a mapping between an entityID and an Entity Class */ private static final Map idToClassMapping = Maps.newHashMap(); /** provides a mapping between an Entity Class and an entity ID */ private static final Map classToIDMapping = Maps.newHashMap(); private static final Map field_180126_g = Maps.newHashMap(); /** This is a HashMap of the Creative Entity Eggs/Spawners. */ public static final Map entityEggs = Maps.newLinkedHashMap(); private static final String __OBFID = "CL_00001538"; /** * adds a mapping between Entity classes and both a string representation and an ID */ private static void addMapping(Class p_75618_0_, String p_75618_1_, int p_75618_2_) { if (stringToClassMapping.containsKey(p_75618_1_)) { throw new IllegalArgumentException("ID is already registered: " + p_75618_1_); } else if (idToClassMapping.containsKey(Integer.valueOf(p_75618_2_))) { throw new IllegalArgumentException("ID is already registered: " + p_75618_2_); } else if (p_75618_2_ == 0) { throw new IllegalArgumentException("Cannot register to reserved id: " + p_75618_2_); } else if (p_75618_0_ == null) { throw new IllegalArgumentException("Cannot register null clazz for id: " + p_75618_2_); } else { stringToClassMapping.put(p_75618_1_, p_75618_0_); classToStringMapping.put(p_75618_0_, p_75618_1_); idToClassMapping.put(Integer.valueOf(p_75618_2_), p_75618_0_); classToIDMapping.put(p_75618_0_, Integer.valueOf(p_75618_2_)); field_180126_g.put(p_75618_1_, Integer.valueOf(p_75618_2_)); } } /** * Adds a entity mapping with egg info. */ private static void addMapping(Class p_75614_0_, String p_75614_1_, int p_75614_2_, int p_75614_3_, int p_75614_4_) { addMapping(p_75614_0_, p_75614_1_, p_75614_2_); entityEggs.put(Integer.valueOf(p_75614_2_), new EntityList.EntityEggInfo(p_75614_2_, p_75614_3_, p_75614_4_)); } /** * Create a new instance of an entity in the world by using the entity name. */ public static Entity createEntityByName(String p_75620_0_, World worldIn) { Entity var2 = null; try { Class var3 = (Class)stringToClassMapping.get(p_75620_0_); if (var3 != null) { var2 = (Entity)var3.getConstructor(new Class[] {World.class}).newInstance(new Object[] {worldIn}); } } catch (Exception var4) { var4.printStackTrace(); } return var2; } /** * create a new instance of an entity from NBT store */ public static Entity createEntityFromNBT(NBTTagCompound p_75615_0_, World worldIn) { Entity var2 = null; if ("Minecart".equals(p_75615_0_.getString("id"))) { p_75615_0_.setString("id", EntityMinecart.EnumMinecartType.func_180038_a(p_75615_0_.getInteger("Type")).func_180040_b()); p_75615_0_.removeTag("Type"); } try { Class var3 = (Class)stringToClassMapping.get(p_75615_0_.getString("id")); if (var3 != null) { var2 = (Entity)var3.getConstructor(new Class[] {World.class}).newInstance(new Object[] {worldIn}); } } catch (Exception var4) { var4.printStackTrace(); } if (var2 != null) { var2.readFromNBT(p_75615_0_); } else { logger.warn("Skipping Entity with id " + p_75615_0_.getString("id")); } return var2; } /** * Create a new instance of an entity in the world by using an entity ID. */ public static Entity createEntityByID(int p_75616_0_, World worldIn) { Entity var2 = null; try { Class var3 = getClassFromID(p_75616_0_); if (var3 != null) { var2 = (Entity)var3.getConstructor(new Class[] {World.class}).newInstance(new Object[] {worldIn}); } } catch (Exception var4) { var4.printStackTrace(); } if (var2 == null) { logger.warn("Skipping Entity with id " + p_75616_0_); } return var2; } /** * gets the entityID of a specific entity */ public static int getEntityID(Entity p_75619_0_) { Integer var1 = (Integer)classToIDMapping.get(p_75619_0_.getClass()); return var1 == null ? 0 : var1.intValue(); } /** * Return the class assigned to this entity ID. */ public static Class getClassFromID(int p_90035_0_) { return (Class)idToClassMapping.get(Integer.valueOf(p_90035_0_)); } /** * Gets the string representation of a specific entity. */ public static String getEntityString(Entity p_75621_0_) { return (String)classToStringMapping.get(p_75621_0_.getClass()); } /** * Finds the class using IDtoClassMapping and classToStringMapping */ public static String getStringFromID(int p_75617_0_) { return (String)classToStringMapping.get(getClassFromID(p_75617_0_)); } public static void func_151514_a() {} public static List func_180124_b() { Set var0 = stringToClassMapping.keySet(); ArrayList var1 = Lists.newArrayList(); Iterator var2 = var0.iterator(); while (var2.hasNext()) { String var3 = (String)var2.next(); Class var4 = (Class)stringToClassMapping.get(var3); if ((var4.getModifiers() & 1024) != 1024) { var1.add(var3); } } var1.add("LightningBolt"); return var1; } public static boolean func_180123_a(Entity p_180123_0_, String p_180123_1_) { String var2 = getEntityString(p_180123_0_); if (var2 == null && p_180123_0_ instanceof EntityPlayer) { var2 = "Player"; } else if (var2 == null && p_180123_0_ instanceof EntityLightningBolt) { var2 = "LightningBolt"; } return p_180123_1_.equals(var2); } public static boolean func_180125_b(String p_180125_0_) { return "Player".equals(p_180125_0_) || func_180124_b().contains(p_180125_0_); } static { addMapping(EntityItem.class, "Item", 1); addMapping(EntityXPOrb.class, "XPOrb", 2); addMapping(EntityLeashKnot.class, "LeashKnot", 8); addMapping(EntityPainting.class, "Painting", 9); addMapping(EntityArrow.class, "Arrow", 10); addMapping(EntitySnowball.class, "Snowball", 11); addMapping(EntityLargeFireball.class, "Fireball", 12); addMapping(EntitySmallFireball.class, "SmallFireball", 13); addMapping(EntityEnderPearl.class, "ThrownEnderpearl", 14); addMapping(EntityEnderEye.class, "EyeOfEnderSignal", 15); addMapping(EntityPotion.class, "ThrownPotion", 16); addMapping(EntityExpBottle.class, "ThrownExpBottle", 17); addMapping(EntityItemFrame.class, "ItemFrame", 18); addMapping(EntityWitherSkull.class, "WitherSkull", 19); addMapping(EntityTNTPrimed.class, "PrimedTnt", 20); addMapping(EntityFallingBlock.class, "FallingSand", 21); addMapping(EntityFireworkRocket.class, "FireworksRocketEntity", 22); addMapping(EntityArmorStand.class, "ArmorStand", 30); addMapping(EntityBoat.class, "Boat", 41); addMapping(EntityMinecartEmpty.class, EntityMinecart.EnumMinecartType.RIDEABLE.func_180040_b(), 42); addMapping(EntityMinecartChest.class, EntityMinecart.EnumMinecartType.CHEST.func_180040_b(), 43); addMapping(EntityMinecartFurnace.class, EntityMinecart.EnumMinecartType.FURNACE.func_180040_b(), 44); addMapping(EntityMinecartTNT.class, EntityMinecart.EnumMinecartType.TNT.func_180040_b(), 45); addMapping(EntityMinecartHopper.class, EntityMinecart.EnumMinecartType.HOPPER.func_180040_b(), 46); addMapping(EntityMinecartMobSpawner.class, EntityMinecart.EnumMinecartType.SPAWNER.func_180040_b(), 47); addMapping(EntityMinecartCommandBlock.class, EntityMinecart.EnumMinecartType.COMMAND_BLOCK.func_180040_b(), 40); addMapping(EntityLiving.class, "Mob", 48); addMapping(EntityMob.class, "Monster", 49); addMapping(EntityCreeper.class, "Creeper", 50, 894731, 0); addMapping(EntitySkeleton.class, "Skeleton", 51, 12698049, 4802889); addMapping(EntitySpider.class, "Spider", 52, 3419431, 11013646); addMapping(EntityGiantZombie.class, "Giant", 53); addMapping(EntityZombie.class, "Zombie", 54, 44975, 7969893); addMapping(EntitySlime.class, "Slime", 55, 5349438, 8306542); addMapping(EntityGhast.class, "Ghast", 56, 16382457, 12369084); addMapping(EntityPigZombie.class, "PigZombie", 57, 15373203, 5009705); addMapping(EntityEnderman.class, "Enderman", 58, 1447446, 0); addMapping(EntityCaveSpider.class, "CaveSpider", 59, 803406, 11013646); addMapping(EntitySilverfish.class, "Silverfish", 60, 7237230, 3158064); addMapping(EntityBlaze.class, "Blaze", 61, 16167425, 16775294); addMapping(EntityMagmaCube.class, "LavaSlime", 62, 3407872, 16579584); addMapping(EntityDragon.class, "EnderDragon", 63); addMapping(EntityWither.class, "WitherBoss", 64); addMapping(EntityBat.class, "Bat", 65, 4996656, 986895); addMapping(EntityWitch.class, "Witch", 66, 3407872, 5349438); addMapping(EntityEndermite.class, "Endermite", 67, 1447446, 7237230); addMapping(EntityGuardian.class, "Guardian", 68, 5931634, 15826224); addMapping(EntityPig.class, "Pig", 90, 15771042, 14377823); addMapping(EntitySheep.class, "Sheep", 91, 15198183, 16758197); addMapping(EntityCow.class, "Cow", 92, 4470310, 10592673); addMapping(EntityChicken.class, "Chicken", 93, 10592673, 16711680); addMapping(EntitySquid.class, "Squid", 94, 2243405, 7375001); addMapping(EntityWolf.class, "Wolf", 95, 14144467, 13545366); addMapping(EntityMooshroom.class, "MushroomCow", 96, 10489616, 12040119); addMapping(EntitySnowman.class, "SnowMan", 97); addMapping(EntityOcelot.class, "Ozelot", 98, 15720061, 5653556); addMapping(EntityIronGolem.class, "VillagerGolem", 99); addMapping(EntityHorse.class, "EntityHorse", 100, 12623485, 15656192); addMapping(EntityRabbit.class, "Rabbit", 101, 10051392, 7555121); addMapping(EntityVillager.class, "Villager", 120, 5651507, 12422002); addMapping(EntityEnderCrystal.class, "EnderCrystal", 200); } public static class EntityEggInfo { public final int spawnedID; public final int primaryColor; public final int secondaryColor; public final StatBase field_151512_d; public final StatBase field_151513_e; private static final String __OBFID = "CL_00001539"; public EntityEggInfo(int p_i1583_1_, int p_i1583_2_, int p_i1583_3_) { this.spawnedID = p_i1583_1_; this.primaryColor = p_i1583_2_; this.secondaryColor = p_i1583_3_; this.field_151512_d = StatList.func_151182_a(this); this.field_151513_e = StatList.func_151176_b(this); } } }