diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index c4b779772..7071f491c 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -85,7 +85,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr private List clientSideMachines = new ArrayList(); private List patterns = new ArrayList(); - private List craftingTasks = new ArrayList(); + private Stack craftingTasks = new Stack(); private List craftingTasksToAdd = new ArrayList(); private List craftingTasksToCancel = new ArrayList(); @@ -143,15 +143,12 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr craftingTasks.addAll(craftingTasksToAdd); craftingTasksToAdd.clear(); - Iterator craftingTaskIterator = craftingTasks.iterator(); + if (!craftingTasks.empty()) { + ICraftingTask top = craftingTasks.peek(); + if (ticks % top.getPattern().getCrafter(worldObj).getSpeed() == 0 && top.update(this)) { + top.onDone(this); - while (craftingTaskIterator.hasNext()) { - ICraftingTask task = craftingTaskIterator.next(); - - if (ticks % task.getPattern().getCrafter(worldObj).getSpeed() == 0 && task.update(this)) { - task.onDone(this); - - craftingTaskIterator.remove(); + craftingTasks.pop(); } } } else { diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index 7723763df..736d5c704 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -67,15 +67,6 @@ public class BasicCraftingTask implements ICraftingTask { itemsTook.add(took); satisfied[i] = true; - - // This is needed because if we request 2 chests for example - // it will schedule 2 child tasks for wood the child tasks will then give 8 wood - // but the first chest task will take all the 8 wood for completion - // and then you end up with the second task not having anything anymore - // and is stuck because the child task is already created. - if (childTasks[i]) { - break; - } } else if (!childTasks[i]) { CraftingPattern pattern = controller.getPattern(input);