diff --git a/java/src/game/command/EntityListParser.java b/java/src/game/command/EntityListParser.java index 3630cdd..e9ead68 100644 --- a/java/src/game/command/EntityListParser.java +++ b/java/src/game/command/EntityListParser.java @@ -1,12 +1,14 @@ package game.command; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Set; import game.collect.Lists; import game.collect.Sets; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.EntityLiving; import game.init.EntityRegistry; import game.network.Player; @@ -45,26 +47,67 @@ public class EntityListParser extends EntityParser { throw new RunException("Keine Spieler gefunden"); return list; } - Set set = Sets.newHashSet(); + Set> classes = Sets.newHashSet(); + Set types = Sets.newHashSet(); + Set entities = Sets.newHashSet(); + Set> nclasses = Sets.newHashSet(); + Set ntypes = Sets.newHashSet(); + Set nentities = Sets.newHashSet(); + Boolean living = null; + Boolean player = null; for(String tok : input.split(",", -1)) { + boolean negate = tok.startsWith("!"); + tok = negate ? tok.substring(1) : tok; Class clazz = EntityRegistry.getEntityClass(tok); if(clazz != null) { + if(classes.contains(clazz) || nclasses.contains(clazz)) + throw new RunException("Objekttyp %s mehrfach angegeben", EntityRegistry.getEntityName(EntityRegistry.getEntityString(clazz))); if(this.livingOnly && !EntityLiving.class.isAssignableFrom(clazz)) throw new RunException("Objekttyp %s ist nicht lebendig", EntityRegistry.getEntityName(EntityRegistry.getEntityString(clazz))); - for(WorldServer world : env.getServer().getWorlds()) { - for(Entity ent : world.getEntities()) { - if(clazz.isAssignableFrom(ent.getClass())) - set.add(ent); - } - } + (negate ? nclasses : classes).add(clazz); + } + else if(tok.equals("Player")) { + if(player != null) + throw new RunException("'Player' mehrfach angegeben"); + player = !negate; + } + else if(tok.equals("Living")) { + if(living != null) + throw new RunException("'Living' mehrfach angegeben"); + if(this.livingOnly) + throw new RunException("Kann nicht 'Living' als Objekttypen angeben"); + living = !negate; } else { - set.add((Entity)super.parse(env, tok)); + EntityType type = EntityType.getByName(tok); + if(type != null) { + if(types.contains(type) || ntypes.contains(type)) + throw new RunException("Objekttyp %s mehrfach angegeben", type.getDisplay()); + (negate ? ntypes : types).add(type); + } + else { + Entity ent = (Entity)super.parse(env, tok); + if(entities.contains(ent) || nentities.contains(ent)) + throw new RunException("Objekt '%s' mehrfach angegeben", tok); + (negate ? nentities : entities).add(ent); + } } } - if(set.isEmpty()) + List filtered = Lists.newArrayList(entities); + boolean negateOnly = (living == null && player == null && types.isEmpty() && classes.isEmpty() && entities.isEmpty()); + for(WorldServer world : env.getServer().getWorlds()) { + for(Entity ent : world.getEntities()) { + if((!this.livingOnly || ent instanceof EntityLiving) && + (negateOnly || (living != null && living == (ent instanceof EntityLiving)) || (player != null && player == ent.isPlayer()) || types.contains(ent.getType()) || + classes.contains(ent.getClass())) && + (living == null || living == (ent instanceof EntityLiving)) && (player == null || player == ent.isPlayer()) && + !ntypes.contains(ent.getType()) && !nclasses.contains(ent.getClass()) && !nentities.contains(ent) && !entities.contains(ent)) + filtered.add(ent); + } + } + if(filtered.isEmpty()) throw new RunException("Keine Objekte gefunden"); - return Lists.newArrayList(set); + return filtered; } public Object getDefault(CommandEnvironment env) { @@ -79,7 +122,10 @@ public class EntityListParser extends EntityParser { if(!this.livingOnly || EntityLiving.class.isAssignableFrom(clazz)) comp.add(EntityRegistry.getEntityString(clazz)); } - comp.add("**"); + for(EntityType type : EntityType.values()) { + comp.add(type.getName()); + } + Collections.addAll(comp, "Player", "Living", "**"); return comp; } diff --git a/java/src/game/command/EntityParser.java b/java/src/game/command/EntityParser.java index 70d13b7..ef53831 100644 --- a/java/src/game/command/EntityParser.java +++ b/java/src/game/command/EntityParser.java @@ -39,7 +39,7 @@ public class EntityParser extends PlayerEntityParser { if(entity == null) throw new RunException("Objekt '%s' wurde nicht gefunden", input); else if(this.livingOnly && !(entity instanceof EntityLiving)) - throw new RunException("Objekt muss lebendig sein"); + throw new RunException("Objekt '%s' muss lebendig sein", input); return entity; } diff --git a/java/src/game/command/PlayerEntityListParser.java b/java/src/game/command/PlayerEntityListParser.java index 008d86a..f0ad7dc 100644 --- a/java/src/game/command/PlayerEntityListParser.java +++ b/java/src/game/command/PlayerEntityListParser.java @@ -2,7 +2,10 @@ package game.command; import java.util.Collection; import java.util.List; +import java.util.Set; + import game.collect.Lists; +import game.collect.Sets; import game.entity.Entity; import game.entity.npc.EntityNPC; import game.network.Player; @@ -23,7 +26,13 @@ public class PlayerEntityListParser extends PlayerEntityParser { throw new RunException("Keine Spieler gefunden"); return list; } - return Lists.newArrayList((EntityNPC)super.parse(env, input)); + Set set = Sets.newHashSet(); + for(String tok : input.split(",", -1)) { + set.add((EntityNPC)super.parse(env, tok)); + } + if(set.isEmpty()) + throw new RunException("Keine Spieler gefunden"); + return Lists.newArrayList(set); } public Object getDefault(CommandEnvironment env) { diff --git a/java/src/game/command/PlayerListParser.java b/java/src/game/command/PlayerListParser.java index 05857e8..a9a888f 100644 --- a/java/src/game/command/PlayerListParser.java +++ b/java/src/game/command/PlayerListParser.java @@ -2,7 +2,10 @@ package game.command; import java.util.Collection; import java.util.List; +import java.util.Set; + import game.collect.Lists; +import game.collect.Sets; import game.network.Player; public class PlayerListParser extends PlayerParser { @@ -16,7 +19,13 @@ public class PlayerListParser extends PlayerParser { throw new RunException("Keine Spieler gefunden"); return Lists.newArrayList(env.getServer().getPlayers()); } - return Lists.newArrayList((Player)super.parse(env, input)); + Set set = Sets.newHashSet(); + for(String tok : input.split(",", -1)) { + set.add((Player)super.parse(env, tok)); + } + if(set.isEmpty()) + throw new RunException("Keine Spieler gefunden"); + return Lists.newArrayList(set); } public Object getDefault(CommandEnvironment env) { diff --git a/java/src/game/command/commands/CommandSpawn.java b/java/src/game/command/commands/CommandSpawn.java index d21707a..d4c8096 100644 --- a/java/src/game/command/commands/CommandSpawn.java +++ b/java/src/game/command/commands/CommandSpawn.java @@ -14,6 +14,7 @@ import game.entity.Entity; import game.entity.types.EntityLiving; import game.init.EntityRegistry; import game.nbt.NBTTagCompound; +import game.network.Player; import game.util.Util; import game.world.Vec3; import game.world.WorldServer; @@ -26,6 +27,7 @@ public class CommandSpawn extends Command { for(Class clazz : EntityRegistry.getAllClasses()) { names.add(EntityRegistry.getEntityString(clazz)); } + names.add("Lightning"); this.addEnum("type", String.class, names); this.setParamsOptional(); this.addVector("position", true, true); @@ -38,30 +40,51 @@ public class CommandSpawn extends Command { } public Object exec(CommandEnvironment env, Executor exec, String type, Vec3 pos, WorldServer world, NBTTagCompound tag, boolean noinit, int count, NBTTagCompound postTag) { - List spawned = Lists.newArrayList(); - for(int z = 0; z < count; z++) { - Entity entity = EntityRegistry.createEntityByName(type, world); - if(entity == null) - throw new RunException("Objekt konnte nicht erzeugt werden"); - entity.setLocationAndAngles(pos.xCoord, pos.yCoord, pos.zCoord, world.rand.floatv() * 360.0f, 0.0f); - if(tag != null) { - NBTTagCompound ent = new NBTTagCompound(); - entity.writeToNBT(ent); - ent.merge(tag); - entity.readFromNBT(ent); + if(type.equalsIgnoreCase("Lightning")) { + for(int z = 0; z < count; z++) { + int color = 0xffffff; + if(tag != null && tag.hasKey("color", 3)) + color = tag.getInteger("color"); + else if(tag != null && tag.hasKey("color", 8)) { + try { + color = Integer.parseUnsignedInt(tag.getString("color"), 16); + } + catch(NumberFormatException e) { + } + } + world.strikeLightning(pos.xCoord, pos.yCoord, pos.zCoord, color, + tag != null && tag.hasKey("damage", 3) ? tag.getInteger("damage") : 0, tag != null && tag.hasKey("fire", 1) && tag.getBoolean("fire"), + exec instanceof Player && tag != null && tag.hasKey("summoned", 1) && tag.getBoolean("summoned") ? ((Player)exec).getEntity() : null); } - if(!noinit && (entity instanceof EntityLiving)) - ((EntityLiving)entity).onInitialSpawn(null); - world.spawnEntityInWorld(entity); - if(postTag != null) { - NBTTagCompound ent = new NBTTagCompound(); - entity.writeToNBT(ent); - ent.merge(postTag); - entity.readFromNBT(ent); - } - spawned.add("#" + entity.getId()); + exec.logConsole("%sBlitz bei %d, %d, %d in %s erschaffen", count == 1 ? "" : (count + "x "), (int)pos.xCoord, (int)pos.yCoord, (int)pos.zCoord, world.dimension.getFormattedName(false)); + return null; + } + else { + List spawned = Lists.newArrayList(); + for(int z = 0; z < count; z++) { + Entity entity = EntityRegistry.createEntityByName(type, world); + if(entity == null) + throw new RunException("Objekt konnte nicht erzeugt werden"); + entity.setLocationAndAngles(pos.xCoord, pos.yCoord, pos.zCoord, world.rand.floatv() * 360.0f, 0.0f); + if(tag != null) { + NBTTagCompound ent = new NBTTagCompound(); + entity.writeToNBT(ent); + ent.merge(tag); + entity.readFromNBT(ent); + } + if(!noinit && (entity instanceof EntityLiving)) + ((EntityLiving)entity).onInitialSpawn(null); + world.spawnEntityInWorld(entity); + if(postTag != null) { + NBTTagCompound ent = new NBTTagCompound(); + entity.writeToNBT(ent); + ent.merge(postTag); + entity.readFromNBT(ent); + } + spawned.add("#" + entity.getId()); + } + exec.logConsole("%s%s bei %d, %d, %d in %s erschaffen", count == 1 ? "" : (count + "x "), EntityRegistry.getEntityName(type), (int)pos.xCoord, (int)pos.yCoord, (int)pos.zCoord, world.dimension.getFormattedName(false)); + return Util.buildLines(",", spawned); } - exec.logConsole("%s%s bei %d, %d, %d in %s erschaffen", count == 1 ? "" : (count + "x "), EntityRegistry.getEntityName(type), (int)pos.xCoord, (int)pos.yCoord, (int)pos.zCoord, world.dimension.getFormattedName(false)); - return Util.buildLines(",", spawned); } } diff --git a/java/src/game/entity/Entity.java b/java/src/game/entity/Entity.java index 71fed35..dcf7b23 100755 --- a/java/src/game/entity/Entity.java +++ b/java/src/game/entity/Entity.java @@ -2674,4 +2674,6 @@ public abstract class Entity public Position getPos() { return new Position(this.posX, this.posY, this.posZ, this.rotYaw, this.rotPitch, this.worldObj.dimension.getDimensionId()); } + + public abstract EntityType getType(); } diff --git a/java/src/game/entity/EntityType.java b/java/src/game/entity/EntityType.java new file mode 100644 index 0000000..55ca7fe --- /dev/null +++ b/java/src/game/entity/EntityType.java @@ -0,0 +1,42 @@ +package game.entity; + +import java.util.Map; + +import game.collect.Maps; + +public enum EntityType { + OBJECT("Object", "Objekt"), + VEHICLE("Vehicle", "Fahrzeug"), + PROJECTILE("Projectile", "Projektil"), + EXPLOSIVE("Explosive", "Sprengstoff"), + ANIMAL("Animal", "Tier"), + NPC("NPC", "NPC"); + + private static final Map LOOKUP = Maps.newHashMap(); + + private final String name; + private final String display; + + private EntityType(String name, String display) { + this.name = name; + this.display = display; + } + + public String getName() { + return this.name; + } + + public String getDisplay() { + return this.display; + } + + public static EntityType getByName(String name) { + return LOOKUP.get(name); + } + + static { + for(EntityType type : values()) { + LOOKUP.put(type.name, type); + } + } +} diff --git a/java/src/game/entity/animal/EntityBat.java b/java/src/game/entity/animal/EntityBat.java index ef8702f..741260e 100755 --- a/java/src/game/entity/animal/EntityBat.java +++ b/java/src/game/entity/animal/EntityBat.java @@ -3,6 +3,7 @@ package game.entity.animal; import game.block.Block; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.npc.Alignment; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; @@ -321,4 +322,8 @@ public class EntityBat extends EntityLiving public Alignment getAlignment() { return Alignment.NEUTRAL; } + + public EntityType getType() { + return EntityType.ANIMAL; + } } diff --git a/java/src/game/entity/animal/EntityDragon.java b/java/src/game/entity/animal/EntityDragon.java index 2934d08..52653bc 100755 --- a/java/src/game/entity/animal/EntityDragon.java +++ b/java/src/game/entity/animal/EntityDragon.java @@ -6,6 +6,7 @@ import game.collect.Lists; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.npc.Alignment; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; @@ -617,4 +618,8 @@ public class EntityDragon extends EntityLiving implements IEntityMultiPart public Alignment getAlignment() { return Alignment.LAWFUL_EVIL; } + + public EntityType getType() { + return EntityType.ANIMAL; + } } diff --git a/java/src/game/entity/animal/EntityDragonPart.java b/java/src/game/entity/animal/EntityDragonPart.java index 717b809..6b49f46 100755 --- a/java/src/game/entity/animal/EntityDragonPart.java +++ b/java/src/game/entity/animal/EntityDragonPart.java @@ -2,6 +2,7 @@ package game.entity.animal; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.IEntityMultiPart; import game.nbt.NBTTagCompound; @@ -72,4 +73,8 @@ public class EntityDragonPart extends Entity public boolean isSendingVeloUpdates() { return false; } + + public EntityType getType() { + return EntityType.ANIMAL; + } } diff --git a/java/src/game/entity/item/EntityBoat.java b/java/src/game/entity/item/EntityBoat.java index 0277345..7457d83 100755 --- a/java/src/game/entity/item/EntityBoat.java +++ b/java/src/game/entity/item/EntityBoat.java @@ -6,6 +6,7 @@ import game.block.Block; import game.entity.DamageSource; import game.entity.Entity; import game.entity.EntityDamageSourceIndirect; +import game.entity.EntityType; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; import game.init.Blocks; @@ -641,4 +642,8 @@ public class EntityBoat extends Entity public Item getItem() { return Items.boat; } + + public EntityType getType() { + return EntityType.VEHICLE; + } } diff --git a/java/src/game/entity/item/EntityCart.java b/java/src/game/entity/item/EntityCart.java index f5710aa..a8655f7 100755 --- a/java/src/game/entity/item/EntityCart.java +++ b/java/src/game/entity/item/EntityCart.java @@ -5,6 +5,7 @@ import game.block.BlockRailBase; import game.block.BlockRailPowered; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.EntityLiving; import game.init.BlockRegistry; import game.init.Blocks; @@ -1110,6 +1111,10 @@ public abstract class EntityCart extends Entity implements IWorldNameable return Items.minecart; } } + + public EntityType getType() { + return EntityType.VEHICLE; + } public static enum EnumMinecartType { diff --git a/java/src/game/entity/item/EntityCrystal.java b/java/src/game/entity/item/EntityCrystal.java index c901a33..f066b1d 100755 --- a/java/src/game/entity/item/EntityCrystal.java +++ b/java/src/game/entity/item/EntityCrystal.java @@ -2,6 +2,7 @@ package game.entity.item; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.nbt.NBTTagCompound; import game.world.World; @@ -122,4 +123,8 @@ public class EntityCrystal extends Entity public boolean isSendingVeloUpdates() { return false; } + + public EntityType getType() { + return EntityType.OBJECT; + } } diff --git a/java/src/game/entity/item/EntityExplosion.java b/java/src/game/entity/item/EntityExplosion.java index f202087..260e5b1 100755 --- a/java/src/game/entity/item/EntityExplosion.java +++ b/java/src/game/entity/item/EntityExplosion.java @@ -1,6 +1,7 @@ package game.entity.item; import game.entity.Entity; +import game.entity.EntityType; import game.nbt.NBTTagCompound; import game.world.Explosion; import game.world.World; @@ -89,4 +90,8 @@ public class EntityExplosion extends Entity public boolean isSendingVeloUpdates() { return false; } + + public EntityType getType() { + return EntityType.EXPLOSIVE; + } } diff --git a/java/src/game/entity/item/EntityFalling.java b/java/src/game/entity/item/EntityFalling.java index 301de6f..b5e633f 100755 --- a/java/src/game/entity/item/EntityFalling.java +++ b/java/src/game/entity/item/EntityFalling.java @@ -10,6 +10,7 @@ import game.block.BlockFalling; import game.block.ITileEntityProvider; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.IObjectData; import game.init.BlockRegistry; import game.init.Blocks; @@ -339,4 +340,8 @@ public class EntityFalling extends Entity implements IObjectData // public boolean hasSpawnVelocity() { // return false; // } + + public EntityType getType() { + return EntityType.OBJECT; + } } diff --git a/java/src/game/entity/item/EntityFireworks.java b/java/src/game/entity/item/EntityFireworks.java index 1598ff0..a58c58b 100755 --- a/java/src/game/entity/item/EntityFireworks.java +++ b/java/src/game/entity/item/EntityFireworks.java @@ -1,6 +1,7 @@ package game.entity.item; import game.entity.Entity; +import game.entity.EntityType; import game.init.SoundEvent; import game.item.ItemStack; import game.nbt.NBTTagCompound; @@ -232,4 +233,8 @@ public class EntityFireworks extends Entity public boolean isSendingVeloUpdates() { return true; } + + public EntityType getType() { + return EntityType.EXPLOSIVE; + } } diff --git a/java/src/game/entity/item/EntityItem.java b/java/src/game/entity/item/EntityItem.java index 8d52842..3fed7ee 100755 --- a/java/src/game/entity/item/EntityItem.java +++ b/java/src/game/entity/item/EntityItem.java @@ -3,6 +3,7 @@ package game.entity.item; import game.color.TextColor; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; import game.init.Blocks; @@ -618,4 +619,8 @@ public class EntityItem extends Entity return null; return TextColor.DGREEN + "" + stack.stackSize; } + + public EntityType getType() { + return EntityType.OBJECT; + } } diff --git a/java/src/game/entity/item/EntityLeashKnot.java b/java/src/game/entity/item/EntityLeashKnot.java index 1c4fb16..22844dd 100755 --- a/java/src/game/entity/item/EntityLeashKnot.java +++ b/java/src/game/entity/item/EntityLeashKnot.java @@ -3,6 +3,7 @@ package game.entity.item; import game.block.BlockFence; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; import game.init.Items; @@ -439,6 +440,10 @@ public class EntityLeashKnot extends Entity public Item getItem() { return Items.lead; } + + public EntityType getType() { + return EntityType.OBJECT; + } public static EntityLeashKnot createKnot(World worldIn, BlockPos fence) { diff --git a/java/src/game/entity/item/EntityNuke.java b/java/src/game/entity/item/EntityNuke.java index fddbabe..abca66f 100755 --- a/java/src/game/entity/item/EntityNuke.java +++ b/java/src/game/entity/item/EntityNuke.java @@ -1,6 +1,7 @@ package game.entity.item; import game.entity.Entity; +import game.entity.EntityType; import game.nbt.NBTTagCompound; import game.renderer.particle.ParticleType; import game.world.World; @@ -118,4 +119,8 @@ public class EntityNuke extends Entity public boolean isSendingVeloUpdates() { return true; } + + public EntityType getType() { + return EntityType.EXPLOSIVE; + } } diff --git a/java/src/game/entity/item/EntityTnt.java b/java/src/game/entity/item/EntityTnt.java index 5283b3a..f140c85 100755 --- a/java/src/game/entity/item/EntityTnt.java +++ b/java/src/game/entity/item/EntityTnt.java @@ -1,6 +1,7 @@ package game.entity.item; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.EntityLiving; import game.entity.types.IObjectData; import game.nbt.NBTTagCompound; @@ -155,4 +156,8 @@ public class EntityTnt extends Entity implements IObjectData // public boolean hasSpawnVelocity() { // return false; // } + + public EntityType getType() { + return EntityType.EXPLOSIVE; + } } diff --git a/java/src/game/entity/item/EntityXp.java b/java/src/game/entity/item/EntityXp.java index 15cc98f..67fb026 100755 --- a/java/src/game/entity/item/EntityXp.java +++ b/java/src/game/entity/item/EntityXp.java @@ -3,6 +3,7 @@ package game.entity.item; import game.color.TextColor; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.npc.EntityNPC; import game.entity.types.IObjectData; import game.init.Config; @@ -404,4 +405,8 @@ public class EntityXp extends Entity implements IObjectData // } return this.hasCustomName() ? TextColor.GREEN + this.getCustomNameTag() : null; } + + public EntityType getType() { + return EntityType.OBJECT; + } } diff --git a/java/src/game/entity/npc/EntityNPC.java b/java/src/game/entity/npc/EntityNPC.java index 5c293b6..5a9f91a 100755 --- a/java/src/game/entity/npc/EntityNPC.java +++ b/java/src/game/entity/npc/EntityNPC.java @@ -28,6 +28,7 @@ import game.enchantment.Enchantment; import game.enchantment.EnchantmentHelper; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.animal.EntityDragonPart; import game.entity.animal.EntityHorse; import game.entity.animal.EntityPig; @@ -4643,4 +4644,8 @@ public abstract class EntityNPC extends EntityLiving public void setHovering(boolean hover) { } + + public EntityType getType() { + return EntityType.NPC; + } } diff --git a/java/src/game/entity/projectile/EntityArrow.java b/java/src/game/entity/projectile/EntityArrow.java index 84900d3..911c1bf 100755 --- a/java/src/game/entity/projectile/EntityArrow.java +++ b/java/src/game/entity/projectile/EntityArrow.java @@ -6,6 +6,7 @@ import game.block.Block; import game.enchantment.EnchantmentHelper; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.npc.EntityNPC; import game.entity.types.EntityLiving; import game.entity.types.IObjectData; @@ -631,4 +632,8 @@ public class EntityArrow extends Entity implements IProjectile, IObjectData public boolean hasSpawnVelocity() { return true; } + + public EntityType getType() { + return EntityType.PROJECTILE; + } } diff --git a/java/src/game/entity/projectile/EntityBullet.java b/java/src/game/entity/projectile/EntityBullet.java index 452fcad..035e8a9 100755 --- a/java/src/game/entity/projectile/EntityBullet.java +++ b/java/src/game/entity/projectile/EntityBullet.java @@ -5,6 +5,7 @@ import java.util.List; import game.enchantment.EnchantmentHelper; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.EntityLiving; import game.entity.types.IObjectData; import game.entity.types.IProjectile; @@ -403,4 +404,8 @@ public class EntityBullet extends Entity implements IProjectile, IObjectData public boolean hasSpawnVelocity() { return true; } + + public EntityType getType() { + return EntityType.PROJECTILE; + } } diff --git a/java/src/game/entity/projectile/EntityDynamite.java b/java/src/game/entity/projectile/EntityDynamite.java index c493bd0..0ca9029 100755 --- a/java/src/game/entity/projectile/EntityDynamite.java +++ b/java/src/game/entity/projectile/EntityDynamite.java @@ -1,6 +1,7 @@ package game.entity.projectile; import game.entity.DamageSource; +import game.entity.EntityType; import game.entity.types.EntityLiving; import game.entity.types.EntityThrowable; import game.entity.types.IObjectData; @@ -77,4 +78,8 @@ public class EntityDynamite extends EntityThrowable implements IObjectData // public boolean hasSpawnVelocity() { // return false; // } + + public EntityType getType() { + return EntityType.EXPLOSIVE; + } } diff --git a/java/src/game/entity/projectile/EntityHook.java b/java/src/game/entity/projectile/EntityHook.java index 3660022..15fc77f 100755 --- a/java/src/game/entity/projectile/EntityHook.java +++ b/java/src/game/entity/projectile/EntityHook.java @@ -6,6 +6,7 @@ import game.block.Block; import game.enchantment.EnchantmentHelper; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.item.EntityItem; import game.entity.item.EntityXp; import game.entity.npc.EntityNPC; @@ -661,6 +662,10 @@ public class EntityHook extends Entity implements IObjectData public int getPacketData() { return this.angler != null ? this.angler.getId() : this.getId(); } + + public EntityType getType() { + return EntityType.PROJECTILE; + } // public boolean hasSpawnVelocity() { // return false; diff --git a/java/src/game/entity/projectile/EntityProjectile.java b/java/src/game/entity/projectile/EntityProjectile.java index 089e7b1..3c7847f 100755 --- a/java/src/game/entity/projectile/EntityProjectile.java +++ b/java/src/game/entity/projectile/EntityProjectile.java @@ -5,6 +5,7 @@ import java.util.List; import game.block.Block; import game.entity.DamageSource; import game.entity.Entity; +import game.entity.EntityType; import game.entity.types.EntityLiving; import game.init.BlockRegistry; import game.nbt.NBTTagCompound; @@ -385,4 +386,8 @@ public abstract class EntityProjectile extends Entity // public boolean hasSpawnVelocity() { // return false; // } + + public EntityType getType() { + return EntityType.PROJECTILE; + } } diff --git a/java/src/game/entity/types/EntityAnimal.java b/java/src/game/entity/types/EntityAnimal.java index c9a965e..a4808c2 100755 --- a/java/src/game/entity/types/EntityAnimal.java +++ b/java/src/game/entity/types/EntityAnimal.java @@ -6,6 +6,7 @@ import game.collect.Sets; import game.block.Block; import game.entity.DamageSource; +import game.entity.EntityType; import game.entity.npc.Alignment; import game.entity.npc.EntityNPC; import game.init.Blocks; @@ -315,4 +316,8 @@ public abstract class EntityAnimal extends EntityLiving public Alignment getAlignment() { return Alignment.LAWFUL; } + + public EntityType getType() { + return EntityType.ANIMAL; + } } diff --git a/java/src/game/entity/types/EntityThrowable.java b/java/src/game/entity/types/EntityThrowable.java index 590b93a..c781e42 100755 --- a/java/src/game/entity/types/EntityThrowable.java +++ b/java/src/game/entity/types/EntityThrowable.java @@ -5,6 +5,7 @@ import java.util.List; import game.block.Block; import game.block.BlockPortal; import game.entity.Entity; +import game.entity.EntityType; import game.init.BlockRegistry; import game.init.Blocks; import game.nbt.NBTTagCompound; @@ -389,4 +390,8 @@ public abstract class EntityThrowable extends Entity implements IProjectile public boolean isSendingVeloUpdates() { return true; } + + public EntityType getType() { + return EntityType.PROJECTILE; + } } diff --git a/java/src/game/entity/types/EntityWaterMob.java b/java/src/game/entity/types/EntityWaterMob.java index 94bcaca..bca942d 100755 --- a/java/src/game/entity/types/EntityWaterMob.java +++ b/java/src/game/entity/types/EntityWaterMob.java @@ -1,6 +1,7 @@ package game.entity.types; import game.entity.DamageSource; +import game.entity.EntityType; import game.entity.npc.EntityNPC; import game.init.Config; import game.world.World; @@ -108,4 +109,8 @@ public abstract class EntityWaterMob extends EntityLiving { return this.posY > 45.0D && this.posY < (double)this.worldObj.getSeaLevel(); } + + public EntityType getType() { + return EntityType.ANIMAL; + } } diff --git a/java/src/game/entity/types/EntityWeatherEffect.java b/java/src/game/entity/types/EntityWeatherEffect.java index d6b599f..b958937 100755 --- a/java/src/game/entity/types/EntityWeatherEffect.java +++ b/java/src/game/entity/types/EntityWeatherEffect.java @@ -1,6 +1,7 @@ package game.entity.types; import game.entity.Entity; +import game.entity.EntityType; import game.nbt.NBTTagCompound; import game.world.World; @@ -29,4 +30,8 @@ public abstract class EntityWeatherEffect extends Entity { protected final void writeEntityToNBT(NBTTagCompound tagCompound) { } + + public final EntityType getType() { + return EntityType.OBJECT; + } } diff --git a/java/src/game/renderer/particle/EntityFX.java b/java/src/game/renderer/particle/EntityFX.java index 63c1bb1..963a872 100755 --- a/java/src/game/renderer/particle/EntityFX.java +++ b/java/src/game/renderer/particle/EntityFX.java @@ -2,6 +2,7 @@ package game.renderer.particle; import game.Game; import game.entity.Entity; +import game.entity.EntityType; import game.nbt.NBTTagCompound; import game.renderer.RenderBuffer; import game.renderer.texture.TextureAtlasSprite; @@ -282,4 +283,8 @@ public class EntityFX extends Entity public boolean isSendingVeloUpdates() { return false; } + + public EntityType getType() { + return EntityType.OBJECT; + } }