From c139710cd785626d59e2f88d7de434121255cf95 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 6 Jun 2018 21:35:08 +0200 Subject: [PATCH] Retrofit the CraftingExtractor class so it can report all errors at once. Very ugly, need to clean this up. --- .../autocrafting/task/CraftingExtractor.java | 27 +++++++++++++++++-- .../task/step/CraftingStepProcess.java | 2 +- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingExtractor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingExtractor.java index 51bccdcdb..2929a92d1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingExtractor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingExtractor.java @@ -107,12 +107,35 @@ public class CraftingExtractor { status.set(i, CraftingExtractorItemStatus.MACHINE_DOES_NOT_ACCEPT); } - if (previousStatus != status.get(i)) { + CraftingExtractorItemStatus currentStatus = status.get(i); + + if (previousStatus != currentStatus) { network.getCraftingManager().onTaskChanged(); } - return; + // We only need to extract one. + // If we didn't extract successfully, try the others. + if (currentStatus == CraftingExtractorItemStatus.EXTRACTED) { + return; + } } } } + + public boolean isAllInsertable(@Nullable IItemHandler handler) { + // This method is called in the canExecute of CraftingStepProcess. + // If there is no handler, we still want to start executing so + // extractOneAndInsert can report the "no machine found" error. + if (handler == null) { + return true; + } + + for (ItemStack item : items) { + if (!ItemHandlerHelper.insertItem(handler, item, true).isEmpty()) { + return false; + } + } + + return true; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/step/CraftingStepProcess.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/step/CraftingStepProcess.java index 365959f6a..04b48a959 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/step/CraftingStepProcess.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/step/CraftingStepProcess.java @@ -26,7 +26,7 @@ public class CraftingStepProcess extends CraftingStep { public boolean canExecute() { extractor.updateStatus(); - return extractor.isAllAvailable(); + return extractor.isAllAvailable() && extractor.isAllInsertable(pattern.getContainer().getConnectedInventory()); } public int onTrackedItemInserted(ItemStack stack, int size) {