Handle beds and doors the same way as other blocks. Fixes BUKKIT-3437

Relates to: BUKKIT-3438
This commit is contained in:
feildmaster 2013-01-16 08:03:35 -06:00
parent 614ef2f8c5
commit 98aea835b5
2 changed files with 14 additions and 19 deletions

View file

@ -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

View file

@ -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));