summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/ItemBlock.java
diff options
context:
space:
mode:
authordurron597 <martin.jared@gmail.com>2011-01-08 05:49:42 -0500
committerdurron597 <martin.jared@gmail.com>2011-01-08 05:50:35 -0500
commit65c8df24b60443ee2c7932fd68d498694ec5ede2 (patch)
tree34865b5bffb40e1ea7f9a3b2f985776e6a24de11 /src/main/java/net/minecraft/server/ItemBlock.java
parentf71e2b4ed3c6877b1a622d33afd80838d2fa9f35 (diff)
downloadcraftbukkit-65c8df24b60443ee2c7932fd68d498694ec5ede2.tar
craftbukkit-65c8df24b60443ee2c7932fd68d498694ec5ede2.tar.gz
craftbukkit-65c8df24b60443ee2c7932fd68d498694ec5ede2.tar.lz
craftbukkit-65c8df24b60443ee2c7932fd68d498694ec5ede2.tar.xz
craftbukkit-65c8df24b60443ee2c7932fd68d498694ec5ede2.zip
Partial Player Item, Block RightClick, Block Place
Diffstat (limited to 'src/main/java/net/minecraft/server/ItemBlock.java')
-rw-r--r--src/main/java/net/minecraft/server/ItemBlock.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java
new file mode 100644
index 00000000..350cd2f4
--- /dev/null
+++ b/src/main/java/net/minecraft/server/ItemBlock.java
@@ -0,0 +1,108 @@
+package net.minecraft.server;
+
+import org.bukkit.BlockFace;
+import org.bukkit.craftbukkit.CraftBlock;
+import org.bukkit.craftbukkit.CraftItemStack;
+import org.bukkit.craftbukkit.CraftPlayer;
+import org.bukkit.event.Event.Type;
+import org.bukkit.event.block.BlockPlacedEvent;
+
+
+public class ItemBlock extends Item {
+
+ private int a;
+
+ public ItemBlock(int i) {
+ super(i);
+ a = i + 256;
+ a(Block.m[i + 256].a(2));
+ }
+
+ public boolean a(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) {
+ // Craftbukkit start
+ // Bail if we have nothing of the item in hand
+ if (itemstack.a == 0) {
+ return false;
+ }
+
+ // Craftbukkit store info of the clicked block
+ CraftBlock blockClicked = (CraftBlock) ((WorldServer) world).getWorld().getBlockAt(i, j, k);
+ BlockFace faceClicked = CraftBlock.notchToBlockFace(l);
+
+ if (world.a(i, j, k) == Block.aS.bh) {
+ l = 0;
+ } else {
+ if (l == 0) {
+ j--;
+ }
+ if (l == 1) {
+ j++;
+ }
+ if (l == 2) {
+ k--;
+ }
+ if (l == 3) {
+ k++;
+ }
+ if (l == 4) {
+ i--;
+ }
+ if (l == 5) {
+ i++;
+ }
+ }
+
+ // CraftBukkit store the old data so we can undo it
+ int oldMaterial = world.a(i, j, k);
+ int oldData = world.b(i, j, k);
+
+ if (world.a(a, i, j, k, false)) {
+ Block block = Block.m[a];
+
+ // This executes the placement of the block
+ if (world.d(i, j, k, a)) {
+ CraftBlock placedBlock = (CraftBlock) blockClicked.getFace(faceClicked) ;
+ CraftItemStack itemInHand = new CraftItemStack(itemstack);
+ CraftPlayer thePlayer = new CraftPlayer(((WorldServer) world).getServer(), (EntityPlayerMP) entityplayer);
+
+ int xFromSpawn = (int) MathHelper.e(i - world.m);
+ int distanceFromSpawn = (int) MathHelper.e(k - world.o);
+
+ if (xFromSpawn > distanceFromSpawn) {
+ distanceFromSpawn = xFromSpawn;
+ }
+
+ // Craftbukkit hardcoded Spawn distance for now
+ boolean canBuild = distanceFromSpawn > 16 || thePlayer.isOp();
+
+ BlockPlacedEvent bpe = new BlockPlacedEvent(Type.BLOCK_PLACED, placedBlock, blockClicked, itemInHand, thePlayer, canBuild);
+
+ if (bpe.isCancelled() || !bpe.canBuild()) {
+ // Craftbukkit Undo!
+
+ // Specialcase iceblocks, replace with 'glass' first (so it doesn't explode into water)
+ if (this.a == 79) {
+ world.a(i, j, k, 20);
+ }
+ world.a(i, j, k, oldMaterial);
+ world.c(i, j, k, oldData);
+ } else {
+ world.g(i, j, k);
+ world.g(i, j, k, this.a);
+
+ Block.m[a].c(world, i, j, k, l);
+ // Craftbukkit Decompiler doesn't record the downcast. Oops.
+ Block.m[a].a(world, i, j, k, (EntityLiving) entityplayer);
+ world.a((float) i + 0.5F, (float) j + 0.5F, (float) k + 0.5F, block.bq.c(), (block.bq.a() + 1.0F) / 2.0F, block.bq.b() * 0.8F);
+ itemstack.a--;
+ }
+ }
+ }
+ return true;
+ }
+
+ public String a() {
+ return Block.m[a].e();
+ }
+}
+