From eb2619b6de50211ca913dcd0e764d1324f1eb75d Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Wed, 8 Jun 2022 20:20:32 +0200 Subject: [PATCH] better handle buggy IItemHandlers --- src/main/scala/li/cil/oc/util/InventoryUtils.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/scala/li/cil/oc/util/InventoryUtils.scala b/src/main/scala/li/cil/oc/util/InventoryUtils.scala index 8fc41876f..d01c7714d 100644 --- a/src/main/scala/li/cil/oc/util/InventoryUtils.scala +++ b/src/main/scala/li/cil/oc/util/InventoryUtils.scala @@ -133,7 +133,7 @@ object InventoryUtils { val stack = inventory.getStackInSlot(slot) if (stack.isEmpty || limit <= 0 || stack.getCount <= 0) return 0 - var amount = stack.getMaxStackSize min stack.getCount min limit + var amount = stack.getMaxStackSize min stack.getCount min limit inventory.extractItem(slot, amount, true) match { case simExtracted: ItemStack => val extracted = simExtracted.copy @@ -142,9 +142,13 @@ object InventoryUtils { val count = (amount - extracted.getCount) max 0 if (count > 0) inventory.extractItem(slot, count, false) match { case realExtracted: ItemStack if realExtracted.getCount == count => consumer(realExtracted, false) - case _ => + case realExtracted => OpenComputers.log.warn("An IItemHandler instance acted differently between simulated and non-simulated extraction. Offender: " + inventory) - } + // Attempt inserting the stack anyway, to minimize world-side item loss. + if (realExtracted != null && !realExtracted.isEmpty) { + consumer(realExtracted, false) + } + } count case _ => 0 }