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