package game.init; import java.util.Map; import java.util.Set; import game.Log; import game.collect.Maps; import game.entity.Entity; import game.entity.animal.EntityBat; import game.entity.animal.EntityChicken; import game.entity.animal.EntityCow; import game.entity.animal.EntityDragon; import game.entity.animal.EntityHorse; import game.entity.animal.EntityMooshroom; import game.entity.animal.EntityMouse; import game.entity.animal.EntityOcelot; import game.entity.animal.EntityPig; import game.entity.animal.EntityRabbit; import game.entity.animal.EntitySheep; import game.entity.animal.EntitySquid; import game.entity.animal.EntityWolf; import game.entity.effect.EntityLightning; import game.entity.item.EntityBoat; import game.entity.item.EntityCart; import game.entity.item.EntityChestCart; import game.entity.item.EntityCrystal; import game.entity.item.EntityExplosion; import game.entity.item.EntityFalling; import game.entity.item.EntityFireworks; import game.entity.item.EntityHopperCart; import game.entity.item.EntityItem; import game.entity.item.EntityLeashKnot; import game.entity.item.EntityMinecart; import game.entity.item.EntityNuke; import game.entity.item.EntityOrb; import game.entity.item.EntityTnt; import game.entity.item.EntityTntCart; import game.entity.item.EntityXp; import game.entity.item.EntityXpBottle; import game.entity.npc.SpeciesInfo; import game.entity.projectile.EntityArrow; import game.entity.projectile.EntityBox; import game.entity.projectile.EntityBullet; import game.entity.projectile.EntityDie; import game.entity.projectile.EntityDynamite; import game.entity.projectile.EntityEgg; import game.entity.projectile.EntityFireCharge; import game.entity.projectile.EntityFireball; import game.entity.projectile.EntityHook; import game.entity.projectile.EntityPotion; import game.entity.projectile.EntitySnowball; import game.entity.types.EntityLiving; import game.entity.types.IObjectData; import game.init.SpeciesRegistry.ModelType; import game.nbt.NBTTagCompound; import game.renderer.entity.Render; import game.renderer.entity.RenderArachnoid; import game.renderer.entity.RenderArrow; import game.renderer.entity.RenderBat; import game.renderer.entity.RenderBlockEntity; import game.renderer.entity.RenderBoat; import game.renderer.entity.RenderBullet; import game.renderer.entity.RenderChicken; import game.renderer.entity.RenderCow; import game.renderer.entity.RenderCrystal; import game.renderer.entity.RenderDie; import game.renderer.entity.RenderDragon; import game.renderer.entity.RenderDynamite; import game.renderer.entity.RenderEntity; import game.renderer.entity.RenderEntityItem; import game.renderer.entity.RenderFallingBlock; import game.renderer.entity.RenderFireball; import game.renderer.entity.RenderFish; import game.renderer.entity.RenderFlyingBox; import game.renderer.entity.RenderHorse; import game.renderer.entity.RenderHumanoid; import game.renderer.entity.RenderItem; import game.renderer.entity.RenderItemEntity; import game.renderer.entity.RenderLeashKnot; import game.renderer.entity.RenderLightning; import game.renderer.entity.RenderManager; import game.renderer.entity.RenderMinecart; import game.renderer.entity.RenderMooshroom; import game.renderer.entity.RenderMouse; import game.renderer.entity.RenderNpc; import game.renderer.entity.RenderOcelot; import game.renderer.entity.RenderPig; import game.renderer.entity.RenderPotion; import game.renderer.entity.RenderRabbit; import game.renderer.entity.RenderSheep; import game.renderer.entity.RenderSlime; import game.renderer.entity.RenderSpaceMarine; import game.renderer.entity.RenderSquid; import game.renderer.entity.RenderTntMinecart; import game.renderer.entity.RenderTntPrimed; import game.renderer.entity.RenderWolf; import game.renderer.entity.RenderXpOrb; import game.renderer.model.ModelChicken; import game.renderer.model.ModelCow; import game.renderer.model.ModelHorse; import game.renderer.model.ModelMouse; import game.renderer.model.ModelOcelot; import game.renderer.model.ModelPig; import game.renderer.model.ModelRabbit; import game.renderer.model.ModelSheep2; import game.renderer.model.ModelSquid; import game.renderer.model.ModelWolf; import game.world.World; public abstract class EntityRegistry { private static final Map> STRING_TO_CLASS = Maps.>newHashMap(); private static final Map, String> CLASS_TO_STRING = Maps., String>newHashMap(); private static final Map> ID_TO_CLASS = Maps.>newHashMap(); private static final Map, Integer> CLASS_TO_ID = Maps., Integer>newHashMap(); // private static final Map STRING_TO_ID = Maps.newHashMap(); public static final Map SPAWN_EGGS = Maps.newLinkedHashMap(); private static final Map STRING_TO_NAME = Maps.newHashMap(); private static boolean register; private static int nextNetId; private static int registerEntity(String name, Class clazz, String typename) { if(clazz == null) throw new IllegalArgumentException("Kann keine null-Klasse registrieren"); // String name = clazz.getSimpleName(); // if(!name.startsWith("Entity")) // throw new IllegalArgumentException("Fehlerhafter Klassenname: " + name); // name = name.substring(6); if(STRING_TO_CLASS.containsKey(name)) throw new IllegalArgumentException("Klasse ist bereits registriert: " + name); int id = ++nextNetId; STRING_TO_CLASS.put(name, clazz); CLASS_TO_STRING.put(clazz, name); ID_TO_CLASS.put(id, clazz); CLASS_TO_ID.put(clazz, id); // STRING_TO_ID.put(name, id); STRING_TO_NAME.put(name, typename); return id; } private static void registerEntity(String name, Class clazz, String origin, String typename, int eggColor, int spotColor) { if(register) { registerEntity(name, clazz, typename); } else { // String name = clazz.getSimpleName().substring(6); SPAWN_EGGS.put(name, new EntityEggInfo(name, origin, eggColor, spotColor)); } } // private static void registerEntity(Class clazz, String origin, String typename, int eggColor, int spotColor) { // SpeciesInfo species = SpeciesRegistry.CLASSES.get(clazz); // if(species == null) // throw new IllegalArgumentException("'" + typename + "' ist keine NPC-Klasse"); // registerEntity(species.sname, clazz, origin, typename, eggColor, spotColor); // } public static Entity createEntityByName(String entityName, World worldIn) { Entity entity = null; try { Class oclass = (Class)STRING_TO_CLASS.get(entityName); if(oclass != null) { entity = (Entity)oclass.getConstructor(World.class).newInstance(worldIn); } } catch(Exception exception) { exception.printStackTrace(); } return entity; } public static Entity createEntityFromNBT(NBTTagCompound nbt, World worldIn) { Entity entity = null; // if("Minecart".equals(nbt.getString("id"))) { // nbt.setString("id", EntityMinecart.EnumMinecartType.byNetworkID(nbt.getInteger("Type")).getName()); // nbt.removeTag("Type"); // } try { Class oclass = (Class)STRING_TO_CLASS.get(nbt.getString("id")); if(oclass != null) { entity = (Entity)oclass.getConstructor(World.class).newInstance(worldIn); } } catch(Exception exception) { exception.printStackTrace(); } if(entity != null) { entity.readFromNBT(nbt); } else { Log.JNI.warn("Ignoriere Objekt mit Name " + nbt.getString("id")); } return entity; } public static Entity createEntityByID(int entityID, World worldIn) { Entity entity = null; try { Class oclass = ID_TO_CLASS.get(entityID); if(oclass != null) { entity = oclass.getConstructor(World.class).newInstance(worldIn); } } catch(Exception exception) { exception.printStackTrace(); } if(entity == null) { Log.JNI.warn("Ignoriere Objekt mit ID " + entityID); } return entity; } public static Entity createEntityByID(int entityID, World worldIn, double x, double y, double z, int data) { Entity entity = null; try { Class oclass = ID_TO_CLASS.get(entityID); if(oclass != null) { if(IObjectData.class.isAssignableFrom(oclass)) { // Constructor cn; // try { entity = oclass.getConstructor(World.class, double.class, double.class, double.class, int.class) .newInstance(worldIn, x, y, z, data); // } // catch(NoSuchMethodException e) { // } } // if(entity == null) else { entity = oclass.getConstructor(World.class, double.class, double.class, double.class) .newInstance(worldIn, x, y, z); } } } catch(Exception exception) { exception.printStackTrace(); } if(entity == null) { Log.JNI.warn("Ignoriere Objekt mit ID " + entityID); } return entity; } public static int getEntityID(Entity entityIn) { Integer integer = CLASS_TO_ID.get(entityIn.getClass()); return integer == null ? 0 : integer.intValue(); } public static String getEntityString(Entity entityIn) { return CLASS_TO_STRING.get(entityIn.getClass()); } public static String getEntityName(String name) { String typename = STRING_TO_NAME.get(name); return typename == null ? "Unbekannt" : typename; } public static String getEntityString(Class clazz) { return CLASS_TO_STRING.get(clazz); } // public static List getEntityNameList(boolean lower) { // Set set = STRING_TO_CLASS.keySet(); // List list = Lists.newArrayList(); // // for(String s : set) { // Class oclass = (Class)STRING_TO_CLASS.get(s); // // if((oclass.getModifiers() & Modifier.ABSTRACT) != Modifier.ABSTRACT) { // list.add(lower ? s.toLowerCase() : s); // } // } // // list.add(lower ? "lightning" : "Lightning"); // return list; // } public static Set> getAllClasses() { return CLASS_TO_STRING.keySet(); } static void registerEggs() { registerEntity("Dragon", EntityDragon.class, "tbd", "Drache", 0x000000, 0x580094); registerEntity("Bat", EntityBat.class, "transylvania", "Fledermaus", 4996656, 986895); registerEntity("Pig", EntityPig.class, "terra", "Schwein", 15771042, 14377823); registerEntity("Sheep", EntitySheep.class, "terra", "Schaf", 15198183, 16758197); registerEntity("Cow", EntityCow.class, "terra", "Kuh", 4470310, 10592673); registerEntity("Chicken", EntityChicken.class, "terra", "Huhn", 10592673, 16711680); registerEntity("Squid", EntitySquid.class, "tbd", "Tintenfisch", 2243405, 7375001); registerEntity("Wolf", EntityWolf.class, "terra", "Wolf", 14144467, 13545366); registerEntity("Mooshroom", EntityMooshroom.class, "tbd", "Pilzkuh", 10489616, 12040119); registerEntity("Ocelot", EntityOcelot.class, "terra", "Ozelot", 15720061, 5653556); registerEntity("Horse", EntityHorse.class, "terra", "Pferd", 12623485, 15656192); registerEntity("Rabbit", EntityRabbit.class, "terra", "Kaninchen", 10051392, 7555121); registerEntity("Mouse", EntityMouse.class, "terra", "Maus", 0x606060, 0xb0b0b0); for(int z = 0; z < SpeciesRegistry.SPECIMEN.size(); z++) { SpeciesInfo info = SpeciesRegistry.SPECIMEN.get(z); registerEntity(info.id, info.clazz, info.origin, info.name, info.color1, info.color2); } } static void register() { register = true; registerEntity("Item", EntityItem.class, "Gegenstand"); registerEntity("Xp", EntityXp.class, "Erfahrungskugel"); registerEntity("Egg", EntityEgg.class, "Ei"); registerEntity("LeashKnot", EntityLeashKnot.class, "Leinenknoten"); // registerEntity("Painting", EntityPainting.class, "Gemälde"); registerEntity("Arrow", EntityArrow.class, "Pfeil"); registerEntity("Snowball", EntitySnowball.class, "Schneeball"); registerEntity("Fireball", EntityFireball.class, "Feuerball"); registerEntity("FireCharge", EntityFireCharge.class, "Feuerkugel"); registerEntity("Orb", EntityOrb.class, "Geladene Kugel"); registerEntity("Potion", EntityPotion.class, "Trank"); registerEntity("XpBottle", EntityXpBottle.class, "Erfahrungsfläschchen"); // registerEntity("Frame", EntityFrame.class, "Rahmen"); registerEntity("Box", EntityBox.class, "Eisenwürfel"); registerEntity("Tnt", EntityTnt.class, "TNT"); registerEntity("Falling", EntityFalling.class, "Fallender Block"); registerEntity("Fireworks", EntityFireworks.class, "Feuerwerk"); registerEntity("Boat", EntityBoat.class, "Boot"); registerEntity("Minecart", EntityMinecart.class, "Lore"); registerEntity("ChestCart", EntityChestCart.class, "Güterlore"); registerEntity("TntCart", EntityTntCart.class, "TNT-Lore"); registerEntity("HopperCart", EntityHopperCart.class, "Trichterlore"); registerEntity("Hook", EntityHook.class, "Angelhaken"); registerEntity("Dynamite", EntityDynamite.class, "Dynamit"); registerEntity("Nuke", EntityNuke.class, "T-17"); registerEntity("Die", EntityDie.class, "Würfel"); registerEntity("Explosion", EntityExplosion.class, "Explosion"); registerEntity("Crystal", EntityCrystal.class, "Kristall"); registerEntity("Bullet", EntityBullet.class, "Kugel"); //// nextNetId = 255; // registerEntity("Dragon", EntityDragon.class, 0x000000, 0x580094); // registerEntity("Bat", EntityBat.class, 4996656, 986895); // registerEntity("Pig", EntityPig.class, 15771042, 14377823); // registerEntity("Sheep", EntitySheep.class, 15198183, 16758197); // registerEntity("Cow", EntityCow.class, 4470310, 10592673); // registerEntity("Chicken", EntityChicken.class, 10592673, 16711680); // registerEntity("Squid", EntitySquid.class, 2243405, 7375001); // registerEntity("Wolf", EntityWolf.class, 14144467, 13545366); // registerEntity("Mooshroom", EntityMooshroom.class, 10489616, 12040119); // registerEntity("Ocelot", EntityOcelot.class, 15720061, 5653556); // registerEntity("Horse", EntityHorse.class, 12623485, 15656192); // registerEntity("Rabbit", EntityRabbit.class, 10051392, 7555121); // registerEntity("Mouse", EntityMouse.class, 0x606060, 0xb0b0b0); // //// nextNetId = 511; // for(int z = 0; z < SpeciesRegistry.SPECIMEN.size(); z++) { // SpeciesInfo info = SpeciesRegistry.SPECIMEN.get(z); // registerEntity(info.clazz, info.color1, info.color2); // } registerEggs(); } public static void registerRenderers(Map, Render> map, Map models, RenderManager mgr, RenderItem ritem) { map.put(EntityPig.class, new RenderPig(mgr, new ModelPig())); map.put(EntitySheep.class, new RenderSheep(mgr, new ModelSheep2())); map.put(EntityCow.class, new RenderCow(mgr, new ModelCow())); map.put(EntityMooshroom.class, new RenderMooshroom(mgr, new ModelCow())); map.put(EntityWolf.class, new RenderWolf(mgr, new ModelWolf())); map.put(EntityChicken.class, new RenderChicken(mgr, new ModelChicken())); map.put(EntityOcelot.class, new RenderOcelot(mgr, new ModelOcelot())); map.put(EntityRabbit.class, new RenderRabbit(mgr, new ModelRabbit())); map.put(EntitySquid.class, new RenderSquid(mgr, new ModelSquid())); map.put(EntityBat.class, new RenderBat(mgr)); map.put(EntityDragon.class, new RenderDragon(mgr)); map.put(EntityCrystal.class, new RenderCrystal(mgr)); map.put(Entity.class, new RenderEntity(mgr)); // map.put(EntityPainting.class, new RenderPainting(mgr)); // map.put(EntityFrame.class, new RenderItemFrame(mgr, ritem)); map.put(EntityLeashKnot.class, new RenderLeashKnot(mgr)); map.put(EntityArrow.class, new RenderArrow(mgr)); map.put(EntitySnowball.class, new RenderItemEntity(mgr, Items.snowball, ritem)); map.put(EntityOrb.class, new RenderItemEntity(mgr, Items.charged_orb, ritem)); map.put(EntityEgg.class, new RenderItemEntity(mgr, Items.egg, ritem)); map.put(EntityPotion.class, new RenderPotion(mgr, ritem)); map.put(EntityXpBottle.class, new RenderItemEntity(mgr, Items.experience_bottle, ritem)); map.put(EntityFireworks.class, new RenderItemEntity(mgr, Items.fireworks, ritem)); map.put(EntityFireball.class, new RenderFireball(mgr, 0.75F)); map.put(EntityFireCharge.class, new RenderFireball(mgr, 0.5F)); map.put(EntityBox.class, new RenderFlyingBox(mgr)); map.put(EntityItem.class, new RenderEntityItem(mgr, ritem)); map.put(EntityXp.class, new RenderXpOrb(mgr)); map.put(EntityTnt.class, new RenderTntPrimed(mgr)); map.put(EntityFalling.class, new RenderFallingBlock(mgr)); map.put(EntityTntCart.class, new RenderTntMinecart(mgr)); map.put(EntityCart.class, new RenderMinecart(mgr)); map.put(EntityBoat.class, new RenderBoat(mgr)); map.put(EntityHook.class, new RenderFish(mgr)); map.put(EntityHorse.class, new RenderHorse(mgr, new ModelHorse())); map.put(EntityDynamite.class, new RenderDynamite(mgr, Items.dynamite, ritem)); map.put(EntityNuke.class, new RenderBlockEntity(mgr, Blocks.nuke.getState())); map.put(EntityMouse.class, new RenderMouse(mgr, new ModelMouse())); map.put(EntityDie.class, new RenderDie(mgr)); map.put(EntityBullet.class, new RenderBullet(mgr)); map.put(EntityLightning.class, new RenderLightning(mgr)); models.put(ModelType.HUMANOID, new RenderHumanoid(mgr, 12, 12, "textures/entity/char.png")); models.put(ModelType.ARACHNOID, new RenderArachnoid(mgr)); models.put(ModelType.SLIME, new RenderSlime(mgr)); models.put(ModelType.DWARF, new RenderHumanoid(mgr, 10, 10, "textures/entity/dwarf.png")); models.put(ModelType.HALFLING, new RenderHumanoid(mgr, 8, 8, "textures/entity/goblin.png")); models.put(ModelType.SPACE_MARINE, new RenderSpaceMarine(mgr)); for(int z = 0; z < SpeciesRegistry.SPECIMEN.size(); z++) { SpeciesInfo info = SpeciesRegistry.SPECIMEN.get(z); map.put(info.clazz, models.get(info.renderer)); } } }