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