summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTahg <tahgtahv@gmail.com>2012-01-30 02:19:22 -0500
committerEvilSeph <evilseph@gmail.com>2012-01-30 02:57:58 -0500
commit69e766c5f3d281038302920d54aea40d57f532d2 (patch)
tree95703eb8a1e1ce5770e36a5a267e47af55c61045
parent875219e28c07acfe2cfc1d03f889e9f7aac0c28f (diff)
downloadcraftbukkit-69e766c5f3d281038302920d54aea40d57f532d2.tar
craftbukkit-69e766c5f3d281038302920d54aea40d57f532d2.tar.gz
craftbukkit-69e766c5f3d281038302920d54aea40d57f532d2.tar.lz
craftbukkit-69e766c5f3d281038302920d54aea40d57f532d2.tar.xz
craftbukkit-69e766c5f3d281038302920d54aea40d57f532d2.zip
Fixed BlockPlace event. Fixes BUKKIT-663
-rw-r--r--src/main/java/net/minecraft/server/BlockRedstoneWire.java1
-rw-r--r--src/main/java/net/minecraft/server/ItemBlock.java4
-rw-r--r--src/main/java/net/minecraft/server/ItemRedstone.java11
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 07226d18..b79743e4 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 78b29924..7cd698ec 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 69b70561..813c95ef 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