Implement InventoryMoveItemEvent. Adds BUKKIT-3765

This makes droppers, hoppers and hopper minecarts fire an
InventoryMoveItemEvent whenever an item is being moved from or to another
inventory.
This commit is contained in:
Dennis Bliefernicht
2013-03-22 08:41:37 +01:00
committed by Nate Mortensen
parent b10474253c
commit e61a6bab05
2 changed files with 58 additions and 6 deletions

View File

@@ -1,5 +1,11 @@
package net.minecraft.server;
// CraftBukkit start
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.inventory.Inventory;
// CraftBukkit end
public class BlockDropper extends BlockDispenser {
private final IDispenseBehavior cR = new DispenseBehaviorItem();
@@ -32,8 +38,18 @@ public class BlockDropper extends BlockDispenser {
ItemStack itemstack1;
if (iinventory != null) {
itemstack1 = TileEntityHopper.addItem(iinventory, itemstack.cloneItemStack().a(1), Facing.OPPOSITE_FACING[i1]);
if (itemstack1 == null) {
// CraftBukkit start - fire event when pushing items into other inventories
CraftItemStack oitemstack = CraftItemStack.asCraftMirror(itemstack.cloneItemStack().a(1));
Inventory destinationInventory = iinventory.getOwner() != null ? iinventory.getOwner().getInventory() : null;
InventoryMoveItemEvent event = new InventoryMoveItemEvent(tileentitydispenser.getOwner().getInventory(), oitemstack.clone(), destinationInventory, true);
world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return;
}
itemstack1 = TileEntityHopper.addItem(iinventory, CraftItemStack.asNMSCopy(event.getItem()), Facing.OPPOSITE_FACING[i1]);
if (event.getItem().equals(oitemstack) && itemstack1 == null) {
// CraftBukkit end
itemstack1 = itemstack.cloneItemStack();
if (--itemstack1.count == 0) {
itemstack1 = null;