diff --git a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java index 068656db..29e79007 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/DefaultItemFilter.java @@ -77,7 +77,7 @@ public class DefaultItemFilter implements IItemFilter * This method is only called on an input filter to transfer ItemStacks from * the input inventory to the output inventory. */ - public void transferThroughInputFilter(IItemFilter outputFilter) + public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) { boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()]; if (accessedInventory instanceof ISidedInventory) @@ -108,7 +108,7 @@ public class DefaultItemFilter implements IItemFilter continue; } - int allowedAmount = inputStack.stackSize; + int allowedAmount = Math.min(inputStack.stackSize, maxTransfer); ItemStack testStack = inputStack.copy(); testStack.stackSize = allowedAmount; @@ -122,6 +122,7 @@ public class DefaultItemFilter implements IItemFilter } inputStack.stackSize -= changeAmount; + maxTransfer -= changeAmount; accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory } diff --git a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java index fbc57cdb..2b013352 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/IItemFilter.java @@ -26,7 +26,7 @@ public interface IItemFilter * This method is only called on an input filter to transfer ItemStacks from * the input inventory to the output inventory. */ - public void transferThroughInputFilter(IItemFilter outputFilter); + public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer); public boolean doesStackMatchFilter(ItemStack testStack); diff --git a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java index 72a04dc2..d48b340d 100644 --- a/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java +++ b/src/main/java/WayofTime/bloodmagic/routing/TestItemFilter.java @@ -186,7 +186,6 @@ public class TestItemFilter implements IItemFilter ItemStack testStack = inputStack.copy(); testStack.stackSize = allowedAmount; ItemStack remainderStack = Utils.insertStackIntoInventory(testStack, accessedInventory, accessedSide); -// System.out.println("Remaining stack size: " + (remainderStack != null ? remainderStack.stackSize : 0) + ", allowed amount: " + allowedAmount); int changeAmount = allowedAmount - (remainderStack == null ? 0 : remainderStack.stackSize); testStack = inputStack.copy(); @@ -213,7 +212,7 @@ public class TestItemFilter implements IItemFilter * This method is only called on an input filter to transfer ItemStacks from * the input inventory to the output inventory. */ - public void transferThroughInputFilter(IItemFilter outputFilter) + public void transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer) { boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()]; if (accessedInventory instanceof ISidedInventory) @@ -249,7 +248,7 @@ public class TestItemFilter implements IItemFilter { if (doStacksMatch(filterStack, inputStack)) { - allowedAmount = Math.min(filterStack.stackSize, inputStack.stackSize); + allowedAmount = Math.min(maxTransfer, Math.min(filterStack.stackSize, inputStack.stackSize)); break; } } @@ -263,7 +262,6 @@ public class TestItemFilter implements IItemFilter testStack.stackSize = allowedAmount; ItemStack remainderStack = outputFilter.transferStackThroughOutputFilter(testStack); int changeAmount = allowedAmount - (remainderStack == null ? 0 : remainderStack.stackSize); -// System.out.println("Change amount: " + changeAmount); if (remainderStack != null && remainderStack.stackSize == allowedAmount) { @@ -272,6 +270,7 @@ public class TestItemFilter implements IItemFilter } inputStack.stackSize -= changeAmount; + maxTransfer -= changeAmount; accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory diff --git a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java index e5a23fbb..e6bb21f2 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java +++ b/src/main/java/WayofTime/bloodmagic/tile/routing/TileMasterRoutingNode.java @@ -124,7 +124,7 @@ public class TileMasterRoutingNode extends TileInventory implements IMasterRouti List inputList = inputEntry.getValue(); for (IItemFilter inputFilter : inputList) { - inputFilter.transferThroughInputFilter(outputFilter); + inputFilter.transferThroughInputFilter(outputFilter, 1); } } }