diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java index c1a5499b5..f1c984b4f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -39,6 +39,7 @@ public class CraftingManager implements ICraftingManager { private List craftingTasksToAdd = new ArrayList<>(); private List craftingTasksToCancel = new ArrayList<>(); private List craftingTasksToRead = new ArrayList<>(); + private List runningSteps = new ArrayList<>(); private int ticks; @@ -190,6 +191,12 @@ public class CraftingManager implements ICraftingManager { } } + runningSteps = craftingTasks.stream() + .map(ICraftingTask::getSteps) + .flatMap(List::stream) + .filter(ICraftingStep::hasStartedProcessing) + .collect(Collectors.toList()); + if (craftingTasksChanged) { network.getNetwork().markCraftingMonitorForUpdate(); } @@ -255,11 +262,9 @@ public class CraftingManager implements ICraftingManager { public void track(ItemStack stack, int size) { ItemStack inserted = ItemHandlerHelper.copyStackWithSize(stack, size); - for (ICraftingTask task : craftingTasks) { - for (ICraftingStep processable : task.getSteps().stream().filter(ICraftingStep::hasStartedProcessing).collect(Collectors.toList())) { - if (processable.onReceiveOutput(inserted)) { - return; - } + for (ICraftingStep step : runningSteps) { + if (step.onReceiveOutput(inserted)) { + return; } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java index 604ceb02e..f160caf20 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java @@ -103,7 +103,7 @@ public abstract class CraftingStep implements ICraftingStep { @Override public List getPreliminarySteps() { - return preliminarySteps; + return preliminarySteps != null ? preliminarySteps : Collections.emptyList(); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java index bf6856a7c..5106ca924 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStepCraft.java @@ -90,6 +90,9 @@ public class CraftingStepCraft extends CraftingStep { toInsertItems.add(byproduct.copy()); } } + } else { + // Couldn't extract items + startedProcessing = false; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index be47ea446..40c4d7d06 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -356,6 +356,21 @@ public class CraftingTask implements ICraftingTask { return false; } + // We need to copy the size cause we'll re-add unadded stacks to the queue + // Do inserting on the next tick, reliefs CPU time during insertion + // See TileController#runningSteps + int times = toInsertItems.size(); + for (int i = 0; i < times; i++) { + ItemStack insert = toInsertItems.poll(); + if (insert != null) { + ItemStack remainder = network.insertItemTracked(insert, insert.getCount()); + + if (remainder != null) { + toInsertItems.add(remainder); + } + } + } + // Collect all leaf steps List leafSteps = new LinkedList<>(); Queue steps = new LinkedList<>(); @@ -391,18 +406,7 @@ public class CraftingTask implements ICraftingTask { } } - // We need to copy the size cause we'll re-add unadded stacks to the queue - int times = toInsertItems.size(); - for (int i = 0; i < times; i++) { - ItemStack insert = toInsertItems.poll(); - if (insert != null) { - ItemStack remainder = network.insertItemTracked(insert, insert.getCount()); - if (remainder != null) { - toInsertItems.add(remainder); - } - } - } if (getSteps().stream().filter(ICraftingStep::hasStartedProcessing).count() == 0) { // When there is no started processes, restart the task. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 4fd2f358e..8e2b6a7ca 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -152,11 +152,8 @@ public class ProxyCommon { registerTile(TileFluidStorage.class, "fluid_storage"); registerTile(TileDiskManipulator.class, "disk_manipulator"); registerTile(TileSecurityManager.class, "security_manager"); - - if (READER_WRITER_ENABLED) { - registerTile(TileReader.class, "reader"); - registerTile(TileWriter.class, "writer"); - } + registerTile(TileReader.class, "reader"); + registerTile(TileWriter.class, "writer"); registerBlock(RSBlocks.CONTROLLER); registerBlock(RSBlocks.GRID);