From 69e766c5f3d281038302920d54aea40d57f532d2 Mon Sep 17 00:00:00 2001 From: Tahg Date: Mon, 30 Jan 2012 02:19:22 -0500 Subject: [PATCH] Fixed BlockPlace event. Fixes BUKKIT-663 --- .../java/net/minecraft/server/BlockRedstoneWire.java | 1 + src/main/java/net/minecraft/server/ItemBlock.java | 4 ++++ src/main/java/net/minecraft/server/ItemRedstone.java | 11 +++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockRedstoneWire.java b/src/main/java/net/minecraft/server/BlockRedstoneWire.java index 07226d181b..b79743e41e 100644 --- a/src/main/java/net/minecraft/server/BlockRedstoneWire.java +++ b/src/main/java/net/minecraft/server/BlockRedstoneWire.java @@ -196,6 +196,7 @@ public class BlockRedstoneWire extends Block { } public void onPlace(World world, int i, int j, int k) { + if (world.suppressPhysics) return; // CraftBukkit super.onPlace(world, i, j, k); if (!world.isStatic) { this.g(world, i, j, k); diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java index 78b29924db..7cd698ec01 100644 --- a/src/main/java/net/minecraft/server/ItemBlock.java +++ b/src/main/java/net/minecraft/server/ItemBlock.java @@ -77,7 +77,11 @@ public class ItemBlock extends Item { eventUseBlockBelow = itemstack.id == Block.STEP.id && blockStateBelow.getTypeId() == Block.STEP.id; } + world.suppressPhysics = true; + world.setTypeIdAndData(i, j, k, this.id, this.filterData(itemstack.getData())); BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, eventUseBlockBelow ? blockStateBelow : replacedBlockState, clickedX, clickedY, clickedZ, block); + replacedBlockState.update(true); + world.suppressPhysics = false; if (event.isCancelled() || !event.canBuild()) { return true; diff --git a/src/main/java/net/minecraft/server/ItemRedstone.java b/src/main/java/net/minecraft/server/ItemRedstone.java index 69b70561ac..813c95ef38 100644 --- a/src/main/java/net/minecraft/server/ItemRedstone.java +++ b/src/main/java/net/minecraft/server/ItemRedstone.java @@ -49,18 +49,21 @@ public class ItemRedstone extends Item { return false; } else { if (Block.REDSTONE_WIRE.canPlace(world, i, j, k)) { - CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit + // CraftBukkit start + CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); - world.setRawTypeId(i, j, k, Block.REDSTONE_WIRE.id); // CraftBukkit - We update after the event + world.suppressPhysics = true; + world.setRawTypeId(i, j, k, Block.REDSTONE_WIRE.id); // We update after the event - // CraftBukkit start - redstone BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, Block.REDSTONE_WIRE); + blockState.update(true); if (event.isCancelled() || !event.canBuild()) { - event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false); return false; } + world.suppressPhysics = false; + world.setTypeId(i, j, k, Block.REDSTONE_WIRE.id); world.update(i, j, k, Block.REDSTONE_WIRE.id); // Must take place after BlockPlaceEvent, we need to update all other blocks. // CraftBukkit end