diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java index 9d933cba52..1685091987 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; @@ -1878,4 +1879,8 @@ public IChatBaseComponent getScoreboardDisplayName() { } public void i(int i) {} + + public CraftEntity makeCraftEntity(CraftServer server, Entity entity) { + throw new AssertionError("Unknown entity " + entity == null ? null : entity.getClass()); + } } diff --git a/src/main/java/net/minecraft/server/EntityBlaze.java b/src/main/java/net/minecraft/server/EntityBlaze.java index 790185c556..57d101f81e 100644 --- a/src/main/java/net/minecraft/server/EntityBlaze.java +++ b/src/main/java/net/minecraft/server/EntityBlaze.java @@ -1,5 +1,10 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftBlaze; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; + public class EntityBlaze extends EntityMonster { private float bp = 0.5F; @@ -11,6 +16,10 @@ public EntityBlaze(World world) { this.fireProof = true; this.b = 10; } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftBlaze(server, (EntityBlaze) entity); } protected void aC() { super.aC(); @@ -80,30 +89,8 @@ protected void a(Entity entity, float f) { double d2 = entity.locZ - this.locZ; if (this.attackTicks == 0) { - ++this.br; - if (this.br == 1) { - this.attackTicks = 60; - this.a(true); - } else if (this.br <= 4) { - this.attackTicks = 6; - } else { - this.attackTicks = 100; - this.br = 0; - this.a(false); - } - - if (this.br > 1) { - float f1 = MathHelper.c(f) * 0.5F; - - this.world.a((EntityHuman) null, 1009, (int) this.locX, (int) this.locY, (int) this.locZ, 0); - - for (int i = 0; i < 1; ++i) { - EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.world, this, d0 + this.random.nextGaussian() * (double) f1, d1, d2 + this.random.nextGaussian() * (double) f1); - - entitysmallfireball.locY = this.locY + (double) (this.length / 2.0F) + 0.5D; - this.world.addEntity(entitysmallfireball); - } - } + setTicks(); + shootFireballs(f, d0, d1, d2); } this.yaw = (float) (Math.atan2(d2, d0) * 180.0D / 3.1415927410125732D) - 90.0F; @@ -111,6 +98,35 @@ protected void a(Entity entity, float f) { } } + private void setTicks() { + ++this.br; + if (this.br == 1) { + this.attackTicks = 60; + aa(true); + } else if (this.br <= 4) { + this.attackTicks = 6; + } else { + this.attackTicks = 100; + this.br = 0; + aa(false); + } + } + + private void shootFireballs(float f, double d0, double d1, double d2) { + if (this.br > 1) { + float f1 = MathHelper.c(f) * 0.5F; + + this.world.a((EntityHuman) null, 1009, (int) this.locX, (int) this.locY, (int) this.locZ, 0); + + for (int i = 0; i < 1; ++i) { + EntitySmallFireball entitysmallfireball = new EntitySmallFireball(this.world, this, d0 + this.random.nextGaussian() * (double) f1, d1, d2 + this.random.nextGaussian() * (double) f1); + + entitysmallfireball.locY = this.locY + (double) (this.length / 2.0F) + 0.5D; + this.world.addEntity(entitysmallfireball); + } + } + } + protected void b(float f) {} protected Item getLoot() { @@ -141,18 +157,6 @@ public boolean bZ() { return (this.datawatcher.getByte(16) & 1) != 0; } - public void a(boolean flag) { - byte b0 = this.datawatcher.getByte(16); - - if (flag) { - b0 = (byte) (b0 | 1); - } else { - b0 &= -2; - } - - this.datawatcher.watch(16, Byte.valueOf(b0)); - } - protected boolean j_() { return true; } diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java index f65ddccba8..fbfe9e3d29 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java @@ -1,5 +1,9 @@ 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.entity.CraftMushroomCow; import org.bukkit.craftbukkit.util.CraftMagicNumbers; // CraftBukkit public class EntityChicken extends EntityAnimal { @@ -26,6 +30,11 @@ public EntityChicken(World world) { this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this)); } + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftChicken(server, (EntityChicken) entity); + } + 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..82d72fd791 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.CraftCow; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.craftbukkit.util.CraftMagicNumbers; @@ -21,6 +25,11 @@ public EntityCow(World world) { this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this)); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftCow(server, (EntityCow) entity); + } public boolean bj() { return true; diff --git a/src/main/java/net/minecraft/server/EntityCreature.java b/src/main/java/net/minecraft/server/EntityCreature.java index ef10d16454..119ef72a79 100644 --- a/src/main/java/net/minecraft/server/EntityCreature.java +++ b/src/main/java/net/minecraft/server/EntityCreature.java @@ -2,8 +2,39 @@ import java.util.UUID; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftCreature; +import org.bukkit.craftbukkit.entity.CraftAnimals; +import org.bukkit.craftbukkit.entity.CraftChicken; +import org.bukkit.craftbukkit.entity.CraftCow; +import org.bukkit.craftbukkit.entity.CraftBlaze; +import org.bukkit.craftbukkit.entity.CraftCaveSpider; +import org.bukkit.craftbukkit.entity.CraftCreeper; +import org.bukkit.craftbukkit.entity.CraftEnderman; // CraftBukkit start import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftGiant; +import org.bukkit.craftbukkit.entity.CraftHorse; +import org.bukkit.craftbukkit.entity.CraftHumanEntity; +import org.bukkit.craftbukkit.entity.CraftIronGolem; +import org.bukkit.craftbukkit.entity.CraftMonster; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftOcelot; +import org.bukkit.craftbukkit.entity.CraftPig; +import org.bukkit.craftbukkit.entity.CraftPigZombie; +import org.bukkit.craftbukkit.entity.CraftPlayer; +import org.bukkit.craftbukkit.entity.CraftSheep; +import org.bukkit.craftbukkit.entity.CraftSilverfish; +import org.bukkit.craftbukkit.entity.CraftSkeleton; +import org.bukkit.craftbukkit.entity.CraftSnowman; +import org.bukkit.craftbukkit.entity.CraftSpider; +import org.bukkit.craftbukkit.entity.CraftSquid; +import org.bukkit.craftbukkit.entity.CraftVillager; +import org.bukkit.craftbukkit.entity.CraftWaterMob; +import org.bukkit.craftbukkit.entity.CraftWitch; +import org.bukkit.craftbukkit.entity.CraftWither; +import org.bukkit.craftbukkit.entity.CraftWolf; +import org.bukkit.craftbukkit.entity.CraftZombie; import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityUnleashEvent; // CraftBukkit end @@ -21,6 +52,44 @@ public abstract class EntityCreature extends EntityInsentient { private PathfinderGoal bs = new PathfinderGoalMoveTowardsRestriction(this, 1.0D); private boolean bt; + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + + if (entity instanceof EntityAnimal) { + if (entity instanceof EntityTameableAnimal) { + return entity.makeCraftEntity(server, entity); + } + else if (entity instanceof EntitySheep || entity instanceof EntityHorse || entity instanceof EntityChicken || entity instanceof EntityCow) { return entity.makeCraftEntity(server, entity); } + + return new CraftAnimals(server, (EntityAnimal) entity); + } + // Monsters + else if (entity instanceof EntityMonster) { + //return new CraftAnimals(server, (EntityAnimal) entity); + if (entity instanceof EntityGiantZombie) { return new CraftGiant(server, (EntityGiantZombie) 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); } + } + + return entity.makeCraftEntity(server, 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 if (entity instanceof EntityGolem) { + if (entity instanceof EntitySnowman) { return new CraftSnowman(server, (EntitySnowman) entity); } + else if (entity instanceof EntityIronGolem) { return new CraftIronGolem(server, (EntityIronGolem) entity); } + } + else if (entity instanceof EntityVillager) { return new CraftVillager(server, (EntityVillager) entity); } + + return new CraftCreature(server, (EntityCreature) entity); + } + public EntityCreature(World world) { super(world); } diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java index e5d72b79a5..a8b81263a6 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -1,6 +1,10 @@ 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.entity.CraftMushroomCow; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.ExplosionPrimeEvent; // CraftBukkit end @@ -25,6 +29,10 @@ public EntityCreeper(World world) { this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget(this, EntityHuman.class, 0, true)); this.targetSelector.a(2, new PathfinderGoalHurtByTarget(this, false)); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftCreeper(server, (EntityCreeper) entity); } protected void aC() { super.aC(); diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java index 0f02e7d62e..2cb211796d 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -4,6 +4,10 @@ // 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.entity.CraftMushroomCow; import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.EntityTeleportEvent; // CraftBukkit end @@ -30,6 +34,10 @@ protected void aC() { this.getAttributeInstance(GenericAttributes.d).setValue(0.30000001192092896D); this.getAttributeInstance(GenericAttributes.e).setValue(7.0D); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftEnderman(server, (EntityEnderman) entity); } protected void c() { super.c(); diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java index 30f25c3e47..e347c631d5 100644 --- a/src/main/java/net/minecraft/server/EntityHorse.java +++ b/src/main/java/net/minecraft/server/EntityHorse.java @@ -3,6 +3,10 @@ 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; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; // CraftBukkit start import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.EntityDamageEvent; @@ -57,6 +61,11 @@ public EntityHorse(World world) { this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); this.loadChest(); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftHorse(server, (EntityHorse) entity); + } protected void c() { super.c(); diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 58b7b96422..dd7908422d 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -8,9 +8,12 @@ import net.minecraft.util.com.google.common.base.Charsets; import net.minecraft.util.com.mojang.authlib.GameProfile; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; // CraftBukkit start import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.craftbukkit.entity.CraftItem; +import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityCombustByEntityEvent; @@ -67,6 +70,11 @@ public CraftHumanEntity getBukkitEntity() { private int h; private final GameProfile i; public EntityFishingHook hookedFish; + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftPlayer(server, (EntityPlayer) entity); + } public EntityHuman(World world, GameProfile gameprofile) { super(world); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java index f90e2a31f5..7035d44bc1 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -7,6 +7,9 @@ import java.util.Random; import java.util.UUID; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftHumanEntity; // CraftBukkit start import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.EntityDamageEvent; @@ -78,6 +81,11 @@ public abstract class EntityLiving extends Entity { public int expToDrop; public int maxAirTicks = 300; // CraftBukkit end + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftHumanEntity(server, (EntityHuman) entity); + } public EntityLiving(World world) { super(world); diff --git a/src/main/java/net/minecraft/server/EntityMonster.java b/src/main/java/net/minecraft/server/EntityMonster.java index 6e02e2a5b8..1d540ae339 100644 --- a/src/main/java/net/minecraft/server/EntityMonster.java +++ b/src/main/java/net/minecraft/server/EntityMonster.java @@ -1,5 +1,10 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMonster; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; +import org.bukkit.event.entity.EntityCombustEvent; import org.bukkit.event.entity.EntityTargetEvent; // CraftBukkit public abstract class EntityMonster extends EntityCreature implements IMonster { @@ -8,6 +13,43 @@ public EntityMonster(World world) { super(world); this.b = 5; } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftMonster(server, (EntityMonster) entity); + } + + protected void worldStuff() { + float f = this.d(1.0F); + + if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.world.i(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ))) { + boolean flag = true; + ItemStack itemstack = this.getEquipment(4); + + if (itemstack != null) { + if (itemstack.g()) { + itemstack.setData(itemstack.j() + this.random.nextInt(2)); + if (itemstack.j() >= itemstack.l()) { + this.a(itemstack); + this.setEquipment(4, (ItemStack) null); + } + } + + flag = false; + } + + if (flag) { + // CraftBukkit start + EntityCombustEvent event = new EntityCombustEvent(this.getBukkitEntity(), 8); + this.world.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + this.setOnFire(event.getDuration()); + } + // CraftBukkit end + } + } + } public void e() { this.ba(); @@ -166,4 +208,17 @@ protected void aC() { protected boolean aF() { return true; } + + public void aa(boolean flag) { + byte b0 = this.datawatcher.getByte(16); + + if (flag) { + b0 = (byte) (b0 | 1); + } else { + b0 &= -2; + } + + this.datawatcher.watch(16, Byte.valueOf(b0)); + } + } diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java index b4e430611a..c126e5368d 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java @@ -1,5 +1,9 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftCow; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; import org.bukkit.event.player.PlayerShearEntityEvent; // CraftBukkit public class EntityMushroomCow extends EntityCow { @@ -8,6 +12,11 @@ public EntityMushroomCow(World world) { super(world); this.a(0.9F, 1.3F); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftMushroomCow(server, (EntityMushroomCow) entity); + } public boolean a(EntityHuman entityhuman) { ItemStack itemstack = entityhuman.inventory.getItemInHand(); diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java index 7e249ad22f..95ccfcb08f 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 @@ -8,6 +11,11 @@ public class EntityPig extends EntityAnimal { private final PathfinderGoalPassengerCarrotStick bp; + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftPig(server, (EntityPig) entity); + } public EntityPig(World world) { super(world); diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java index 38d1442224..c568d8516a 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -3,6 +3,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.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftPigZombie; // CraftBukkit start import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.entity.EntityTargetEvent; @@ -21,6 +25,11 @@ public EntityPigZombie(World world) { this.fireProof = true; } + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftPigZombie(server, (EntityPigZombie) entity); + } + protected void aC() { super.aC(); this.getAttributeInstance(bp).setValue(0.0D); diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java index 47e60923b7..724007695d 100644 --- a/src/main/java/net/minecraft/server/EntitySheep.java +++ b/src/main/java/net/minecraft/server/EntitySheep.java @@ -2,6 +2,10 @@ import java.util.Random; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftSheep; // CraftBukkit start import org.bukkit.event.entity.SheepRegrowWoolEvent; import org.bukkit.event.player.PlayerShearEntityEvent; @@ -31,6 +35,11 @@ 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 } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftSheep(server, (EntitySheep) entity); + } 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..87bfe0ed88 100644 --- a/src/main/java/net/minecraft/server/EntitySilverfish.java +++ b/src/main/java/net/minecraft/server/EntitySilverfish.java @@ -2,6 +2,10 @@ 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.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftSilverfish; import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class EntitySilverfish extends EntityMonster { @@ -23,6 +27,10 @@ protected void aC() { protected boolean g_() { return false; } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftSilverfish(server, (EntitySilverfish) entity); } protected Entity findTarget() { double d0 = 8.0D; diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java index cb25df17a5..4ff0dc0426 100644 --- a/src/main/java/net/minecraft/server/EntitySkeleton.java +++ b/src/main/java/net/minecraft/server/EntitySkeleton.java @@ -2,6 +2,10 @@ import java.util.Calendar; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftSkeleton; import org.bukkit.event.entity.EntityCombustEvent; // CraftBukkit public class EntitySkeleton extends EntityMonster implements IRangedEntity { @@ -23,6 +27,10 @@ public EntitySkeleton(World world) { this.bZ(); } } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftSkeleton(server, (EntitySkeleton) entity); } protected void aC() { super.aC(); @@ -72,35 +80,7 @@ public EnumMonsterType getMonsterType() { public void e() { if (this.world.w() && !this.world.isStatic) { - float f = this.d(1.0F); - - if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.world.i(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ))) { - boolean flag = true; - ItemStack itemstack = this.getEquipment(4); - - if (itemstack != null) { - if (itemstack.g()) { - itemstack.setData(itemstack.j() + this.random.nextInt(2)); - if (itemstack.j() >= itemstack.l()) { - this.a(itemstack); - this.setEquipment(4, (ItemStack) null); - } - } - - flag = false; - } - - if (flag) { - // CraftBukkit start - EntityCombustEvent event = new EntityCombustEvent(this.getBukkitEntity(), 8); - this.world.getServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { - this.setOnFire(event.getDuration()); - } - // CraftBukkit end - } - } + worldStuff(); } if (this.world.isStatic && this.getSkeletonType() == 1) { diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java index 097f4f5694..4d3ac0f815 100644 --- a/src/main/java/net/minecraft/server/EntityWolf.java +++ b/src/main/java/net/minecraft/server/EntityWolf.java @@ -1,5 +1,10 @@ package net.minecraft.server; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftWolf; + public class EntityWolf extends EntityTameableAnimal { private float bq; @@ -29,6 +34,11 @@ public EntityWolf(World world) { this.targetSelector.a(4, new PathfinderGoalRandomTargetNonTamed(this, EntitySheep.class, 200, false)); this.setTamed(false); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftWolf(server, (EntityWolf) entity); + } 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..93c339ea0b 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java @@ -5,8 +5,12 @@ import java.util.UUID; +import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.entity.CraftEntity; //CraftBukkit start import org.bukkit.craftbukkit.entity.CraftLivingEntity; +import org.bukkit.craftbukkit.entity.CraftMushroomCow; +import org.bukkit.craftbukkit.entity.CraftZombie; import org.bukkit.event.entity.EntityCombustByEntityEvent; import org.bukkit.event.entity.EntityCombustEvent; //CraftBukkit end @@ -39,6 +43,11 @@ public EntityZombie(World world) { this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget(this, EntityVillager.class, 0, false)); this.a(0.6F, 1.8F); } + + @Override + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftZombie(server, (EntityZombie) entity); + } protected void aC() { super.aC(); @@ -120,35 +129,7 @@ public void setVillager(boolean flag) { public void e() { if (this.world.w() && !this.world.isStatic && !this.isBaby()) { - float f = this.d(1.0F); - - if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.world.i(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ))) { - boolean flag = true; - ItemStack itemstack = this.getEquipment(4); - - if (itemstack != null) { - if (itemstack.g()) { - itemstack.setData(itemstack.j() + this.random.nextInt(2)); - if (itemstack.j() >= itemstack.l()) { - this.a(itemstack); - this.setEquipment(4, (ItemStack) null); - } - } - - flag = false; - } - - if (flag) { - // CraftBukkit start - EntityCombustEvent event = new EntityCombustEvent(this.getBukkitEntity(), 8); - this.world.getServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { - this.setOnFire(event.getDuration()); - } - // CraftBukkit end - } - } + worldStuff(); } if (this.al() && this.getGoalTarget() != null && this.vehicle instanceof EntityChicken) { @@ -158,6 +139,7 @@ public void e() { super.e(); } + public boolean damageEntity(DamageSource damagesource, float f) { if (!super.damageEntity(damagesource, f)) { return false; diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index ca6b33c949..be2bca23e8 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -1583,12 +1583,7 @@ public void a(PacketPlayInUpdateSign packetplayinupdatesign) { this.server.getPluginManager().callEvent(event); if (!event.isCancelled()) { - for (int l = 0; l < 4; ++l) { - tileentitysign1.lines[l] = event.getLine(l); - if(tileentitysign1.lines[l] == null) { - tileentitysign1.lines[l] = ""; - } - } + tileentitysign1.lines = org.bukkit.craftbukkit.block.CraftSign.sanitizeLines(event.getLines()); tileentitysign1.isEditable = false; } // System.arraycopy(packetplayinupdatesign.f(), 0, tileentitysign1.lines, 0, 4); diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java index c504dbe641..552919c4c5 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java @@ -30,17 +30,7 @@ public void a(NBTTagCompound nbttagcompound) { } public Packet getUpdatePacket() { - String[] astring = new String[4]; - - // CraftBukkit start - Limit sign text to 15 chars per line - for (int i = 0; i < 4; ++i) { - astring[i] = this.lines[i]; - - if (this.lines[i].length() > 15) { - astring[i] = this.lines[i].substring(0, 15); - } - } - // CraftBukkit end + String[] astring = sanitizeLines(this.lines); // CraftBukkit - call sign line sanitizer to limit line length return new PacketPlayOutUpdateSign(this.x, this.y, this.z, astring); } @@ -56,4 +46,18 @@ public void a(EntityHuman entityhuman) { public EntityHuman b() { return this.k; } + + // CraftBukkit start - central method to limit sign text to 15 chars per line + public static String[] sanitizeLines(String[] lines) { + String[] astring = new String[4]; + for (int i = 0; i < 4; ++i) { + astring[i] = lines[i]; + + if (lines[i].length() > 15) { + astring[i] = lines[i].substring(0, 15); + } + } + return astring; + } + // CraftBukkit end } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftArt.java b/src/main/java/org/bukkit/craftbukkit/CraftArt.java index f617e9e2ea..8fb5c82ede 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftArt.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftArt.java @@ -3,72 +3,54 @@ import net.minecraft.server.EnumArt; import org.bukkit.Art; +import java.util.EnumMap; +import java.util.Map; + // Safety class, will break if either side changes public class CraftArt { - + static Map enumMap = new EnumMap(Art.class); + + static { + enumMap.put(Art.KEBAB, EnumArt.KEBAB); + enumMap.put(Art.AZTEC, EnumArt.AZTEC); + enumMap.put(Art.ALBAN, EnumArt.ALBAN); + enumMap.put(Art.AZTEC2, EnumArt.AZTEC2); + enumMap.put(Art.BOMB, EnumArt.BOMB); + enumMap.put(Art.PLANT, EnumArt.PLANT); + enumMap.put(Art.WASTELAND, EnumArt.WASTELAND); + enumMap.put(Art.POOL, EnumArt.POOL); + enumMap.put(Art.COURBET, EnumArt.COURBET); + enumMap.put(Art.SEA, EnumArt.SEA); + enumMap.put(Art.SUNSET, EnumArt.SUNSET); + enumMap.put(Art.CREEBET, EnumArt.CREEBET); + enumMap.put(Art.WANDERER, EnumArt.WANDERER); + enumMap.put(Art.GRAHAM, EnumArt.GRAHAM); + enumMap.put(Art.MATCH, EnumArt.MATCH); + enumMap.put(Art.BUST, EnumArt.BUST); + enumMap.put(Art.STAGE, EnumArt.STAGE); + enumMap.put(Art.VOID, EnumArt.VOID); + enumMap.put(Art.SKULL_AND_ROSES, EnumArt.SKULL_AND_ROSES); + enumMap.put(Art.FIGHTERS, EnumArt.FIGHTERS); + enumMap.put(Art.POINTER, EnumArt.POINTER); + enumMap.put(Art.PIGSCENE, EnumArt.PIGSCENE); + enumMap.put(Art.BURNINGSKULL, EnumArt.BURNINGSKULL); + enumMap.put(Art.SKELETON, EnumArt.SKELETON); + enumMap.put(Art.DONKEYKONG, EnumArt.DONKEYKONG); + enumMap.put(Art.WITHER, EnumArt.WITHER); + } + public static Art NotchToBukkit(EnumArt art) { - switch (art) { - case KEBAB: return Art.KEBAB; - case AZTEC: return Art.AZTEC; - case ALBAN: return Art.ALBAN; - case AZTEC2: return Art.AZTEC2; - case BOMB: return Art.BOMB; - case PLANT: return Art.PLANT; - case WASTELAND: return Art.WASTELAND; - case POOL: return Art.POOL; - case COURBET: return Art.COURBET; - case SEA: return Art.SEA; - case SUNSET: return Art.SUNSET; - case CREEBET: return Art.CREEBET; - case WANDERER: return Art.WANDERER; - case GRAHAM: return Art.GRAHAM; - case MATCH: return Art.MATCH; - case BUST: return Art.BUST; - case STAGE: return Art.STAGE; - case VOID: return Art.VOID; - case SKULL_AND_ROSES: return Art.SKULL_AND_ROSES; - case FIGHTERS: return Art.FIGHTERS; - case POINTER: return Art.POINTER; - case PIGSCENE: return Art.PIGSCENE; - case BURNINGSKULL: return Art.BURNINGSKULL; - case SKELETON: return Art.SKELETON; - case DONKEYKONG: return Art.DONKEYKONG; - case WITHER: return Art.WITHER; - default: - throw new AssertionError(art); + + for(Art s : enumMap.keySet()){ + if(enumMap.get(s).equals(art)) return s; } + throw new AssertionError(art); } public static EnumArt BukkitToNotch(Art art) { - switch (art) { - case KEBAB: return EnumArt.KEBAB; - case AZTEC: return EnumArt.AZTEC; - case ALBAN: return EnumArt.ALBAN; - case AZTEC2: return EnumArt.AZTEC2; - case BOMB: return EnumArt.BOMB; - case PLANT: return EnumArt.PLANT; - case WASTELAND: return EnumArt.WASTELAND; - case POOL: return EnumArt.POOL; - case COURBET: return EnumArt.COURBET; - case SEA: return EnumArt.SEA; - case SUNSET: return EnumArt.SUNSET; - case CREEBET: return EnumArt.CREEBET; - case WANDERER: return EnumArt.WANDERER; - case GRAHAM: return EnumArt.GRAHAM; - case MATCH: return EnumArt.MATCH; - case BUST: return EnumArt.BUST; - case STAGE: return EnumArt.STAGE; - case VOID: return EnumArt.VOID; - case SKULL_AND_ROSES: return EnumArt.SKULL_AND_ROSES; - case FIGHTERS: return EnumArt.FIGHTERS; - case POINTER: return EnumArt.POINTER; - case PIGSCENE: return EnumArt.PIGSCENE; - case BURNINGSKULL: return EnumArt.BURNINGSKULL; - case SKELETON: return EnumArt.SKELETON; - case DONKEYKONG: return EnumArt.DONKEYKONG; - case WITHER: return EnumArt.WITHER; - default: - throw new AssertionError(art); - } + + if(enumMap.get(art)!=null) return enumMap.get(art); + + throw new AssertionError(art); } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index a4ede348ff..5964c2f099 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -4,12 +4,15 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.Hashtable; import java.util.List; +import java.util.Map; import java.util.Random; import java.util.Set; import java.util.UUID; import net.minecraft.server.*; +import net.minecraft.server.BlockSapling.TreeGenerator; import org.apache.commons.lang.Validate; import org.bukkit.BlockChangeDelegate; @@ -353,58 +356,34 @@ public LightningStrike strikeLightningEffect(Location loc) { public boolean generateTree(Location loc, TreeType type) { return generateTree(loc, type, world); } + + static Map genType = new Hashtable(); + + static{ + genType.put(TreeType.BIG_TREE,new WorldGenBigTree(true)); + genType.put(TreeType.BIRCH,new WorldGenForest(true, false)); + genType.put(TreeType.REDWOOD,new WorldGenTaiga2(true)); + genType.put(TreeType.TALL_REDWOOD,new WorldGenTaiga1()); + genType.put(TreeType.JUNGLE,new WorldGenJungleTree(true, 10, 20, 3, 3)); + genType.put(TreeType.SMALL_JUNGLE,new WorldGenTrees(true, 4 + rand.nextInt(7), 3, 3, false)); + genType.put(TreeType.JUNGLE_BUSH,new WorldGenGroundBush(3, 0)); + genType.put(TreeType.RED_MUSHROOM,new WorldGenHugeMushroom(1)); + genType.put(TreeType.BROWN_MUSHROOM,new WorldGenHugeMushroom(0)); + genType.put(TreeType.SWAMP,new WorldGenSwampTree()); + genType.put(TreeType.ACACIA,new WorldGenAcaciaTree(true)); + genType.put(TreeType.DARK_OAK,new WorldGenForestTree(true)); + genType.put(TreeType.MEGA_REDWOOD,new WorldGenMegaTree(true, rand.nextBoolean())); + genType.put(TreeType.TALL_REDWOOD,new WorldGenForest(true, true)); + genType.put(TreeType.TREE,null); + } public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) { BlockSapling.TreeGenerator gen; - switch (type) { - case BIG_TREE: - gen = new WorldGenBigTree(true); - break; - case BIRCH: - gen = new WorldGenForest(true, false); - break; - case REDWOOD: - gen = new WorldGenTaiga2(true); - break; - case TALL_REDWOOD: - gen = new WorldGenTaiga1(); - break; - case JUNGLE: - gen = new WorldGenJungleTree(true, 10, 20, 3, 3); // Magic values as in BlockSapling - break; - case SMALL_JUNGLE: - gen = new WorldGenTrees(true, 4 + rand.nextInt(7), 3, 3, false); - break; - case JUNGLE_BUSH: - gen = new WorldGenGroundBush(3, 0); - break; - case RED_MUSHROOM: - gen = new WorldGenHugeMushroom(1); - break; - case BROWN_MUSHROOM: - gen = new WorldGenHugeMushroom(0); - break; - case SWAMP: - gen = new WorldGenSwampTree(); - break; - case ACACIA: - gen = new WorldGenAcaciaTree(true); - break; - case DARK_OAK: - gen = new WorldGenForestTree(true); - break; - case MEGA_REDWOOD: - gen = new WorldGenMegaTree(true, rand.nextBoolean()); - break; - case TALL_BIRCH: - gen = new WorldGenForest(true, true); - break; - case TREE: - default: + if(genType.get(type)!=null){ + gen = (TreeGenerator) genType.get(type); + }else{ gen = new WorldGenTrees(true); - break; } - return gen.generate(new CraftBlockChangeDelegate(delegate), rand, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); } diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java index 16471009fa..77717d5b2b 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftSign.java @@ -35,16 +35,24 @@ public boolean update(boolean force, boolean applyPhysics) { boolean result = super.update(force, applyPhysics); if (result) { - for(int i = 0; i < 4; i++) { - if(lines[i] != null) { - sign.lines[i] = lines[i]; - } else { - sign.lines[i] = ""; - } - } + sign.lines = sanitizeLines(lines); sign.update(); } return result; } + + public static String[] sanitizeLines(String[] lines) { + String[] astring = new String[4]; + + for (int i = 0; i < 4; i++) { + if (i < lines.length && lines[i] != null) { + astring[i] = lines[i]; + } else { + astring[i] = ""; + } + } + + return TileEntitySign.sanitizeLines(astring); + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index fe0f2006e5..9af809cbe7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -38,54 +38,7 @@ public static CraftEntity getEntity(CraftServer server, Entity 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) { - if (entity instanceof EntityMushroomCow) { return new CraftMushroomCow(server, (EntityMushroomCow) entity); } - else { return new CraftCow(server, (EntityCow) entity); } - } - 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); } - } - - 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 if (entity instanceof EntityGolem) { - if (entity instanceof EntitySnowman) { return new CraftSnowman(server, (EntitySnowman) entity); } - else if (entity instanceof EntityIronGolem) { return new CraftIronGolem(server, (EntityIronGolem) entity); } - } - else if (entity instanceof EntityVillager) { return new CraftVillager(server, (EntityVillager) entity); } - else { return new CraftCreature(server, (EntityCreature) entity); } + entity.makeCraftEntity(server, entity); } // Slimes are a special (and broken) case else if (entity instanceof EntitySlime) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java index 72dedbc8f4..2e6b330f0d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java @@ -20,4 +20,6 @@ public EntityMonster getHandle() { public String toString() { return "CraftMonster"; } + + } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java index 37cc315c6b..e2c7b8ab2c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java @@ -1,5 +1,7 @@ package org.bukkit.craftbukkit.entity; +import net.minecraft.server.Entity; +import net.minecraft.server.EntityMushroomCow; import net.minecraft.server.EntityOcelot; import org.apache.commons.lang.Validate; import org.bukkit.craftbukkit.CraftServer; @@ -11,6 +13,10 @@ public CraftOcelot(CraftServer server, EntityOcelot wolf) { super(server, wolf); } + public CraftEntity makeCraftEntity(CraftServer server, Entity entity){ + return new CraftOcelot(server, (EntityOcelot) entity); + } + @Override public EntityOcelot getHandle() { return (EntityOcelot) entity; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java index 4c19370980..17c16dc692 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -31,6 +31,7 @@ import org.bukkit.conversations.Conversation; import org.bukkit.conversations.ConversationAbandonedEvent; import org.bukkit.conversations.ManuallyAbandonedConversationCanceller; +import org.bukkit.craftbukkit.block.CraftSign; import org.bukkit.craftbukkit.conversations.ConversationTracker; import org.bukkit.craftbukkit.CraftEffect; import org.bukkit.craftbukkit.CraftOfflinePlayer; @@ -368,6 +369,27 @@ public void sendBlockChange(Location loc, int material, byte data) { getHandle().playerConnection.sendPacket(packet); } + @Override + public void sendSignChange(Location loc, String[] lines) { + if (getHandle().playerConnection == null) { + return; + } + + if (lines == null) { + lines = new String[4]; + } + + Validate.notNull(loc, "Location can not be null"); + if (lines.length < 4) { + throw new IllegalArgumentException("Must have at least 4 lines"); + } + + // Limit to 15 chars per line and set null lines to blank + String[] astring = CraftSign.sanitizeLines(lines); + + getHandle().playerConnection.sendPacket(new PacketPlayOutUpdateSign(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), astring)); + } + @Override public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) { if (getHandle().playerConnection == null) return false; diff --git a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java index b59d142a3f..e370773867 100644 --- a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java +++ b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionEffectType.java @@ -1,12 +1,42 @@ package org.bukkit.craftbukkit.potion; +import java.util.Hashtable; +import java.util.Map; + import net.minecraft.server.MobEffectList; import org.bukkit.potion.PotionEffectType; public class CraftPotionEffectType extends PotionEffectType { private final MobEffectList handle; - + static Map effectType = new Hashtable(); + + static { + effectType.put(1, "SPEED"); + effectType.put(2, "SLOW"); + effectType.put(3, "FAST_DIGGING"); + effectType.put(4, "SLOW_DIGGING"); + effectType.put(5, "INCREASE_DAMAGE"); + effectType.put(6, "HEAL"); + effectType.put(7, "HARM"); + effectType.put(8, "JUMP"); + effectType.put(9, "CONFUSION"); + effectType.put(10, "REGENERATION"); + effectType.put(11, "DAMAGE_RESISTANCE"); + effectType.put(12, "FIRE_RESISTANCE"); + effectType.put(13, "WATER_BREATHING"); + effectType.put(14, "INVISIBILITY"); + effectType.put(15, "BLINDNESS"); + effectType.put(16, "NIGHT_VISION"); + effectType.put(17, "HUNGER"); + effectType.put(18, "WEAKNESS"); + effectType.put(19, "POISON"); + effectType.put(20, "WITHER"); + effectType.put(21, "HEALTH_BOOST"); + effectType.put(22, "ABSORPTION"); + effectType.put(23, "SATURATION"); + } + public CraftPotionEffectType(MobEffectList handle) { super(handle.id); this.handle = handle; @@ -23,56 +53,8 @@ public MobEffectList getHandle() { @Override public String getName() { - switch (handle.id) { - case 1: - return "SPEED"; - case 2: - return "SLOW"; - case 3: - return "FAST_DIGGING"; - case 4: - return "SLOW_DIGGING"; - case 5: - return "INCREASE_DAMAGE"; - case 6: - return "HEAL"; - case 7: - return "HARM"; - case 8: - return "JUMP"; - case 9: - return "CONFUSION"; - case 10: - return "REGENERATION"; - case 11: - return "DAMAGE_RESISTANCE"; - case 12: - return "FIRE_RESISTANCE"; - case 13: - return "WATER_BREATHING"; - case 14: - return "INVISIBILITY"; - case 15: - return "BLINDNESS"; - case 16: - return "NIGHT_VISION"; - case 17: - return "HUNGER"; - case 18: - return "WEAKNESS"; - case 19: - return "POISON"; - case 20: - return "WITHER"; - case 21: - return "HEALTH_BOOST"; - case 22: - return "ABSORPTION"; - case 23: - return "SATURATION"; - default: + if(effectType.get(handle.id)!=null) return effectType.get(handle.id); return "UNKNOWN_EFFECT_TYPE_" + handle.id; - } } @Override