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) { } else if (l != 1) {
return false; return false;
} else { } else {
int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit
++j; ++j;
BlockBed blockbed = (BlockBed) Block.BED; BlockBed blockbed = (BlockBed) Block.BED;
int i1 = MathHelper.floor((double) (entityhuman.yaw * 4.0F / 360.0F) + 0.5D) & 3; 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 (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)) { 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 // CraftBukkit start
//world.setTypeIdAndData(i, j, k, blockbed.id, i1);
world.setTypeIdAndData(i, j, k, blockbed.id, i1); if (!ItemBlock.processBlockPlace(world, entityhuman, null, i, j, k, blockbed.id, l)) {
// 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);
return false; return false;
} }
// CraftBukkit end // CraftBukkit end

View file

@ -1,7 +1,5 @@
package net.minecraft.server; package net.minecraft.server;
import org.bukkit.craftbukkit.block.CraftBlockState; // CraftBukkit
public class ItemDoor extends Item { public class ItemDoor extends Item {
private Material a; private Material a;
@ -85,17 +83,22 @@ public class ItemDoor extends Item {
flag2 = true; flag2 = true;
} }
CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
world.suppressPhysics = true; world.suppressPhysics = true;
world.setTypeIdAndData(i, j, k, block.id, l);
// CraftBukkit start // CraftBukkit start
if (entityhuman != null) { if (entityhuman != null) {
org.bukkit.event.block.BlockPlaceEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, i, j, k); if(!ItemBlock.processBlockPlace(world, entityhuman, null, i, j, k, block.id, l)) {
((EntityPlayer) entityhuman).playerConnection.sendPacket(new Packet53BlockChange(i, j + 1, k, world));
if (event.isCancelled() || !event.canBuild()) {
event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
return false; 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 // CraftBukkit end
world.setTypeIdAndData(i, j + 1, k, block.id, 8 | (flag2 ? 1 : 0)); world.setTypeIdAndData(i, j + 1, k, block.id, 8 | (flag2 ? 1 : 0));