--- a/net/minecraft/server/EntityFallingBlock.java +++ b/net/minecraft/server/EntityFallingBlock.java @@ -4,6 +4,8 @@ import java.util.Iterator; import java.util.List; +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit + public class EntityFallingBlock extends Entity { private IBlockData block; @@ -70,7 +72,7 @@ if (this.ticksLived++ == 0) { blockposition = this.getChunkCoordinates(); - if (this.world.getType(blockposition).a(block)) { + if (this.world.getType(blockposition).a(block) && !CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, Blocks.AIR.getBlockData()).isCancelled()) { this.world.a(blockposition, false); } else if (!this.world.isClientSide) { this.die(); @@ -122,6 +124,11 @@ this.block = (IBlockData) this.block.set(BlockProperties.C, true); } + // CraftBukkit start + if (CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, this.block).isCancelled()) { + return; + } + // CraftBukkit end if (this.world.setTypeAndData(blockposition, this.block, 3)) { if (block instanceof BlockFalling) { ((BlockFalling) block).a(this.world, blockposition, this.block, iblockdata, this); @@ -178,7 +185,9 @@ while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); + CraftEventFactory.entityDamage = this; // CraftBukkit entity.damageEntity(damagesource, (float) Math.min(MathHelper.d((float) i * this.fallHurtAmount), this.fallHurtMax)); + CraftEventFactory.entityDamage = null; // CraftBukkit } if (flag && (double) this.random.nextFloat() < 0.05000000074505806D + (double) i * 0.05D) {