Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 101 lines 3.5 kB view raw
1package net.minecraft.server; 2 3// CraftBukkit start 4 5import org.bukkit.craftbukkit.block.CraftBlockState; 6import org.bukkit.craftbukkit.event.CraftEventFactory; 7import org.bukkit.event.block.BlockPlaceEvent; 8// CraftBukkit end 9 10public class ItemDoor extends Item { 11 12 private Material a; 13 14 public ItemDoor(int i, Material material) { 15 super(i); 16 this.a = material; 17 this.maxStackSize = 1; 18 } 19 20 public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) { 21 if (l != 1) { 22 return false; 23 } else { 24 int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit 25 26 ++j; 27 Block block; 28 29 if (this.a == Material.WOOD) { 30 block = Block.WOODEN_DOOR; 31 } else { 32 block = Block.IRON_DOOR_BLOCK; 33 } 34 35 if (!block.canPlace(world, i, j, k)) { 36 return false; 37 } else { 38 int i1 = MathHelper.floor((double) ((entityhuman.yaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; 39 byte b0 = 0; 40 byte b1 = 0; 41 42 if (i1 == 0) { 43 b1 = 1; 44 } 45 46 if (i1 == 1) { 47 b0 = -1; 48 } 49 50 if (i1 == 2) { 51 b1 = -1; 52 } 53 54 if (i1 == 3) { 55 b0 = 1; 56 } 57 58 int j1 = (world.e(i - b0, j, k - b1) ? 1 : 0) + (world.e(i - b0, j + 1, k - b1) ? 1 : 0); 59 int k1 = (world.e(i + b0, j, k + b1) ? 1 : 0) + (world.e(i + b0, j + 1, k + b1) ? 1 : 0); 60 boolean flag = world.getTypeId(i - b0, j, k - b1) == block.id || world.getTypeId(i - b0, j + 1, k - b1) == block.id; 61 boolean flag1 = world.getTypeId(i + b0, j, k + b1) == block.id || world.getTypeId(i + b0, j + 1, k + b1) == block.id; 62 boolean flag2 = false; 63 64 if (flag && !flag1) { 65 flag2 = true; 66 } else if (k1 > j1) { 67 flag2 = true; 68 } 69 70 if (flag2) { 71 i1 = i1 - 1 & 3; 72 i1 += 4; 73 } 74 75 CraftBlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit 76 77 world.suppressPhysics = true; 78 world.setTypeIdAndData(i, j, k, block.id, i1); 79 80 // CraftBukkit start - bed 81 world.suppressPhysics = false; 82 world.applyPhysics(i, j, k, Block.REDSTONE_WIRE.id); 83 BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, block); 84 85 if (event.isCancelled() || !event.canBuild()) { 86 event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false); 87 return false; 88 } 89 90 world.suppressPhysics = true; 91 // CraftBukkit end 92 world.setTypeIdAndData(i, j + 1, k, block.id, i1 + 8); 93 world.suppressPhysics = false; 94 // world.applyPhysics(i, j, k, block.id); // CraftBukkit - moved up 95 world.applyPhysics(i, j + 1, k, Block.REDSTONE_WIRE.id); 96 --itemstack.count; 97 return true; 98 } 99 } 100 } 101}