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 }