--- ../src-base/minecraft/net/minecraft/entity/monster/EntityEnderman.java +++ ../src-work/minecraft/net/minecraft/entity/monster/EntityEnderman.java @@ -24,6 +24,12 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.living.EnderTeleportEvent; +// CraftBukkit start +import org.bukkit.Location; +import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.event.entity.EntityTeleportEvent; +// CraftBukkit end + public class EntityEnderman extends EntityMob { private static final UUID attackingSpeedBoostModifierUUID = UUID.fromString("020E0DFB-87AE-4653-9556-831010E291A0"); @@ -161,9 +167,15 @@ if (EntityEnderman.getCarriable(block)) { - this.func_146081_a(block); - this.setCarryingData(this.worldObj.getBlockMetadata(k, i, j)); - this.worldObj.setBlock(k, i, j, Blocks.air); + // CraftBukkit start - Pickup event + if (this.worldObj.getWorld() == null || !CraftEventFactory.callEntityChangeBlockEvent(this, this.worldObj.getWorld().getBlockAt(i, j, k), org.bukkit.Material.AIR).isCancelled()) // Cauldron + { + this.func_146081_a(block); + this.setCarryingData(this.worldObj.getBlockMetadata(i, j, k)); + this.worldObj.setBlock(i, j, k, Blocks.air); + } + + // CraftBukkit end } } } @@ -177,8 +189,14 @@ if (block.getMaterial() == Material.air && block1.getMaterial() != Material.air && block1.renderAsNormalBlock()) { - this.worldObj.setBlock(k, i, j, this.func_146080_bZ(), this.getCarryingData(), 3); - this.func_146081_a(Blocks.air); + // CraftBukkit start - Place event + if (!CraftEventFactory.callEntityChangeBlockEvent(this, i, j, k, this.func_146080_bZ(), this.getCarryingData()).isCancelled()) + { + this.worldObj.setBlock(i, j, k, this.func_146080_bZ(), this.getCarryingData(), 3); + this.func_146081_a(Blocks.air); + } + + // CraftBukkit end } } } @@ -306,8 +324,19 @@ if (flag1) { - this.setPosition(this.posX, this.posY, this.posZ); + // CraftBukkit start - Teleport event + EntityTeleportEvent teleport = new EntityTeleportEvent(this.getBukkitEntity(), new Location(this.worldObj.getWorld(), d3, d4, d5), new Location(this.worldObj.getWorld(), this.posX, this.posY, this.posZ)); + this.worldObj.getServer().getPluginManager().callEvent(teleport); + if (teleport.isCancelled()) + { + return false; + } + + Location to = teleport.getTo(); + this.setPosition(to.getX(), to.getY(), to.getZ()); + // CraftBukkit end + if (this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox)) { flag = true;