summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorErik Broes <erikbroes@grum.nl>2011-03-23 12:22:13 +0100
committerErik Broes <erikbroes@grum.nl>2011-03-23 16:51:43 +0100
commitf33de669fb1cb86ba668d60ba2f2352fd63b4417 (patch)
tree0b713c8318cb327e564ab94951c2f1e9324cfe14 /src/main/java
parentbb9558adec41922473de87718a53f5d3533deb7a (diff)
downloadcraftbukkit-f33de669fb1cb86ba668d60ba2f2352fd63b4417.tar
craftbukkit-f33de669fb1cb86ba668d60ba2f2352fd63b4417.tar.gz
craftbukkit-f33de669fb1cb86ba668d60ba2f2352fd63b4417.tar.lz
craftbukkit-f33de669fb1cb86ba668d60ba2f2352fd63b4417.tar.xz
craftbukkit-f33de669fb1cb86ba668d60ba2f2352fd63b4417.zip
Major overhaul implementing PLAYER_INTERACT, removing PLAYER_ITEM, BLOCK_INTERACT, BLOCK_RIGHT_CLICK
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/minecraft/server/BlockBed.java155
-rw-r--r--src/main/java/net/minecraft/server/BlockButton.java22
-rw-r--r--src/main/java/net/minecraft/server/BlockChest.java141
-rw-r--r--src/main/java/net/minecraft/server/BlockDispenser.java21
-rw-r--r--src/main/java/net/minecraft/server/BlockDoor.java6
-rw-r--r--src/main/java/net/minecraft/server/BlockFurnace.java126
-rw-r--r--src/main/java/net/minecraft/server/BlockJukeBox.java71
-rw-r--r--src/main/java/net/minecraft/server/BlockLever.java25
-rw-r--r--src/main/java/net/minecraft/server/BlockPressurePlate.java23
-rw-r--r--src/main/java/net/minecraft/server/BlockWorkbench.java46
-rw-r--r--src/main/java/net/minecraft/server/ItemBoat.java23
-rw-r--r--src/main/java/net/minecraft/server/ItemInWorldManager.java31
-rw-r--r--src/main/java/net/minecraft/server/ItemMinecart.java23
-rw-r--r--src/main/java/net/minecraft/server/ItemSeeds.java1
-rw-r--r--src/main/java/net/minecraft/server/NetServerHandler.java55
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java44
16 files changed, 140 insertions, 673 deletions
diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java
deleted file mode 100644
index 403fedfd..00000000
--- a/src/main/java/net/minecraft/server/BlockBed.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package net.minecraft.server;
-
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event;
-import org.bukkit.event.block.BlockInteractEvent;
-
-import java.util.Random;
-
-public class BlockBed extends Block {
-
- public static final int[][] a = new int[][] { { 0, 1}, { -1, 0}, { 0, -1}, { 1, 0}};
-
- public BlockBed(int i) {
- super(i, 134, Material.CLOTH);
- this.f();
- }
-
- public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- int l = world.getData(i, j, k);
-
- if (!d(l)) {
- int i1 = c(l);
-
- i += a[i1][0];
- k += a[i1][1];
- if (world.getTypeId(i, j, k) != this.id) {
- return true;
- }
-
- l = world.getData(i, j, k);
- }
-
- // CraftBukkit start - Interact Bed
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Event.Type eventType = Event.Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
- if (f(l)) {
- entityhuman.a("tile.bed.occupied");
- return true;
- } else if (entityhuman.a(i, j, k)) {
- a(world, i, j, k, true);
- return true;
- } else {
- entityhuman.a("tile.bed.noSleep");
- return true;
- }
- }
-
- public int a(int i, int j) {
- if (i == 0) {
- return Block.WOOD.textureId;
- } else {
- int k = c(j);
- int l = BedBlockTextures.c[k][i];
-
- return d(j) ? (l == 2 ? this.textureId + 2 + 16 : (l != 5 && l != 4 ? this.textureId + 1 : this.textureId + 1 + 16)) : (l == 3 ? this.textureId - 1 + 16 : (l != 5 && l != 4 ? this.textureId : this.textureId + 16));
- }
- }
-
- public boolean a() {
- return false;
- }
-
- public void a(IBlockAccess iblockaccess, int i, int j, int k) {
- this.f();
- }
-
- public void a(World world, int i, int j, int k, int l) {
- int i1 = world.getData(i, j, k);
- int j1 = c(i1);
-
- if (d(i1)) {
- if (world.getTypeId(i - a[j1][0], j, k - a[j1][1]) != this.id) {
- world.e(i, j, k, 0);
- }
- } else if (world.getTypeId(i + a[j1][0], j, k + a[j1][1]) != this.id) {
- world.e(i, j, k, 0);
- if (!world.isStatic) {
- this.b_(world, i, j, k, i1);
- }
- }
- }
-
- public int a(int i, Random random) {
- return d(i) ? 0 : Item.BED.id;
- }
-
- private void f() {
- this.a(0.0F, 0.0F, 0.0F, 1.0F, 0.5625F, 1.0F);
- }
-
- public static int c(int i) {
- return i & 3;
- }
-
- public static boolean d(int i) {
- return (i & 8) != 0;
- }
-
- public static boolean f(int i) {
- return (i & 4) != 0;
- }
-
- public static void a(World world, int i, int j, int k, boolean flag) {
- int l = world.getData(i, j, k);
-
- if (flag) {
- l |= 4;
- } else {
- l &= -5;
- }
-
- world.c(i, j, k, l);
- }
-
- public static ChunkCoordinates g(World world, int i, int j, int k, int l) {
- int i1 = world.getData(i, j, k);
- int j1 = c(i1);
-
- for (int k1 = 0; k1 <= 1; ++k1) {
- int l1 = i - a[j1][0] * k1 - 1;
- int i2 = k - a[j1][1] * k1 - 1;
- int j2 = l1 + 2;
- int k2 = i2 + 2;
-
- for (int l2 = l1; l2 <= j2; ++l2) {
- for (int i3 = i2; i3 <= k2; ++i3) {
- if (world.d(l2, j - 1, i3) && world.isEmpty(l2, j, i3) && world.isEmpty(l2, j + 1, i3)) {
- if (l <= 0) {
- return new ChunkCoordinates(l2, j, i3);
- }
-
- --l;
- }
- }
- }
- }
-
- return new ChunkCoordinates(i, j + 1, k);
- }
-}
diff --git a/src/main/java/net/minecraft/server/BlockButton.java b/src/main/java/net/minecraft/server/BlockButton.java
index 6121e602..1d09e635 100644
--- a/src/main/java/net/minecraft/server/BlockButton.java
+++ b/src/main/java/net/minecraft/server/BlockButton.java
@@ -6,9 +6,6 @@ import java.util.Random;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
import org.bukkit.event.block.BlockRedstoneEvent;
// CraftBukkit end
@@ -126,21 +123,6 @@ public class BlockButton extends Block {
}
public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- // CraftBukkit start - Interact Button
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
int l = world.getData(i, j, k);
int i1 = l & 7;
int j1 = 8 - (l & 8);
@@ -149,6 +131,10 @@ public class BlockButton extends Block {
return true;
} else {
// CraftBukkit start
+ CraftWorld craftWorld = ((WorldServer) world).getWorld();
+ CraftServer server = ((WorldServer) world).getServer();
+ CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
+
int old = (j1 != 8) ? 1 : 0;
int current = (j1 == 8) ? 1 : 0;
BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, old, current);
diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java
deleted file mode 100644
index 85a6d5a4..00000000
--- a/src/main/java/net/minecraft/server/BlockChest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package net.minecraft.server;
-
-import java.util.Random;
-
-// CraftBukkit start
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
-// CraftBukkit end
-
-public class BlockChest extends BlockContainer {
-
- private Random a = new Random();
-
- protected BlockChest(int i) {
- super(i, Material.WOOD);
- this.textureId = 26;
- }
-
- public int a(int i) {
- return i == 1 ? this.textureId - 1 : (i == 0 ? this.textureId - 1 : (i == 3 ? this.textureId + 1 : this.textureId));
- }
-
- public boolean a(World world, int i, int j, int k) {
- int l = 0;
-
- if (world.getTypeId(i - 1, j, k) == this.id) {
- ++l;
- }
-
- if (world.getTypeId(i + 1, j, k) == this.id) {
- ++l;
- }
-
- if (world.getTypeId(i, j, k - 1) == this.id) {
- ++l;
- }
-
- if (world.getTypeId(i, j, k + 1) == this.id) {
- ++l;
- }
-
- return l > 1 ? false : (this.g(world, i - 1, j, k) ? false : (this.g(world, i + 1, j, k) ? false : (this.g(world, i, j, k - 1) ? false : !this.g(world, i, j, k + 1))));
- }
-
- private boolean g(World world, int i, int j, int k) {
- return world.getTypeId(i, j, k) != this.id ? false : (world.getTypeId(i - 1, j, k) == this.id ? true : (world.getTypeId(i + 1, j, k) == this.id ? true : (world.getTypeId(i, j, k - 1) == this.id ? true : world.getTypeId(i, j, k + 1) == this.id)));
- }
-
- public void b(World world, int i, int j, int k) {
- TileEntityChest tileentitychest = (TileEntityChest) world.getTileEntity(i, j, k);
-
- for (int l = 0; l < tileentitychest.m_(); ++l) {
- ItemStack itemstack = tileentitychest.c_(l);
-
- if (itemstack != null) {
- float f = this.a.nextFloat() * 0.8F + 0.1F;
- float f1 = this.a.nextFloat() * 0.8F + 0.1F;
- float f2 = this.a.nextFloat() * 0.8F + 0.1F;
-
- while (itemstack.count > 0) {
- int i1 = this.a.nextInt(21) + 10;
-
- if (i1 > itemstack.count) {
- i1 = itemstack.count;
- }
-
- itemstack.count -= i1;
- EntityItem entityitem = new EntityItem(world, (double) ((float) i + f), (double) ((float) j + f1), (double) ((float) k + f2), new ItemStack(itemstack.id, i1, itemstack.h()));
- float f3 = 0.05F;
-
- entityitem.motX = (double) ((float) this.a.nextGaussian() * f3);
- entityitem.motY = (double) ((float) this.a.nextGaussian() * f3 + 0.2F);
- entityitem.motZ = (double) ((float) this.a.nextGaussian() * f3);
- world.a((Entity) entityitem);
- }
- }
- }
-
- super.b(world, i, j, k);
- }
-
- public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- Object object = (TileEntityChest) world.getTileEntity(i, j, k);
-
- if (world.d(i, j + 1, k)) {
- return true;
- } else if (world.getTypeId(i - 1, j, k) == this.id && world.d(i - 1, j + 1, k)) {
- return true;
- } else if (world.getTypeId(i + 1, j, k) == this.id && world.d(i + 1, j + 1, k)) {
- return true;
- } else if (world.getTypeId(i, j, k - 1) == this.id && world.d(i, j + 1, k - 1)) {
- return true;
- } else if (world.getTypeId(i, j, k + 1) == this.id && world.d(i, j + 1, k + 1)) {
- return true;
- } else {
- if (world.getTypeId(i - 1, j, k) == this.id) {
- object = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(i - 1, j, k), (IInventory) object);
- }
-
- if (world.getTypeId(i + 1, j, k) == this.id) {
- object = new InventoryLargeChest("Large chest", (IInventory) object, (TileEntityChest) world.getTileEntity(i + 1, j, k));
- }
-
- if (world.getTypeId(i, j, k - 1) == this.id) {
- object = new InventoryLargeChest("Large chest", (TileEntityChest) world.getTileEntity(i, j, k - 1), (IInventory) object);
- }
-
- if (world.getTypeId(i, j, k + 1) == this.id) {
- object = new InventoryLargeChest("Large chest", (IInventory) object, (TileEntityChest) world.getTileEntity(i, j, k + 1));
- }
-
- if (world.isStatic) {
- return true;
- } else {
- // CraftBukkit start - Interact Chest
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) return true;
- // CraftBukkit end
-
- entityhuman.a((IInventory) object);
- return true;
- }
- }
- }
-
- protected TileEntity a_() {
- return new TileEntityChest();
- }
-}
diff --git a/src/main/java/net/minecraft/server/BlockDispenser.java b/src/main/java/net/minecraft/server/BlockDispenser.java
index 664ee728..24abbf9f 100644
--- a/src/main/java/net/minecraft/server/BlockDispenser.java
+++ b/src/main/java/net/minecraft/server/BlockDispenser.java
@@ -1,12 +1,6 @@
package net.minecraft.server;
import java.util.Random;
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
public class BlockDispenser extends BlockContainer {
@@ -62,21 +56,6 @@ public class BlockDispenser extends BlockContainer {
if (world.isStatic) {
return true;
} else {
- // CraftBukkit start - Interact Dispenser
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
TileEntityDispenser tileentitydispenser = (TileEntityDispenser) world.getTileEntity(i, j, k);
entityhuman.a(tileentitydispenser);
diff --git a/src/main/java/net/minecraft/server/BlockDoor.java b/src/main/java/net/minecraft/server/BlockDoor.java
index 53f9e803..198e070a 100644
--- a/src/main/java/net/minecraft/server/BlockDoor.java
+++ b/src/main/java/net/minecraft/server/BlockDoor.java
@@ -1,9 +1,12 @@
package net.minecraft.server;
import java.util.Random;
+
+// CraftBukkit start
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.event.block.BlockRedstoneEvent;
+// CraftBukkit end
public class BlockDoor extends Block {
@@ -179,8 +182,9 @@ public class BlockDoor extends Block {
int power = block.getBlockPower();
int powerTop = blockTop.getBlockPower();
if (powerTop > power) power = powerTop;
+
BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, (world.getData(i, j, k) & 4) > 0 ? 15: 0, power);
- server.getPluginManager().callEvent(eventRedstone);
+ server.getPluginManager().callEvent(eventRedstone);
this.a(world, i, j, k, eventRedstone.getNewCurrent() > 0);
// Craftbukkit end
}
diff --git a/src/main/java/net/minecraft/server/BlockFurnace.java b/src/main/java/net/minecraft/server/BlockFurnace.java
deleted file mode 100644
index 4eacfeab..00000000
--- a/src/main/java/net/minecraft/server/BlockFurnace.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package net.minecraft.server;
-
-import java.util.Random;
-
-// CraftBukkit start
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
-// CraftBukkit end
-
-public class BlockFurnace extends BlockContainer {
-
- private final boolean a;
-
- protected BlockFurnace(int i, boolean flag) {
- super(i, Material.STONE);
- this.a = flag;
- this.textureId = 45;
- }
-
- public int a(int i, Random random) {
- return Block.FURNACE.id;
- }
-
- public void e(World world, int i, int j, int k) {
- super.e(world, i, j, k);
- this.g(world, i, j, k);
- }
-
- private void g(World world, int i, int j, int k) {
- int l = world.getTypeId(i, j, k - 1);
- int i1 = world.getTypeId(i, j, k + 1);
- int j1 = world.getTypeId(i - 1, j, k);
- int k1 = world.getTypeId(i + 1, j, k);
- byte b0 = 3;
-
- if (Block.o[l] && !Block.o[i1]) {
- b0 = 3;
- }
-
- if (Block.o[i1] && !Block.o[l]) {
- b0 = 2;
- }
-
- if (Block.o[j1] && !Block.o[k1]) {
- b0 = 5;
- }
-
- if (Block.o[k1] && !Block.o[j1]) {
- b0 = 4;
- }
-
- world.c(i, j, k, b0);
- }
-
- public int a(int i) {
- return i == 1 ? this.textureId + 17 : (i == 0 ? this.textureId + 17 : (i == 3 ? this.textureId - 1 : this.textureId));
- }
-
- public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- if (world.isStatic) {
- return true;
- } else {
- // CraftBukkit start - Interact Furnace
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
- TileEntityFurnace tileentityfurnace = (TileEntityFurnace) world.getTileEntity(i, j, k);
-
- entityhuman.a(tileentityfurnace);
- return true;
- }
- }
-
- public static void a(boolean flag, World world, int i, int j, int k) {
- int l = world.getData(i, j, k);
- TileEntity tileentity = world.getTileEntity(i, j, k);
-
- if (flag) {
- world.e(i, j, k, Block.BURNING_FURNACE.id);
- } else {
- world.e(i, j, k, Block.FURNACE.id);
- }
-
- world.c(i, j, k, l);
- world.setTileEntity(i, j, k, tileentity);
- }
-
- protected TileEntity a_() {
- return new TileEntityFurnace();
- }
-
- public void a(World world, int i, int j, int k, EntityLiving entityliving) {
- int l = MathHelper.b((double) (entityliving.yaw * 4.0F / 360.0F) + 0.5D) & 3;
-
- if (l == 0) {
- world.c(i, j, k, 2);
- }
-
- if (l == 1) {
- world.c(i, j, k, 5);
- }
-
- if (l == 2) {
- world.c(i, j, k, 3);
- }
-
- if (l == 3) {
- world.c(i, j, k, 4);
- }
- }
-}
diff --git a/src/main/java/net/minecraft/server/BlockJukeBox.java b/src/main/java/net/minecraft/server/BlockJukeBox.java
deleted file mode 100644
index bf802f1a..00000000
--- a/src/main/java/net/minecraft/server/BlockJukeBox.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package net.minecraft.server;
-
-// CraftBukkit start
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
-// CraftBukkit end
-
-public class BlockJukeBox extends Block {
-
- protected BlockJukeBox(int i, int j) {
- super(i, j, Material.WOOD);
- }
-
- public int a(int i) {
- return this.textureId + (i == 1 ? 1 : 0);
- }
-
- public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- int l = world.getData(i, j, k);
-
- if (l > 0) {
- // CraftBukkit start - Interact Jukebox
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
- this.e(world, i, j, k, l);
- return true;
- } else {
- return false;
- }
- }
-
- public void e(World world, int i, int j, int k, int l) {
- world.a((String) null, i, j, k);
- world.c(i, j, k, 0);
- int i1 = Item.GOLD_RECORD.id + l - 1;
- float f = 0.7F;
- double d0 = (double) (world.k.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
- double d1 = (double) (world.k.nextFloat() * f) + (double) (1.0F - f) * 0.2D + 0.6D;
- double d2 = (double) (world.k.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
- EntityItem entityitem = new EntityItem(world, (double) i + d0, (double) j + d1, (double) k + d2, new ItemStack(i1, 1, 0));
-
- entityitem.c = 10;
- world.a((Entity) entityitem);
- }
-
- public void a(World world, int i, int j, int k, int l, float f) {
- if (!world.isStatic) {
- if (l > 0) {
- this.e(world, i, j, k, l);
- }
-
- super.a(world, i, j, k, l, f);
- }
- }
-}
diff --git a/src/main/java/net/minecraft/server/BlockLever.java b/src/main/java/net/minecraft/server/BlockLever.java
index a702ae44..f722cc61 100644
--- a/src/main/java/net/minecraft/server/BlockLever.java
+++ b/src/main/java/net/minecraft/server/BlockLever.java
@@ -4,9 +4,6 @@ package net.minecraft.server;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
import org.bukkit.event.block.BlockRedstoneEvent;
// CraftBukkit end
@@ -124,29 +121,15 @@ public class BlockLever extends Block {
if (world.isStatic) {
return true;
} else {
+ int l = world.getData(i, j, k);
+ int i1 = l & 7;
+ int j1 = 8 - (l & 8);
+
// CraftBukkit start - Interact Lever
CraftWorld craftWorld = ((WorldServer) world).getWorld();
CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- // The client updates the doors before the server does it's thing.
- // Forcibly send correct data.
- if (event.isCancelled()) {
- ((EntityPlayer) entityhuman).a.b(new Packet53BlockChange(i, j, k, (WorldServer) world));
- return true;
- }
- // CraftBukkit end
-
- int l = world.getData(i, j, k);
- int i1 = l & 7;
- int j1 = 8 - (l & 8);
- // CraftBukkit start
int old = (j1 != 8) ? 1 : 0;
int current = (j1 == 8) ? 1 : 0;
BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, old, current);
diff --git a/src/main/java/net/minecraft/server/BlockPressurePlate.java b/src/main/java/net/minecraft/server/BlockPressurePlate.java
index de3a0f69..d6abf5cf 100644
--- a/src/main/java/net/minecraft/server/BlockPressurePlate.java
+++ b/src/main/java/net/minecraft/server/BlockPressurePlate.java
@@ -7,10 +7,10 @@ import java.util.Random;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockRedstoneEvent;
+import org.bukkit.event.player.PlayerInteractEvent;
// CraftBukkit end
public class BlockPressurePlate extends Block {
@@ -96,20 +96,11 @@ public class BlockPressurePlate extends Block {
}
// CraftBukkit start - Interact Pressure Plate
- CraftServer server = ((WorldServer) world).getServer();
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
-
if (flag != flag1) {
if (flag1) {
for (Object object: list) {
- if (object != null && object instanceof EntityLiving) {
- EntityLiving entity = (EntityLiving) object;
- Type eventType = Type.BLOCK_INTERACT;
- org.bukkit.entity.LivingEntity who = (LivingEntity) entity.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
+ if (object != null && object instanceof EntityHuman) {
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent((EntityHuman) object, Action.PHYSICAL, i, j, k, -1, null);
if (event.isCancelled()) {
return;
@@ -118,6 +109,10 @@ public class BlockPressurePlate extends Block {
}
}
+ CraftServer server = ((WorldServer) world).getServer();
+ CraftWorld craftWorld = ((WorldServer) world).getWorld();
+ CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
+
BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block, flag ? 1 : 0, flag1 ? 1 : 0);
server.getPluginManager().callEvent(eventRedstone);
diff --git a/src/main/java/net/minecraft/server/BlockWorkbench.java b/src/main/java/net/minecraft/server/BlockWorkbench.java
deleted file mode 100644
index 6add34a4..00000000
--- a/src/main/java/net/minecraft/server/BlockWorkbench.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package net.minecraft.server;
-
-// CraftBukkit start
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.block.BlockInteractEvent;
-// CraftBukkit end
-
-public class BlockWorkbench extends Block {
-
- protected BlockWorkbench(int i) {
- super(i, Material.WOOD);
- this.textureId = 59;
- }
-
- public int a(int i) {
- return i == 1 ? this.textureId - 16 : (i == 0 ? Block.WOOD.a(0) : (i != 2 && i != 4 ? this.textureId : this.textureId + 1));
- }
-
- public boolean a(World world, int i, int j, int k, EntityHuman entityhuman) {
- if (world.isStatic) {
- return true;
- } else {
- // CraftBukkit start - Interact Workbench
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer server = ((WorldServer) world).getServer();
- Type eventType = Type.BLOCK_INTERACT;
- CraftBlock block = (CraftBlock) craftWorld.getBlockAt(i, j, k);
- LivingEntity who = (entityhuman == null) ? null : (LivingEntity) entityhuman.getBukkitEntity();
-
- BlockInteractEvent event = new BlockInteractEvent(eventType, block, who);
- server.getPluginManager().callEvent(event);
-
- if (event.isCancelled()) {
- return true;
- }
- // CraftBukkit end
-
- entityhuman.b(i, j, k);
- return true;
- }
- }
-}
diff --git a/src/main/java/net/minecraft/server/ItemBoat.java b/src/main/java/net/minecraft/server/ItemBoat.java
index 6b3b4358..393b94b5 100644
--- a/src/main/java/net/minecraft/server/ItemBoat.java
+++ b/src/main/java/net/minecraft/server/ItemBoat.java
@@ -1,14 +1,9 @@
package net.minecraft.server;
// CraftBukkit start
-import org.bukkit.block.BlockFace;
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.craftbukkit.inventory.CraftItemStack;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.player.PlayerItemEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerInteractEvent;
// CraftBukkit end
public class ItemBoat extends Item {
@@ -46,17 +41,7 @@ public class ItemBoat extends Item {
if (!world.isStatic) {
// CraftBukkit start - Boat placement
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer craftServer = ((WorldServer) world).getServer();
-
- Type eventType = Type.PLAYER_ITEM;
- Player who = (entityhuman == null) ? null : (Player) entityhuman.getBukkitEntity();
- org.bukkit.inventory.ItemStack itemInHand = new CraftItemStack(itemstack);
- org.bukkit.block.Block blockClicked = craftWorld.getBlockAt(i, j, k);
- BlockFace blockFace = CraftBlock.notchToBlockFace(movingobjectposition.e);
-
- PlayerItemEvent event = new PlayerItemEvent(eventType, who, itemInHand, blockClicked, blockFace);
- craftServer.getPluginManager().callEvent(event);
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityhuman, Action.RIGHT_CLICK_BLOCK, i, j, k, movingobjectposition.e, itemstack);
if (event.isCancelled()) {
return itemstack;
diff --git a/src/main/java/net/minecraft/server/ItemInWorldManager.java b/src/main/java/net/minecraft/server/ItemInWorldManager.java
index f3156e07..daa1aad0 100644
--- a/src/main/java/net/minecraft/server/ItemInWorldManager.java
+++ b/src/main/java/net/minecraft/server/ItemInWorldManager.java
@@ -1,8 +1,12 @@
package net.minecraft.server;
// CraftBukkit start
-import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.Event;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerInteractEvent;
// CraftBukkit end
public class ItemInWorldManager {
@@ -51,9 +55,18 @@ public class ItemInWorldManager {
this.d = this.j;
int l = this.b.getTypeId(i, j, k);
- if (l > 0) {
+ // CraftBukkit start
+ // Swings at air do *NOT* exist.
+ if (l <= 0) {
+ return;
+ }
+
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.a, Action.LEFT_CLICK_BLOCK , i, j, k, -1, this.a.inventory.b());
+
+ if (event.useInteractedBlock() != Event.Result.DENY) {
Block.byId[l].b(this.b, i, j, k, this.a);
}
+ // CraftBukkit end
if (l > 0 && Block.byId[l].a(this.a) >= 1.0F) {
this.d(i, j, k);
@@ -157,6 +170,18 @@ public class ItemInWorldManager {
public boolean a(EntityHuman entityhuman, World world, ItemStack itemstack, int i, int j, int k, int l) {
int i1 = world.getTypeId(i, j, k);
- return i1 > 0 && Block.byId[i1].a(world, i, j, k, entityhuman) ? true : (itemstack == null ? false : itemstack.a(entityhuman, world, i, j, k, l));
+ // CraftBukkit start - Interact
+ boolean result = false;
+ if (i1 > 0) {
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityhuman, Action.RIGHT_CLICK_BLOCK, i, j, k, l, itemstack);
+ if (event.useInteractedBlock() != Event.Result.DENY) {
+ result = Block.byId[i1].a(world, i, j, k, entityhuman);
+ }
+ if (itemstack != null && event.useItemInHand() != Event.Result.DENY && (!result || event.useItemInHand() == Event.Result.ALLOW)) {
+ result = itemstack.a(entityhuman, world, i, j, k, l);
+ }
+ }
+ return result;
}
+ // CraftBukkit end
}
diff --git a/src/main/java/net/minecraft/server/ItemMinecart.java b/src/main/java/net/minecraft/server/ItemMinecart.java
index 68a30d2b..ac09bf40 100644
--- a/src/main/java/net/minecraft/server/ItemMinecart.java
+++ b/src/main/java/net/minecraft/server/ItemMinecart.java
@@ -1,14 +1,9 @@
package net.minecraft.server;
// CraftBukkit start
-import org.bukkit.block.BlockFace;
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.CraftWorld;
-import org.bukkit.craftbukkit.block.CraftBlock;
-import org.bukkit.craftbukkit.inventory.CraftItemStack;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event.Type;
-import org.bukkit.event.player.PlayerItemEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.block.Action;
+import org.bukkit.event.player.PlayerInteractEvent;
// CraftBukkit end
public class ItemMinecart extends Item {
@@ -27,17 +22,7 @@ public class ItemMinecart extends Item {
if (i1 == Block.RAILS.id) {
if (!world.isStatic) {
// CraftBukkit start - Minecarts
- CraftWorld craftWorld = ((WorldServer) world).getWorld();
- CraftServer craftServer = ((WorldServer) world).getServer();
-
- Type eventType = Type.PLAYER_ITEM;
- Player who = (entityhuman == null) ? null : (Player) entityhuman.getBukkitEntity();
- org.bukkit.inventory.ItemStack itemInHand = new CraftItemStack(itemstack);
- org.bukkit.block.Block blockClicked = craftWorld.getBlockAt(i, j, k);
- BlockFace blockFace = CraftBlock.notchToBlockFace(l);
-
- PlayerItemEvent event = new PlayerItemEvent(eventType, who, itemInHand, blockClicked, blockFace);
- craftServer.getPluginManager().callEvent(event);
+ PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(entityhuman, Action.RIGHT_CLICK_BLOCK, i, j, k, l, itemstack);
if (event.isCancelled()) {
return false;
diff --git a/src/main/java/net/minecraft/server/ItemSeeds.java b/src/main/java/net/minecraft/server/ItemSeeds.java
index 79de16ef..70e72595 100644
--- a/src/main/java/net/minecraft/server/ItemSeeds.java
+++ b/src/main/java/net/minecraft/server/ItemSeeds.java
@@ -34,6 +34,7 @@ public class ItemSeeds extends Item {
return false;
}
// CraftBukkit end
+
--itemstack.count;
return true;
} else {
diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java
index d6c4be93..08ed0c2b 100644
--- a/src/main/java/net/minecraft/server/NetServerHandler.java
+++ b/src/main/java/net/minecraft/server/NetServerHandler.java
@@ -15,6 +15,7 @@ import org.bukkit.command.CommandException;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.entity.CraftPlayer;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.TextWrapper;
import org.bukkit.entity.Player;
@@ -93,6 +94,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
this.b.c();
this.d.f.a((Packet) (new Packet3Chat( event.getLeaveMessage() )));
// CraftBukkit end
+
this.d.f.c(this.e);
this.c = true;
}
@@ -401,7 +403,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
BlockFace blockFace = BlockFace.SELF;
if (packet15place.d == 255) {
- // CraftBukkit ITEM_USE -- if we have a lastRightClicked then it could be a usable location
+ // CraftBukkit -- if we have a lastRightClicked then it could be a usable location
if ((packet15place.e != null && packet15place.e.id == lastMaterial) || lastMaterial == 0) {
blockClicked = this.lastRightClicked;
blockFace = this.lastRightClickedFace;
@@ -410,7 +412,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
this.lastRightClickedFace = null;
this.lastMaterial = 0;
} else {
- // CraftBukkit RIGHTCLICK or BLOCK_PLACE .. or nothing
+ // CraftBukkit -- RIGHTCLICK or BLOCK_PLACE .. or nothing
blockClicked = (CraftBlock) ((WorldServer) e.world).getWorld().getBlockAt(packet15place.a, packet15place.b, packet15place.c);
blockFace = CraftBlock.notchToBlockFace(packet15place.d);
@@ -430,21 +432,18 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
return;
}
- // CraftBukkit start
- Type eventType = Type.PLAYER_ITEM;
- Player who = (this.e == null) ? null : (Player) this.e.getBukkitEntity();
- org.bukkit.inventory.ItemStack itemInHand = new CraftItemStack(itemstack);
-
- PlayerItemEvent event = new PlayerItemEvent(eventType, who, itemInHand, blockClicked, blockFace);
-
+ // CraftBukkit start - Check if we can actually do something over this large a distance
if (blockClicked != null && blockFace != null) {
- CraftBlock block = (CraftBlock)blockClicked.getFace(blockFace);
+ CraftBlock block = (CraftBlock) blockClicked.getFace(blockFace);
Location eyeLoc = getPlayer().getEyeLocation();
if (Math.pow(eyeLoc.getX() - block.getX(), 2) + Math.pow(eyeLoc.getY() - block.getY(), 2) + Math.pow(eyeLoc.getZ() - block.getZ(), 2) > PLACE_DISTANCE_SQUARED) {
return;
}
}
+ PlayerInteractEvent event = null;
+ org.bukkit.inventory.ItemStack itemInHand = new CraftItemStack(itemstack);
+
// CraftBukkit We still call this event even in spawn protection.
// Don't call this event if using Buckets / signs
switch (itemInHand.getType()) {
@@ -454,15 +453,15 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
case LAVA_BUCKET:
break;
default:
- server.getPluginManager().callEvent(event);
+ event = CraftEventFactory.callPlayerInteractEvent(this.e, Action.RIGHT_CLICK_BLOCK, packet15place.a, packet15place.b, packet15place.c, packet15place.d, itemstack);
}
- if (!event.isCancelled()) {
+ if (event != null && !event.isCancelled()) {
int itemstackAmount = itemstack.count;
this.e.c.a(this.e, this.e.world, itemstack);
// CraftBukkit notch decrements the counter by 1 in the above method with food,
- // snowballs and so forth, but he does it in a place that doesnt cause the
+ // snowballs and so forth, but he does it in a place that doesn't cause the
// inventory update packet to get sent
always = (itemstack.count != itemstackAmount);
}
@@ -483,14 +482,11 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
// CraftBukkit start - spawn protection moved to ItemBlock!!!
+ // Check if we can actually do something over this large a distance
Location eyeLoc = getPlayer().getEyeLocation();
if (Math.pow(eyeLoc.getX() - i, 2) + Math.pow(eyeLoc.getY() - j, 2) + Math.pow(eyeLoc.getZ() - k, 2) > PLACE_DISTANCE_SQUARED) {
return;
}
- CraftItemStack craftItem = new CraftItemStack(itemstack);
- Player player = getPlayer();
- BlockRightClickEvent event = new BlockRightClickEvent(Type.BLOCK_RIGHTCLICK, blockClicked, blockFace, craftItem, player);
- server.getPluginManager().callEvent(event);
this.e.c.a(this.e, this.e.world, itemstack, i, j, k, l);
this.e.a.b((Packet) (new Packet53BlockChange(i, j, k, this.e.world)));
@@ -689,7 +685,30 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
public void a(Packet18ArmAnimation packet18armanimation) {
if (packet18armanimation.b == 1) {
- // CraftBukkit start - Arm swing animation
+ // CraftBukkit -- raytrace to look for 'rogue armswings'
+ float f = 1.0F;
+ float f1 = this.e.lastPitch + (this.e.pitch - this.e.lastPitch) * f;
+ float f2 = this.e.lastYaw + (this.e.yaw - this.e.lastYaw) * f;
+ double d0 = this.e.lastX + (this.e.locX - this.e.lastX) * (double) f;
+ double d1 = this.e.lastY + (this.e.locY - this.e.lastY) * (double) f + 1.62D - (double) this.e.height;
+ double d2 = this.e.lastZ + (this.e.locZ - this.e.lastZ) * (double) f;
+ Vec3D vec3d = Vec3D.b(d0, d1, d2);
+
+ float f3 = MathHelper.b(-f2 * 0.017453292F - 3.1415927F);
+ float f4 = MathHelper.a(-f2 * 0.017453292F - 3.1415927F);
+ float f5 = -MathHelper.b(-f1 * 0.017453292F);
+ float f6 = MathHelper.a(-f1 * 0.017453292F);
+ float f7 = f4 * f5;
+ float f8 = f3 * f5;
+ double d3 = 5.0D;
+ Vec3D vec3d1 = vec3d.c((double) f7 * d3, (double) f6 * d3, (double) f8 * d3);
+ MovingObjectPosition movingobjectposition = this.e.world.a(vec3d, vec3d1, true);
+
+ if (movingobjectposition == null || movingobjectposition.a != EnumMovingObjectType.TILE) {
+ CraftEventFactory.callPlayerInteractEvent(this.e, Action.LEFT_CLICK_AIR, this.e.inventory.b());
+ }
+
+ // Arm swing animation
Player player = getPlayer();
PlayerAnimationEvent event = new PlayerAnimationEvent(Type.PLAYER_ANIMATION, player);
server.getPluginManager().callEvent(event);
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 275b13ba..cd482be9 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -17,10 +17,12 @@ import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.event.Event.Type;
+import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerEvent;
+import org.bukkit.event.player.PlayerInteractEvent;
public class CraftEventFactory {
private static boolean canBuild(CraftWorld world, Player player, int x, int z) {
@@ -100,4 +102,46 @@ public class CraftEventFactory {
return event;
}
+
+ /**
+ * Player Interact event
+ */
+
+ public static PlayerInteractEvent callPlayerInteractEvent(EntityHuman who, Action action, ItemStack itemstack) {
+ if (action != Action.LEFT_CLICK_AIR && action != Action.RIGHT_CLICK_AIR) {
+ throw new IllegalArgumentException();
+ }
+ return callPlayerInteractEvent(who, action, 0, 255, 0, 0, itemstack);
+ }
+ public static PlayerInteractEvent callPlayerInteractEvent(EntityHuman who, Action action, int clickedX, int clickedY, int clickedZ, int clickedFace, ItemStack itemstack) {
+ Player player = (who == null) ? null : (Player) who.getBukkitEntity();
+ CraftItemStack itemInHand = new CraftItemStack(itemstack);
+
+ CraftWorld craftWorld = (CraftWorld) player.getWorld();
+ CraftServer craftServer = (CraftServer) player.getServer();
+
+ Block blockClicked = craftWorld.getBlockAt(clickedX, clickedY, clickedZ);
+ BlockFace blockFace = CraftBlock.notchToBlockFace(clickedFace);
+
+ if (clickedY == 255) {
+ blockClicked = null;
+ switch (action) {
+ case LEFT_CLICK_BLOCK:
+ action = Action.LEFT_CLICK_AIR;
+ break;
+ case RIGHT_CLICK_BLOCK:
+ action = Action.RIGHT_CLICK_AIR;
+ break;
+ }
+ }
+
+ if (itemInHand.getType() == Material.AIR || itemInHand.getAmount() == 0) {
+ itemInHand = null;
+ }
+
+ PlayerInteractEvent event = new PlayerInteractEvent(player, action, itemInHand, blockClicked, blockFace);
+ craftServer.getPluginManager().callEvent(event);
+
+ return event;
+ }
}