diff options
Diffstat (limited to 'src/main/java')
-rw-r--r--[-rwxr-xr-x] | src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java index 6773ea35..fd24050a 100755..100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java @@ -218,6 +218,47 @@ public class CraftInventory implements org.bukkit.inventory.Inventory { return leftover; } + public HashMap<Integer, ItemStack> removeItem(ItemStack... items) { + HashMap<Integer,ItemStack> leftover = new HashMap<Integer,ItemStack>(); + + // TODO: optimization + + for (int i = 0; i < items.length; i++) { + ItemStack item = items[i]; + int toDelete = item.getAmount(); + + while (true) { + int first = first(item.getType()); + + // Drat! we don't have this type in the inventory + if (first == -1) { + item.setAmount( toDelete ); + leftover.put(i, item); + } else { + ItemStack itemStack = getItem(first); + int amount = itemStack.getAmount(); + + if (amount <= toDelete) { + toDelete -= amount; + // clear the slot, all used up + clear( i ); + } else { + // split the stack and store + itemStack.setAmount( amount - toDelete ); + setItem( i, itemStack ); + toDelete = 0; + } + } + + // Bail when done + if (toDelete <= 0) { + break; + } + } + } + return leftover; + } + private int getMaxItemStack() { return getInventory().c(); } |