diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java old mode 100644 new mode 100755 index 47bc40e07a..caac43cc1e --- a/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -1,6 +1,6 @@ package org.bukkit.craftbukkit.entity; -import net.minecraft.server.Entity; +import net.minecraft.server.*; import net.minecraft.server.WorldServer; import org.bukkit.Location; import org.bukkit.World; @@ -16,6 +16,76 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { this.entity = entity; } + public static CraftEntity getEntity( CraftServer server, Entity entity) { + /** + * Order is *EXTREMELY* important -- keep it right! =D + */ + if (entity instanceof EntityLiving) { + // Players + if (entity instanceof EntityHuman) { + if (entity instanceof EntityPlayer) { return new CraftPlayer( server, (EntityPlayer) entity); } + else { return new CraftHumanEntity( server, (EntityHuman) entity); } + } + else if (entity instanceof EntityCreature) { + // Animals + if (entity instanceof EntityAnimal) { + if (entity instanceof EntityChicken) { return new CraftChicken( server, (EntityChicken) entity); } + else if (entity instanceof EntityCow) { return new CraftCow( server, (EntityCow) entity); } + else if (entity instanceof EntityPig) { return new CraftPig( server, (EntityPig) entity); } + else if (entity instanceof EntitySheep) { return new CraftSheep( server, (EntitySheep) entity); } + else { return new CraftAnimals( server, (EntityAnimal) entity); } + } + // Monsters + else if (entity instanceof EntityMonster) { + if (entity instanceof EntityZombie) { + if (entity instanceof EntityPigZombie) { return new CraftPigZombie( server, (EntityPigZombie) entity); } + else { return new CraftZombie( server, (EntityZombie) entity); } + } + else if (entity instanceof EntityCreeper) { return new CraftCreeper( server, (EntityCreeper) entity); } + else if (entity instanceof EntityGiantZombie) { return new CraftGiant( server, (EntityGiantZombie) entity); } + else if (entity instanceof EntitySkeleton) { return new CraftSkeleton( server, (EntitySkeleton) entity); } + else if (entity instanceof EntitySpider) { return new CraftSpider( server, (EntitySpider) entity); } + else if (entity instanceof EntitySlime) { return new CraftSlime( server, (EntitySlime) entity); } + + else { return new CraftMonster( server, (EntityMonster) entity); } + } + // Water Animals + else if (entity instanceof EntityWaterAnimal) { + if (entity instanceof EntitySquid) { return new CraftSquid( server, (EntitySquid) entity); } + else { return new CraftWaterMob( server, (EntityWaterAnimal) entity); } + } + else { return new CraftCreature( server, (EntityCreature) entity); } + } + // Flying + else if (entity instanceof EntityFlying) { + if (entity instanceof EntityGhast) { return new CraftGhast( server, (EntityGhast) entity); } + else { return new CraftFlying( server, (EntityFlying) entity); } + } + else { return new CraftLivingEntity(server, (EntityLiving) entity); } + } + else if (entity instanceof EntityArrow) { return new CraftArrow( server, (EntityArrow) entity); } + else if (entity instanceof EntityBoat) { return new CraftBoat( server, (EntityBoat) entity); } + else if (entity instanceof EntityEgg) { return new CraftEgg( server, (EntityEgg) entity); } + else if (entity instanceof EntityFallingSand) { return new CraftFallingSand( server, (EntityFallingSand) entity); } + else if (entity instanceof EntityFireball) { return new CraftFireball( server, (EntityFireball) entity); } + else if (entity instanceof EntityFish) { return new CraftFish( server, (EntityFish) entity); } + else if (entity instanceof EntityItem) { return new CraftItem( server, (EntityItem) entity); } + else if (entity instanceof EntityMinecart) { + EntityMinecart mc = (EntityMinecart) entity; + if (mc.d == CraftMinecart.Type.StorageMinecart.getId()) { + return new CraftStorageMinecart(server, mc); + } else if (mc.d == CraftMinecart.Type.PoweredMinecart.getId()) { + return new CraftPoweredMinecart(server, mc); + } else { + return new CraftMinecart(server, mc); + } + } + else if (entity instanceof EntityPainting) { return new CraftPainting( server, (EntityPainting) entity); } + else if (entity instanceof EntitySnowball) { return new CraftSnowball( server, (EntitySnowball) entity); } + else if (entity instanceof EntityTNTPrimed) { return new CraftTNTPrimed( server, (EntityTNTPrimed) entity); } + else throw new IllegalArgumentException( "Unknown entity" ); + } + public Location getLocation() { return new Location(getWorld(), entity.locX, entity.locY, entity.locZ, entity.yaw, entity.pitch); }