diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index 9d933cba52..95a04aa929 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -19,6 +19,7 @@ import org.bukkit.event.vehicle.VehicleBlockCollisionEvent; import org.bukkit.event.vehicle.VehicleEnterEvent; import org.bukkit.event.vehicle.VehicleExitEvent; +import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.entity.CraftPlayer; @@ -115,6 +116,32 @@ static boolean isLevelAtLeast(NBTTagCompound tag, int level) { public int getId() { return this.id; } + + public CraftEntity getEntity(CraftServer server) { + return this.getEntity(server); + } + + public static boolean isEntityAnimal(Entity entity) { + if (entity instanceof EntityChicken) { + return true; + } else if (entity instanceof EntityCow) { + return true; + } else if (entity instanceof EntityMushroomCow) { + return true; + } else if (entity instanceof EntityPig) { + return true; + } else if (entity instanceof EntityWolf) { + return true; + } else if (entity instanceof EntityOcelot) { + return true; + } else if (entity instanceof EntitySheep) { + return true; + } else if (entity instanceof EntityHorse) { + return true; + } else { + return false; + } + } public void d(int i) { this.id = i; diff --git a/src/main/java/net/minecraft/server/EntityBlaze.java b/src/main/java/net/minecraft/server/EntityBlaze.java index 790185c556..4627d29d1e 100644 --- a/src/main/java/net/minecraft/server/EntityBlaze.java +++ b/src/main/java/net/minecraft/server/EntityBlaze.java @@ -1,5 +1,9 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftBlaze; +import org.bukkit.craftbukkit.entity.CraftEntity; + public class EntityBlaze extends EntityMonster { private float bp = 0.5F; @@ -12,6 +16,10 @@ public EntityBlaze(World world) { this.b = 10; } + public CraftEntity getEntity(CraftServer server) { + return new CraftBlaze(server, (EntityBlaze) this); + } + protected void aC() { super.aC(); this.getAttributeInstance(GenericAttributes.e).setValue(6.0D); diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java index f65ddccba8..fddd23fc40 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java @@ -1,5 +1,8 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftChicken; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.util.CraftMagicNumbers; // CraftBukkit public class EntityChicken extends EntityAnimal { @@ -25,6 +28,10 @@ public EntityChicken(World world) { this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this)); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftChicken(server, (EntityChicken) this); + } public boolean bj() { return true; diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java index 43c1243b15..cb7c1e2a89 100644 --- a/src/main/java/net/minecraft/server/EntityCow.java +++ b/src/main/java/net/minecraft/server/EntityCow.java @@ -1,6 +1,10 @@ package net.minecraft.server; // CraftBukkit start +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftChicken; +import org.bukkit.craftbukkit.entity.CraftCow; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.craftbukkit.util.CraftMagicNumbers; @@ -21,6 +25,10 @@ public EntityCow(World world) { this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this)); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftCow(server, (EntityCow) this); + } public boolean bj() { return true; diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java index e5d72b79a5..ae2ab8a472 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -1,6 +1,9 @@ package net.minecraft.server; // CraftBukkit start +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftCreeper; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.ExplosionPrimeEvent; // CraftBukkit end @@ -26,6 +29,10 @@ public EntityCreeper(World world) { this.targetSelector.a(2, new PathfinderGoalHurtByTarget(this, false)); } + public CraftEntity getEntity(CraftServer server) { + return new CraftCreeper(server, (EntityCreeper) this); + } + protected void aC() { super.aC(); this.getAttributeInstance(GenericAttributes.d).setValue(0.25D); diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java index 0f02e7d62e..8acc591938 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -4,6 +4,9 @@ // CraftBukkit start import org.bukkit.Location; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEnderman; +import org.bukkit.craftbukkit.entity.CraftEntity; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.EntityTeleportEvent; // CraftBukkit end @@ -23,6 +26,10 @@ public EntityEnderman(World world) { this.a(0.6F, 2.9F); this.W = 1.0F; } + + public CraftEntity getEntity(CraftServer server) { + return new CraftEnderman(server, (EntityEnderman) this); + } protected void aC() { super.aC(); diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java index 30f25c3e47..e4c0c7b276 100644 --- a/src/main/java/net/minecraft/server/EntityHorse.java +++ b/src/main/java/net/minecraft/server/EntityHorse.java @@ -3,6 +3,9 @@ import java.util.Iterator; import java.util.List; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftHorse; // CraftBukkit start import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.EntityDamageEvent; @@ -57,6 +60,10 @@ public EntityHorse(World world) { this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); this.loadChest(); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftHorse(server, (EntityHorse) this); + } protected void c() { super.c(); diff --git a/src/main/java/net/minecraft/server/EntityMonster.java b/src/main/java/net/minecraft/server/EntityMonster.java index 6e02e2a5b8..acc54e3abf 100644 --- a/src/main/java/net/minecraft/server/EntityMonster.java +++ b/src/main/java/net/minecraft/server/EntityMonster.java @@ -3,6 +3,32 @@ import org.bukkit.event.entity.EntityTargetEvent; // CraftBukkit public abstract class EntityMonster extends EntityCreature implements IMonster { + + public static boolean isMonster(Entity entity) { + if (entity instanceof EntityZombie) { + return true; + } else if (entity instanceof EntityPigZombie) { + return true; + } else if (entity instanceof EntityCreeper) { + return true; + } else if (entity instanceof EntityEnderman) { + return true; + } else if (entity instanceof EntitySilverfish) { + return true; + } else if (entity instanceof EntitySkeleton) { + return true; + } else if (entity instanceof EntityBlaze) { + return true; + } else if (entity instanceof EntityWitch) { + return true; + }else if (entity instanceof EntityWither) { + return true; + } else if (entity instanceof EntitySpider) { + return true; + } else { + return false; + } + } public EntityMonster(World world) { super(world); diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java index b4e430611a..fabeae1bb7 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java @@ -1,5 +1,8 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; import org.bukkit.event.player.PlayerShearEntityEvent; // CraftBukkit public class EntityMushroomCow extends EntityCow { @@ -57,6 +60,10 @@ public boolean a(EntityHuman entityhuman) { return super.a(entityhuman); } } + + public CraftEntity getEntity(CraftServer server) { + return new CraftMushroomCow(server, (EntityMushroomCow) this); + } public EntityMushroomCow c(EntityAgeable entityageable) { return new EntityMushroomCow(this.world); diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java index e75de9c06e..026bd40783 100644 --- a/src/main/java/net/minecraft/server/EntityOcelot.java +++ b/src/main/java/net/minecraft/server/EntityOcelot.java @@ -1,5 +1,9 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftOcelot; + public class EntityOcelot extends EntityTameableAnimal { private PathfinderGoalTempt bq; @@ -21,6 +25,10 @@ public EntityOcelot(World world) { this.goalSelector.a(11, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 10.0F)); this.targetSelector.a(1, new PathfinderGoalRandomTargetNonTamed(this, EntityChicken.class, 750, false)); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftOcelot(server, (EntityOcelot) this); + } protected void c() { super.c(); diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java index 7e249ad22f..119e49124e 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -1,6 +1,9 @@ package net.minecraft.server; // CraftBukkit start +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftPig; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.craftbukkit.util.CraftMagicNumbers; // CraftBukkit end @@ -24,6 +27,10 @@ public EntityPig(World world) { this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftPig(server, (EntityPig) this); + } public boolean bj() { return true; diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java index 38d1442224..8df196929a 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -3,6 +3,9 @@ import java.util.List; import java.util.UUID; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftPigZombie; // CraftBukkit start import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.entity.EntityTargetEvent; @@ -20,6 +23,10 @@ public EntityPigZombie(World world) { super(world); this.fireProof = true; } + + public CraftEntity getEntity(CraftServer server) { + return new CraftPigZombie(server, (EntityPigZombie) this); + } protected void aC() { super.aC(); diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java index 47e60923b7..9c1cda3daf 100644 --- a/src/main/java/net/minecraft/server/EntitySheep.java +++ b/src/main/java/net/minecraft/server/EntitySheep.java @@ -2,6 +2,9 @@ import java.util.Random; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftSheep; // CraftBukkit start import org.bukkit.event.entity.SheepRegrowWoolEvent; import org.bukkit.event.player.PlayerShearEntityEvent; @@ -31,6 +34,10 @@ public EntitySheep(World world) { this.bq.setItem(1, new ItemStack(Items.INK_SACK, 1, 0)); this.bq.resultInventory = new InventoryCraftResult(); // CraftBukkit - add result slot for event } + + public CraftEntity getEntity(CraftServer server) { + return new CraftSheep(server, (EntitySheep) this); + } protected boolean bj() { return true; diff --git a/src/main/java/net/minecraft/server/EntitySilverfish.java b/src/main/java/net/minecraft/server/EntitySilverfish.java index 821e7a35c8..92c97baf0b 100644 --- a/src/main/java/net/minecraft/server/EntitySilverfish.java +++ b/src/main/java/net/minecraft/server/EntitySilverfish.java @@ -2,6 +2,9 @@ import net.minecraft.util.org.apache.commons.lang3.tuple.ImmutablePair; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftSilverfish; import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class EntitySilverfish extends EntityMonster { @@ -19,6 +22,10 @@ protected void aC() { this.getAttributeInstance(GenericAttributes.d).setValue(0.6000000238418579D); this.getAttributeInstance(GenericAttributes.e).setValue(1.0D); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftSilverfish(server, (EntitySilverfish) this); + } protected boolean g_() { return false; diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java index cb25df17a5..14ea4f7590 100644 --- a/src/main/java/net/minecraft/server/EntitySkeleton.java +++ b/src/main/java/net/minecraft/server/EntitySkeleton.java @@ -2,6 +2,9 @@ import java.util.Calendar; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftSkeleton; import org.bukkit.event.entity.EntityCombustEvent; // CraftBukkit public class EntitySkeleton extends EntityMonster implements IRangedEntity { @@ -23,6 +26,10 @@ public EntitySkeleton(World world) { this.bZ(); } } + + public CraftEntity getEntity(CraftServer server) { + return new CraftSkeleton(server, (EntitySkeleton) this); + } protected void aC() { super.aC(); diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java index b151e737fd..e59c3d7069 100644 --- a/src/main/java/net/minecraft/server/EntitySpider.java +++ b/src/main/java/net/minecraft/server/EntitySpider.java @@ -1,6 +1,9 @@ package net.minecraft.server; // CraftBukkit start +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftSpider; import org.bukkit.craftbukkit.util.CraftMagicNumbers; import org.bukkit.event.entity.EntityTargetEvent; // CraftBukkti end @@ -12,6 +15,10 @@ public EntitySpider(World world) { this.a(1.4F, 0.9F); } + public CraftEntity getEntity(CraftServer server) { + return new CraftSpider(server, (EntitySpider) this); + } + protected void c() { super.c(); this.datawatcher.a(16, new Byte((byte) 0)); diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java index 0f5126a421..d6b5ad4ca8 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java @@ -4,6 +4,10 @@ import java.util.List; import java.util.UUID; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftWitch; + public class EntityWitch extends EntityMonster implements IRangedEntity { private static final UUID bp = UUID.fromString("5CD17E52-A79A-43D3-A529-90FDE04B181E"); @@ -22,6 +26,10 @@ public EntityWitch(World world) { this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, 0, true)); } + public CraftEntity getEntity(CraftServer server) { + return new CraftWitch(server, (EntityWitch) this); + } + protected void c() { super.c(); this.getDataWatcher().a(21, Byte.valueOf((byte) 0)); diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java index 99526b99b1..14c5e2bfa8 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java @@ -3,6 +3,9 @@ import java.util.Iterator; import java.util.List; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftWither; // CraftBukkit start import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.ExplosionPrimeEvent; @@ -34,6 +37,10 @@ public EntityWither(World world) { this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityInsentient.class, 0, false, false, bw)); this.b = 50; } + + public CraftEntity getEntity(CraftServer server) { + return new CraftWither(server, (EntityWither) this); + } protected void c() { super.c(); diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java index 097f4f5694..b4ce76bd31 100644 --- a/src/main/java/net/minecraft/server/EntityWolf.java +++ b/src/main/java/net/minecraft/server/EntityWolf.java @@ -1,5 +1,9 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftWolf; + public class EntityWolf extends EntityTameableAnimal { private float bq; @@ -29,6 +33,10 @@ public EntityWolf(World world) { this.targetSelector.a(4, new PathfinderGoalRandomTargetNonTamed(this, EntitySheep.class, 200, false)); this.setTamed(false); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftWolf(server, (EntityWolf) this); + } protected void aC() { super.aC(); diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java index b751d01c2a..2d1a70799a 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java @@ -5,6 +5,9 @@ import java.util.UUID; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftZombie; //CraftBukkit start import org.bukkit.craftbukkit.entity.CraftLivingEntity; import org.bukkit.event.entity.EntityCombustByEntityEvent; @@ -39,6 +42,10 @@ public EntityZombie(World world) { this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityVillager.class, 0, false)); this.a(0.6F, 1.8F); } + + public CraftEntity getEntity(CraftServer server) { + return new CraftZombie(server, (EntityZombie) this); + } protected void aC() { super.aC(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java index 4b9b078305..9ef2ceeec7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java @@ -1,6 +1,9 @@ package org.bukkit.craftbukkit.entity; +import net.minecraft.server.Entity; import net.minecraft.server.EntityAnimal; +import net.minecraft.server.EntityChicken; + import org.bukkit.craftbukkit.CraftServer; import org.bukkit.entity.Animals; @@ -9,6 +12,10 @@ public class CraftAnimals extends CraftAgeable implements Animals { public CraftAnimals(CraftServer server, EntityAnimal entity) { super(server, entity); } + + public static CraftEntity getEntity(Entity entity, CraftServer server) { + return new CraftAnimals(server, (EntityAnimal) entity); + } @Override public EntityAnimal getHandle() { @@ -19,4 +26,4 @@ public EntityAnimal getHandle() { public String toString() { return "CraftAnimals"; } -} +} \ No newline at end of file diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index fe0f2006e5..65a454f490 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -40,40 +40,25 @@ public static CraftEntity getEntity(CraftServer server, Entity 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) { - if (entity instanceof EntityMushroomCow) { return new CraftMushroomCow(server, (EntityMushroomCow) entity); } - else { return new CraftCow(server, (EntityCow) entity); } + boolean isAnimal = Entity.isEntityAnimal(entity); + if (isAnimal) { + return entity.getEntity(server); + } else { + return CraftAnimals.getEntity(entity, server); } - else if (entity instanceof EntityPig) { return new CraftPig(server, (EntityPig) entity); } - else if (entity instanceof EntityTameableAnimal) { - if (entity instanceof EntityWolf) { return new CraftWolf(server, (EntityWolf) entity); } - else if (entity instanceof EntityOcelot) { return new CraftOcelot(server, (EntityOcelot) entity); } - } - else if (entity instanceof EntitySheep) { return new CraftSheep(server, (EntitySheep) entity); } - else if (entity instanceof EntityHorse) { return new CraftHorse(server, (EntityHorse) 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 EntityEnderman) { return new CraftEnderman(server, (EntityEnderman) entity); } - else if (entity instanceof EntitySilverfish) { return new CraftSilverfish(server, (EntitySilverfish) 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 EntityBlaze) { return new CraftBlaze(server, (EntityBlaze) entity); } - else if (entity instanceof EntityWitch) { return new CraftWitch(server, (EntityWitch) entity); } - else if (entity instanceof EntityWither) { return new CraftWither(server, (EntityWither) entity); } - else if (entity instanceof EntitySpider) { - if (entity instanceof EntityCaveSpider) { return new CraftCaveSpider(server, (EntityCaveSpider) entity); } - else { return new CraftSpider(server, (EntitySpider) entity); } + boolean isMonster = net.minecraft.server.EntityMonster.isMonster(entity); + if (entity instanceof EntityPigZombie) { + return new CraftZombie(server, (EntityZombie) entity); + } else if (entity instanceof EntityCaveSpider) { + return new CraftZombie(server, (EntityZombie) entity); + } else if (isMonster) { + return entity.getEntity(server); + } else { + return new CraftMonster(server, (EntityMonster) entity); } - - else { return new CraftMonster(server, (EntityMonster) entity); } } // Water Animals else if (entity instanceof EntityWaterAnimal) {