From f251f39b983e863104373a7864a7b6c752cbc7cc Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 4 May 2016 18:09:23 +0200 Subject: [PATCH] Improve crafting processing code (untested) --- .../refinedstorage/tile/TileController.java | 18 ++++++----- .../task/ProcessingCraftingTask.java | 30 ++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index b810e9813..0fe16ce6e 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -62,7 +62,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor private List clientSideMachines = new ArrayList(); private List patterns = new ArrayList(); - private Stack craftingTasks = new Stack(); + private List craftingTasks = new ArrayList(); private Set visited = new HashSet(); @@ -172,13 +172,15 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor } } - if (craftingTasks.size() > 0) { - ICraftingTask task = craftingTasks.peek(); + Iterator craftingTaskIterator = craftingTasks.iterator(); + + while (craftingTaskIterator.hasNext()) { + ICraftingTask task = craftingTaskIterator.next(); if (ticks % task.getPattern().getCrafter().getSpeed() == 0 && task.update(this)) { task.onDone(this); - craftingTasks.pop(); + craftingTaskIterator.remove(); } } @@ -196,10 +198,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor wirelessGridConsumers.removeAll(wirelessGridConsumersMarkedForRemoval); wirelessGridConsumersMarkedForRemoval.clear(); - Iterator it = wirelessGridConsumers.iterator(); + Iterator gridConsumerIterator = wirelessGridConsumers.iterator(); - while (it.hasNext()) { - WirelessGridConsumer consumer = it.next(); + while (gridConsumerIterator.hasNext()) { + WirelessGridConsumer consumer = gridConsumerIterator.next(); if (!InventoryUtils.compareStack(consumer.getWirelessGrid(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { consumer.getPlayer().closeScreen(); // This will call onContainerClosed on the Container and remove it from the list @@ -251,7 +253,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor } public void addCraftingTask(ICraftingTask task) { - craftingTasks.push(task); + craftingTasks.add(task); } public List getPatterns() { diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java index 377d6fe3b..49f2d1999 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java @@ -2,6 +2,7 @@ package refinedstorage.tile.autocrafting.task; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityHopper; import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; @@ -10,11 +11,12 @@ import refinedstorage.util.InventoryUtils; public class ProcessingCraftingTask implements ICraftingTask { private CraftingPattern pattern; - private boolean inserted; + private boolean inserted[]; private boolean satisfied[]; public ProcessingCraftingTask(CraftingPattern pattern) { this.pattern = pattern; + this.inserted = new boolean[pattern.getInputs().length]; this.satisfied = new boolean[pattern.getOutputs().length]; } @@ -25,18 +27,26 @@ public class ProcessingCraftingTask implements ICraftingTask { @Override public boolean update(TileController controller) { - if (!inserted) { - for (ItemStack input : pattern.getInputs()) { - ItemStack take = controller.take(input); + for (int i = 0; i < inserted.length; ++i) { + if (!inserted[i]) { + ItemStack input = pattern.getInputs()[i]; + ItemStack took = controller.take(input); - if (take != null) { + if (took != null) { TileCrafter crafter = pattern.getCrafter(); + TileEntity crafterFacing = crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection())); - TileEntityHopper.putStackInInventoryAllSlots((IInventory) crafter.getWorld().getTileEntity(crafter.getPos().offset(crafter.getDirection())), take, crafter.getDirection().getOpposite()); + if (crafterFacing instanceof IInventory) { + ItemStack remaining = TileEntityHopper.putStackInInventoryAllSlots((IInventory) crafterFacing, took, crafter.getDirection().getOpposite()); + + if (remaining == null) { + inserted[i] = true; + } else { + controller.push(input); + } + } } } - - inserted = true; } for (int i = 0; i < satisfied.length; ++i) { @@ -48,9 +58,9 @@ public class ProcessingCraftingTask implements ICraftingTask { return true; } - public void onInserted(ItemStack in) { + public void onInserted(ItemStack inserted) { for (int i = 0; i < pattern.getOutputs().length; ++i) { - if (!satisfied[i] && InventoryUtils.compareStack(in, pattern.getOutputs()[i])) { + if (!satisfied[i] && InventoryUtils.compareStack(inserted, pattern.getOutputs()[i])) { satisfied[i] = true; } }