Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
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}