From 98aea835b5b74f841a0a92567a6987367b542c77 Mon Sep 17 00:00:00 2001
From: feildmaster <admin@feildmaster.com>
Date: Wed, 16 Jan 2013 08:03:35 -0600
Subject: [PATCH] Handle beds and doors the same way as other blocks. Fixes
 BUKKIT-3437 Relates to: BUKKIT-3438

---
 .../java/net/minecraft/server/ItemBed.java    | 14 +++-----------
 .../java/net/minecraft/server/ItemDoor.java   | 19 +++++++++++--------
 2 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/src/main/java/net/minecraft/server/ItemBed.java b/src/main/java/net/minecraft/server/ItemBed.java
index bf83e2e34e..e84ccd0ac7 100644
--- a/src/main/java/net/minecraft/server/ItemBed.java
+++ b/src/main/java/net/minecraft/server/ItemBed.java
@@ -15,8 +15,6 @@ public class ItemBed extends Item {
         } else if (l != 1) {
             return false;
         } else {
-            int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit
-
             ++j;
             BlockBed blockbed = (BlockBed) Block.BED;
             int i1 = MathHelper.floor((double) (entityhuman.yaw * 4.0F / 360.0F) + 0.5D) & 3;
@@ -41,15 +39,9 @@ public class ItemBed extends Item {
 
             if (entityhuman.a(i, j, k, l, itemstack) && entityhuman.a(i + b0, j, k + b1, l, itemstack)) {
                 if (world.isEmpty(i, j, k) && world.isEmpty(i + b0, j, k + b1) && world.v(i, j - 1, k) && world.v(i + b0, j - 1, k + b1)) {
-                    CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
-
-                    world.setTypeIdAndData(i, j, k, blockbed.id, i1);
-
-                    // CraftBukkit start - bed
-                    org.bukkit.event.block.BlockPlaceEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ);
-
-                    if (event.isCancelled() || !event.canBuild()) {
-                        event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
+                    // CraftBukkit start
+                    //world.setTypeIdAndData(i, j, k, blockbed.id, i1);
+                    if (!ItemBlock.processBlockPlace(world, entityhuman, null, i, j, k, blockbed.id, l)) {
                         return false;
                     }
                     // CraftBukkit end
diff --git a/src/main/java/net/minecraft/server/ItemDoor.java b/src/main/java/net/minecraft/server/ItemDoor.java
index 6362d07e02..4cbe26b561 100644
--- a/src/main/java/net/minecraft/server/ItemDoor.java
+++ b/src/main/java/net/minecraft/server/ItemDoor.java
@@ -1,7 +1,5 @@
 package net.minecraft.server;
 
-import org.bukkit.craftbukkit.block.CraftBlockState; // CraftBukkit
-
 public class ItemDoor extends Item {
 
     private Material a;
@@ -85,17 +83,22 @@ public class ItemDoor extends Item {
             flag2 = true;
         }
 
-        CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
         world.suppressPhysics = true;
-        world.setTypeIdAndData(i, j, k, block.id, l);
         // CraftBukkit start
         if (entityhuman != null) {
-            org.bukkit.event.block.BlockPlaceEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, i, j, k);
-
-            if (event.isCancelled() || !event.canBuild()) {
-                event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
+            if(!ItemBlock.processBlockPlace(world, entityhuman, null, i, j, k, block.id, l)) {
+                ((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet53BlockChange(i, j + 1, k, world));
                 return false;
             }
+
+            if (world.getTypeId(i, j, k) != block.id) {
+                ((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet53BlockChange(i, j + 1, k, world));
+                return true;
+            }
+
+            world.suppressPhysics = true;
+        } else {
+            world.setTypeIdAndData(i, j, k, block.id, l);
         }
         // CraftBukkit end
         world.setTypeIdAndData(i, j + 1, k, block.id, 8 | (flag2 ? 1 : 0));