    001    package net.minecraft.entity;
    002
    003    import java.util.HashMap;
    004    import java.util.LinkedHashMap;
    005    import java.util.Map;
    006    import java.util.logging.Level;
    007
    008    import cpw.mods.fml.common.FMLLog;
    009    import net.minecraft.entity.boss.EntityDragon;
    010    import net.minecraft.entity.boss.EntityWither;
    011    import net.minecraft.entity.item.EntityBoat;
    012    import net.minecraft.entity.item.EntityEnderCrystal;
    013    import net.minecraft.entity.item.EntityEnderEye;
    014    import net.minecraft.entity.item.EntityEnderPearl;
    015    import net.minecraft.entity.item.EntityExpBottle;
    016    import net.minecraft.entity.item.EntityFallingSand;
    017    import net.minecraft.entity.item.EntityFireworkRocket;
    018    import net.minecraft.entity.item.EntityItem;
    019    import net.minecraft.entity.item.EntityItemFrame;
    020    import net.minecraft.entity.item.EntityMinecart;
    021    import net.minecraft.entity.item.EntityPainting;
    022    import net.minecraft.entity.item.EntityTNTPrimed;
    023    import net.minecraft.entity.item.EntityXPOrb;
    024    import net.minecraft.entity.monster.EntityBlaze;
    025    import net.minecraft.entity.monster.EntityCaveSpider;
    026    import net.minecraft.entity.monster.EntityCreeper;
    027    import net.minecraft.entity.monster.EntityEnderman;
    028    import net.minecraft.entity.monster.EntityGhast;
    029    import net.minecraft.entity.monster.EntityGiantZombie;
    030    import net.minecraft.entity.monster.EntityIronGolem;
    031    import net.minecraft.entity.monster.EntityMagmaCube;
    032    import net.minecraft.entity.monster.EntityMob;
    033    import net.minecraft.entity.monster.EntityPigZombie;
    034    import net.minecraft.entity.monster.EntitySilverfish;
    035    import net.minecraft.entity.monster.EntitySkeleton;
    036    import net.minecraft.entity.monster.EntitySlime;
    037    import net.minecraft.entity.monster.EntitySnowman;
    038    import net.minecraft.entity.monster.EntitySpider;
    039    import net.minecraft.entity.monster.EntityWitch;
    040    import net.minecraft.entity.monster.EntityZombie;
    041    import net.minecraft.entity.passive.EntityBat;
    042    import net.minecraft.entity.passive.EntityChicken;
    043    import net.minecraft.entity.passive.EntityCow;
    044    import net.minecraft.entity.passive.EntityMooshroom;
    045    import net.minecraft.entity.passive.EntityOcelot;
    046    import net.minecraft.entity.passive.EntityPig;
    047    import net.minecraft.entity.passive.EntitySheep;
    048    import net.minecraft.entity.passive.EntitySquid;
    049    import net.minecraft.entity.passive.EntityVillager;
    050    import net.minecraft.entity.passive.EntityWolf;
    051    import net.minecraft.entity.projectile.EntityArrow;
    052    import net.minecraft.entity.projectile.EntityLargeFireball;
    053    import net.minecraft.entity.projectile.EntityPotion;
    054    import net.minecraft.entity.projectile.EntitySmallFireball;
    055    import net.minecraft.entity.projectile.EntitySnowball;
    056    import net.minecraft.entity.projectile.EntityWitherSkull;
    057    import net.minecraft.nbt.NBTTagCompound;
    058    import net.minecraft.world.World;
    059
    060    public class EntityList
    061    {
    062        /** Provides a mapping between entity classes and a string */
    063        public static Map stringToClassMapping = new HashMap();
    064
    065        /** Provides a mapping between a string and an entity classes */
    066        public static Map classToStringMapping = new HashMap();
    067
    068        /** provides a mapping between an entityID and an Entity Class */
    069        public static Map IDtoClassMapping = new HashMap();
    070
    071        /** provides a mapping between an Entity Class and an entity ID */
    072        private static Map classToIDMapping = new HashMap();
    073
    074        /** Maps entity names to their numeric identifiers */
    075        private static Map stringToIDMapping = new HashMap();
    076
    077        /** This is a HashMap of the Creative Entity Eggs/Spawners. */
    078        public static HashMap entityEggs = new LinkedHashMap();
    079
    080        /**
    081         * adds a mapping between Entity classes and both a string representation and an ID
    082         */
    083        public static void addMapping(Class par0Class, String par1Str, int par2)
    084        {
    085            stringToClassMapping.put(par1Str, par0Class);
    086            classToStringMapping.put(par0Class, par1Str);
    087            IDtoClassMapping.put(Integer.valueOf(par2), par0Class);
    088            classToIDMapping.put(par0Class, Integer.valueOf(par2));
    089            stringToIDMapping.put(par1Str, Integer.valueOf(par2));
    090        }
    091
    092        /**
    093         * Adds a entity mapping with egg info.
    094         */
    095        public static void addMapping(Class par0Class, String par1Str, int par2, int par3, int par4)
    096        {
    097            addMapping(par0Class, par1Str, par2);
    098            entityEggs.put(Integer.valueOf(par2), new EntityEggInfo(par2, par3, par4));
    099        }
    100
    101        /**
    102         * Create a new instance of an entity in the world by using the entity name.
    103         */
    104        public static Entity createEntityByName(String par0Str, World par1World)
    105        {
    106            Entity var2 = null;
    107
    108            try
    109            {
    110                Class var3 = (Class)stringToClassMapping.get(par0Str);
    111
    112                if (var3 != null)
    113                {
    114                    var2 = (Entity)var3.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par1World});
    115                }
    116            }
    117            catch (Exception var4)
    118            {
    119                var4.printStackTrace();
    120            }
    121
    122            return var2;
    123        }
    124
    125        /**
    126         * create a new instance of an entity from NBT store
    127         */
    128        public static Entity createEntityFromNBT(NBTTagCompound par0NBTTagCompound, World par1World)
    129        {
    130            Entity var2 = null;
    131
    132            Class var3 = null;
    133            try
    134            {
    135                var3 = (Class)stringToClassMapping.get(par0NBTTagCompound.getString("id"));
    136
    137                if (var3 != null)
    138                {
    139                    var2 = (Entity)var3.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par1World});
    140                }
    141            }
    142            catch (Exception var4)
    143            {
    144                var4.printStackTrace();
    145            }
    146
    147            if (var2 != null)
    148            {
    149                try
    150                {
    151                    var2.readFromNBT(par0NBTTagCompound);
    152                }
    153                catch (Exception e)
    154                {
    155                    FMLLog.log(Level.SEVERE, e,
    156                            "An Entity %s(%s) has thrown an exception during loading, its state cannot be restored. Report this to the mod author",
    157                            par0NBTTagCompound.getString("id"), var3.getName());
    158                    var2 = null;
    159                }
    160            }
    161            else
    162            {
    163                System.out.println("Skipping Entity with id " + par0NBTTagCompound.getString("id"));
    164            }
    165
    166            return var2;
    167        }
    168
    169        /**
    170         * Create a new instance of an entity in the world by using an entity ID.
    171         */
    172        public static Entity createEntityByID(int par0, World par1World)
    173        {
    174            Entity var2 = null;
    175
    176            try
    177            {
    178                Class var3 = (Class)IDtoClassMapping.get(Integer.valueOf(par0));
    179
    180                if (var3 != null)
    181                {
    182                    var2 = (Entity)var3.getConstructor(new Class[] {World.class}).newInstance(new Object[] {par1World});
    183                }
    184            }
    185            catch (Exception var4)
    186            {
    187                var4.printStackTrace();
    188            }
    189
    190            if (var2 == null)
    191            {
    192                System.out.println("Skipping Entity with id " + par0);
    193            }
    194
    195            return var2;
    196        }
    197
    198        /**
    199         * gets the entityID of a specific entity
    200         */
    201        public static int getEntityID(Entity par0Entity)
    202        {
    203            Class var1 = par0Entity.getClass();
    204            return classToIDMapping.containsKey(var1) ? ((Integer)classToIDMapping.get(var1)).intValue() : 0;
    205        }
    206
    207        /**
    208         * Return the class assigned to this entity ID.
    209         */
    210        public static Class getClassFromID(int par0)
    211        {
    212            return (Class)IDtoClassMapping.get(Integer.valueOf(par0));
    213        }
    214
    215        /**
    216         * Gets the string representation of a specific entity.
    217         */
    218        public static String getEntityString(Entity par0Entity)
    219        {
    220            return (String)classToStringMapping.get(par0Entity.getClass());
    221        }
    222
    223        /**
    224         * Finds the class using IDtoClassMapping and classToStringMapping
    225         */
    226        public static String getStringFromID(int par0)
    227        {
    228            Class var1 = (Class)IDtoClassMapping.get(Integer.valueOf(par0));
    229            return var1 != null ? (String)classToStringMapping.get(var1) : null;
    230        }
    231
    232        static
    233        {
    234            addMapping(EntityItem.class, "Item", 1);
    235            addMapping(EntityXPOrb.class, "XPOrb", 2);
    236            addMapping(EntityPainting.class, "Painting", 9);
    237            addMapping(EntityArrow.class, "Arrow", 10);
    238            addMapping(EntitySnowball.class, "Snowball", 11);
    239            addMapping(EntityLargeFireball.class, "Fireball", 12);
    240            addMapping(EntitySmallFireball.class, "SmallFireball", 13);
    241            addMapping(EntityEnderPearl.class, "ThrownEnderpearl", 14);
    242            addMapping(EntityEnderEye.class, "EyeOfEnderSignal", 15);
    243            addMapping(EntityPotion.class, "ThrownPotion", 16);
    244            addMapping(EntityExpBottle.class, "ThrownExpBottle", 17);
    245            addMapping(EntityItemFrame.class, "ItemFrame", 18);
    246            addMapping(EntityWitherSkull.class, "WitherSkull", 19);
    247            addMapping(EntityTNTPrimed.class, "PrimedTnt", 20);
    248            addMapping(EntityFallingSand.class, "FallingSand", 21);
    249            addMapping(EntityFireworkRocket.class, "FireworksRocketEntity", 22);
    250            addMapping(EntityMinecart.class, "Minecart", 40);
    251            addMapping(EntityBoat.class, "Boat", 41);
    252            addMapping(EntityLiving.class, "Mob", 48);
    253            addMapping(EntityMob.class, "Monster", 49);
    254            addMapping(EntityCreeper.class, "Creeper", 50, 894731, 0);
    255            addMapping(EntitySkeleton.class, "Skeleton", 51, 12698049, 4802889);
    256            addMapping(EntitySpider.class, "Spider", 52, 3419431, 11013646);
    257            addMapping(EntityGiantZombie.class, "Giant", 53);
    258            addMapping(EntityZombie.class, "Zombie", 54, 44975, 7969893);
    259            addMapping(EntitySlime.class, "Slime", 55, 5349438, 8306542);
    260            addMapping(EntityGhast.class, "Ghast", 56, 16382457, 12369084);
    261            addMapping(EntityPigZombie.class, "PigZombie", 57, 15373203, 5009705);
    262            addMapping(EntityEnderman.class, "Enderman", 58, 1447446, 0);
    263            addMapping(EntityCaveSpider.class, "CaveSpider", 59, 803406, 11013646);
    264            addMapping(EntitySilverfish.class, "Silverfish", 60, 7237230, 3158064);
    265            addMapping(EntityBlaze.class, "Blaze", 61, 16167425, 16775294);
    266            addMapping(EntityMagmaCube.class, "LavaSlime", 62, 3407872, 16579584);
    267            addMapping(EntityDragon.class, "EnderDragon", 63);
    268            addMapping(EntityWither.class, "WitherBoss", 64);
    269            addMapping(EntityBat.class, "Bat", 65, 4996656, 986895);
    270            addMapping(EntityWitch.class, "Witch", 66, 3407872, 5349438);
    271            addMapping(EntityPig.class, "Pig", 90, 15771042, 14377823);
    272            addMapping(EntitySheep.class, "Sheep", 91, 15198183, 16758197);
    273            addMapping(EntityCow.class, "Cow", 92, 4470310, 10592673);
    274            addMapping(EntityChicken.class, "Chicken", 93, 10592673, 16711680);
    275            addMapping(EntitySquid.class, "Squid", 94, 2243405, 7375001);
    276            addMapping(EntityWolf.class, "Wolf", 95, 14144467, 13545366);
    277            addMapping(EntityMooshroom.class, "MushroomCow", 96, 10489616, 12040119);
    278            addMapping(EntitySnowman.class, "SnowMan", 97);
    279            addMapping(EntityOcelot.class, "Ozelot", 98, 15720061, 5653556);
    280            addMapping(EntityIronGolem.class, "VillagerGolem", 99);
    281            addMapping(EntityVillager.class, "Villager", 120, 5651507, 12422002);
    282            addMapping(EntityEnderCrystal.class, "EnderCrystal", 200);
    283        }
    284    }