tcr/java/src/game/init/EntityRegistry.java

428 lines
18 KiB
Java
Executable file

package game.init;
import java.util.Map;
import java.util.Set;
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.log.Log;
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, Class<? extends Entity>> STRING_TO_CLASS = Maps.<String, Class<? extends Entity>>newHashMap();
private static final Map<Class<? extends Entity>, String> CLASS_TO_STRING = Maps.<Class<? extends Entity>, String>newHashMap();
private static final Map<Integer, Class<? extends Entity>> ID_TO_CLASS = Maps.<Integer, Class<? extends Entity>>newHashMap();
private static final Map<Class<? extends Entity>, Integer> CLASS_TO_ID = Maps.<Class<? extends Entity>, Integer>newHashMap();
// private static final Map<String, Integer> STRING_TO_ID = Maps.<String, Integer>newHashMap();
public static final Map<String, EntityEggInfo> SPAWN_EGGS = Maps.<String, EntityEggInfo>newLinkedHashMap();
private static final Map<String, String> STRING_TO_NAME = Maps.<String, String>newHashMap();
private static boolean register;
private static int nextNetId;
private static int registerEntity(String name, Class<? extends Entity> 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<? extends EntityLiving> 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<? extends EntityLiving> 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<? extends Entity> 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<? extends Entity> 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<? extends Entity> 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<? extends Entity> oclass = ID_TO_CLASS.get(entityID);
if(oclass != null) {
if(IObjectData.class.isAssignableFrom(oclass)) {
// Constructor<? extends Entity> 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<? extends Entity> clazz) {
return CLASS_TO_STRING.get(clazz);
}
// public static List<String> getEntityNameList(boolean lower) {
// Set<String> set = STRING_TO_CLASS.keySet();
// List<String> list = Lists.<String>newArrayList();
//
// for(String s : set) {
// Class<? extends Entity> 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<Class<? extends Entity>> 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<Class<? extends Entity>, Render<? extends Entity>> map,
Map<ModelType, RenderNpc> 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));
}
}
}