From a91739d57b21b8553bae2c63f66deb1fc71d248e Mon Sep 17 00:00:00 2001 From: SquidDev Date: Wed, 1 May 2019 20:16:02 +0100 Subject: [PATCH] Don't markDirty() when inserting into a full slot (#177) When inserting into a full slot, the inventory is not actually modified but markDirty() is still called. This in turn sends a block update to all neighbours. When a diamond chest is full, attempting to insert into it will send 100+ block updates (one for each slot). This can cause mild performance issues. --- .../mods/ironchest/common/lib/ICChestInventoryHandler.java | 5 +++-- .../mods/ironchest/common/lib/ICShulkerInventoryHandler.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java b/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java index f963120..0fc8ef7 100644 --- a/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java +++ b/src/main/java/cpw/mods/ironchest/common/lib/ICChestInventoryHandler.java @@ -79,10 +79,11 @@ public class ICChestInventoryHandler implements IItemHandlerModifiable } else { - if (!ItemHandlerHelper.canItemStacksStack(stack, currentStack)) + int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit()) - currentStack.getCount(); + + if (accepted <= 0 || !ItemHandlerHelper.canItemStacksStack(stack, currentStack)) return stack; - int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit()) - currentStack.getCount(); if (accepted < stack.getCount()) { if (!simulate) diff --git a/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java b/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java index 0233e97..d402596 100644 --- a/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java +++ b/src/main/java/cpw/mods/ironchest/common/lib/ICShulkerInventoryHandler.java @@ -79,10 +79,11 @@ public class ICShulkerInventoryHandler implements IItemHandlerModifiable } else { - if (!ItemHandlerHelper.canItemStacksStack(stack, currentStack)) + int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit()) - currentStack.getCount(); + + if (accepted <= 0 || !ItemHandlerHelper.canItemStacksStack(stack, currentStack)) return stack; - int accepted = Math.min(stack.getMaxStackSize(), inv.getInventoryStackLimit()) - currentStack.getCount(); if (accepted < stack.getCount()) { if (!simulate)