From f6c574dd04fb6c39510a0428e7effafc37093028 Mon Sep 17 00:00:00 2001 From: Travis Watkins Date: Sat, 2 Mar 2013 00:15:22 -0600 Subject: [PATCH] Implement PlayerItemConsumeEvent. Adds BUKKIT-2349 --- .../net/minecraft/server/EntityHuman.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java index 7afa68ef40..ce0715b5f8 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -6,11 +6,13 @@ import java.util.List; // CraftBukkit start import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.craftbukkit.entity.CraftItem; +import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityCombustByEntityEvent; import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerBedLeaveEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerItemConsumeEvent; // CraftBukkit end public abstract class EntityHuman extends EntityLiving implements ICommandListener { @@ -246,6 +248,32 @@ public abstract class EntityHuman extends EntityLiving implements ICommandListen if (this.f != null) { this.c(this.f, 16); int i = this.f.count; + + // CraftBukkit start + org.bukkit.inventory.ItemStack craftItem = CraftItemStack.asBukkitCopy(this.f); + PlayerItemConsumeEvent event = new PlayerItemConsumeEvent((Player) this.getBukkitEntity(), craftItem); + world.getServer().getPluginManager().callEvent(event); + + if (event.isCancelled()) { + // Update client + if (this instanceof EntityPlayer) { + ((EntityPlayer) this).playerConnection.sendPacket(new Packet103SetSlot((byte) 0, activeContainer.a((IInventory) this.inventory, this.inventory.itemInHandIndex).index, this.f)); + } + return; + } + + // Plugin modified the item, process it but don't remove it + if (!craftItem.equals(event.getItem())) { + CraftItemStack.asNMSCopy(event.getItem()).b(this.world, this); + + // Update client + if (this instanceof EntityPlayer) { + ((EntityPlayer) this).playerConnection.sendPacket(new Packet103SetSlot((byte) 0, activeContainer.a((IInventory) this.inventory, this.inventory.itemInHandIndex).index, this.f)); + } + return; + } + // CraftBukkit end + ItemStack itemstack = this.f.b(this.world, this); if (itemstack != this.f || itemstack != null && itemstack.count != i) {