summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/ItemDoor.java
diff options
context:
space:
mode:
authorErik Broes <erikbroes@grum.nl>2011-03-21 00:25:26 +0100
committerErik Broes <erikbroes@grum.nl>2011-03-21 00:31:13 +0100
commit324efa8224818aa04402203b1ccbb9839b44061e (patch)
tree8f5550f37a671bf2bce48f318354e518570bb97b /src/main/java/net/minecraft/server/ItemDoor.java
parent0d2dc3902c1341be9bb1c51ab7e2be1a925788e3 (diff)
downloadcraftbukkit-324efa8224818aa04402203b1ccbb9839b44061e.tar
craftbukkit-324efa8224818aa04402203b1ccbb9839b44061e.tar.gz
craftbukkit-324efa8224818aa04402203b1ccbb9839b44061e.tar.lz
craftbukkit-324efa8224818aa04402203b1ccbb9839b44061e.tar.xz
craftbukkit-324efa8224818aa04402203b1ccbb9839b44061e.zip
Fix BlockPlace
Diffstat (limited to 'src/main/java/net/minecraft/server/ItemDoor.java')
-rw-r--r--src/main/java/net/minecraft/server/ItemDoor.java97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/ItemDoor.java b/src/main/java/net/minecraft/server/ItemDoor.java
new file mode 100644
index 00000000..7a9c0969
--- /dev/null
+++ b/src/main/java/net/minecraft/server/ItemDoor.java
@@ -0,0 +1,97 @@
+package net.minecraft.server;
+
+// CraftBukkit start
+import org.bukkit.block.BlockState;
+import org.bukkit.craftbukkit.block.CraftBlockState;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.block.BlockPlaceEvent;
+// CraftBukkit end
+
+public class ItemDoor extends Item {
+
+ private Material a;
+
+ public ItemDoor(int i, Material material) {
+ super(i);
+ this.a = material;
+ this.durability = 64;
+ this.maxStackSize = 1;
+ }
+
+ public boolean a(ItemStack itemstack, EntityHuman entityhuman, World world, int i, int j, int k, int l) {
+ if (l != 1) {
+ return false;
+ } else {
+ int clickedX = i, clickedY = j, clickedZ = k; // CraftBukkit;
+
+ ++j;
+ Block block;
+
+ if (this.a == Material.WOOD) {
+ block = Block.WOODEN_DOOR;
+ } else {
+ block = Block.IRON_DOOR_BLOCK;
+ }
+
+ if (!block.a(world, i, j, k)) {
+ return false;
+ } else {
+ int i1 = MathHelper.b((double) ((entityhuman.yaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3;
+ byte b0 = 0;
+ byte b1 = 0;
+
+ if (i1 == 0) {
+ b1 = 1;
+ }
+
+ if (i1 == 1) {
+ b0 = -1;
+ }
+
+ if (i1 == 2) {
+ b1 = -1;
+ }
+
+ if (i1 == 3) {
+ b0 = 1;
+ }
+
+ int j1 = (world.d(i - b0, j, k - b1) ? 1 : 0) + (world.d(i - b0, j + 1, k - b1) ? 1 : 0);
+ int k1 = (world.d(i + b0, j, k + b1) ? 1 : 0) + (world.d(i + b0, j + 1, k + b1) ? 1 : 0);
+ boolean flag = world.getTypeId(i - b0, j, k - b1) == block.id || world.getTypeId(i - b0, j + 1, k - b1) == block.id;
+ boolean flag1 = world.getTypeId(i + b0, j, k + b1) == block.id || world.getTypeId(i + b0, j + 1, k + b1) == block.id;
+ boolean flag2 = false;
+
+ if (flag && !flag1) {
+ flag2 = true;
+ } else if (k1 > j1) {
+ flag2 = true;
+ }
+
+ if (flag2) {
+ i1 = i1 - 1 & 3;
+ i1 += 4;
+ }
+
+ BlockState blockState = CraftBlockState.getBlockState(world, i, j, k); // CraftBukkit
+
+ world.e(i, j, k, block.id);
+ world.c(i, j, k, i1);
+
+ // CraftBukkit start - bed
+ BlockPlaceEvent event = CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blockState, clickedX, clickedY, clickedZ, block);
+
+ if (event.isCancelled() || !event.canBuild()) {
+ event.getBlockPlaced().setTypeIdAndData(blockState.getTypeId(), blockState.getRawData(), false);
+ return false;
+ }
+ // CraftBukkit end
+
+ world.e(i, j + 1, k, block.id);
+ world.c(i, j + 1, k, i1 + 8);
+ --itemstack.count;
+ return true;
+ }
+ }
+ }
+}