Paper/Spigot-Server-Patches/0276-Inventory-removeItemAnySlot.patch
Mariell Hoversholm 654b792caf Updated Upstream (CraftBukkit)
Upstream has released updates that appears to apply and compile correctly.
This update has not been tested by PaperMC and as with ANY update, please do your own testing

CraftBukkit Changes:
a339310c #755: Fix NPE when calling getInventory() for virtual EnderChests
2577f9bf Increase outdated build delay
1dabfdc8 #754: Fix pre-1.16 serialized SkullMeta being broken on 1.16+, losing textures
2020-09-27 11:04:51 -04:00

59 lines
2.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Zach Brown <zach.brown@destroystokyo.com>
Date: Tue, 28 Aug 2018 23:04:15 -0400
Subject: [PATCH] Inventory#removeItemAnySlot
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
index 28b8f5f61872f4c21c81c524029454a2aaf74ea6..5e0180ac658db9d7c9d90fd3d3c4eddf6f34c90d 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java
@@ -223,10 +223,16 @@ public class CraftInventory implements Inventory {
}
private int first(ItemStack item, boolean withAmount) {
+ // Paper start
+ return first(item, withAmount, getStorageContents());
+ }
+
+ private int first(ItemStack item, boolean withAmount, ItemStack[] inventory) {
+ // Paper end
if (item == null) {
return -1;
}
- ItemStack[] inventory = getStorageContents();
+ //ItemStack[] inventory = getStorageContents(); // Paper - let param deal
for (int i = 0; i < inventory.length; i++) {
if (inventory[i] == null) continue;
@@ -349,6 +355,17 @@ public class CraftInventory implements Inventory {
@Override
public HashMap<Integer, ItemStack> removeItem(ItemStack... items) {
+ // Paper start
+ return removeItem(false, items);
+ }
+
+ @Override
+ public HashMap<Integer, ItemStack> removeItemAnySlot(ItemStack... items) {
+ return removeItem(true, items);
+ }
+
+ private HashMap<Integer, ItemStack> removeItem(boolean searchEntire, ItemStack... items) {
+ // Paper end
Validate.notNull(items, "Items cannot be null");
HashMap<Integer, ItemStack> leftover = new HashMap<Integer, ItemStack>();
@@ -359,7 +376,10 @@ public class CraftInventory implements Inventory {
int toDelete = item.getAmount();
while (true) {
- int first = first(item, false);
+ // Paper start - Allow searching entire contents
+ ItemStack[] toSearch = searchEntire ? getContents() : getStorageContents();
+ int first = first(item, false, toSearch);
+ // Paper end
// Drat! we don't have this type in the inventory
if (first == -1) {