From 05d72cebb68b36df4a570e5f54380b1a2800fd0b Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 12 Oct 2026 16:53:14 +0000 Subject: [PATCH 1/2] Stop reporting invalid inputs for jobs that only wait for their interface When the target of a crafting interface refused a job's inputs, for example a furnace that was still busy, the job was marked as having invalid inputs. Jobs are only tested again when the interface has room to start one, so once another job started, the refused jobs kept that mark until the running job was done, even if the target had accepted inputs again in the meantime. Terminals showed them as failed for that whole time. Starting a job now clears the mark on the other pending jobs of the same interface, as their earlier test no longer applies. They are tested again on the next attempt, so a target that keeps refusing is still reported. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y --- .../integratedcrafting/core/CraftingJobHandler.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java b/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java index d6b7d3942..0b647373e 100644 --- a/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java +++ b/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java @@ -542,6 +542,14 @@ public void update(INetwork network, int channel, PartPos targetPos) { // Start the crafting job if (startingCraftingJob != null) { + // Other jobs that the target refused were tested against its previous state, + // so they are only waiting for this handler now, until they are tested again. + for (CraftingJob pendingCraftingJob : getPendingCraftingJobs()) { + if (pendingCraftingJob != startingCraftingJob) { + pendingCraftingJob.setInvalidInputs(false); + } + } + // Check if the job was started while blocking mode was enabled in this handler boolean blockingMode = !nonBlockingJobsRunningAmount.containsKey(startingCraftingJob.getId()) || startingCraftingJob.getAmount() == 1; From a6c9657c546b1f8da151c010206ff9a40ee6c081 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 12 Oct 2026 16:57:36 +0000 Subject: [PATCH 2/2] Only clear refused jobs once the started job was inserted If the target refused the inputs on insertion after all, its state did not change, so the other jobs keep their mark. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01C5iUzweRYoCkKB5bvJdH8Y --- .../core/CraftingJobHandler.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java b/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java index 0b647373e..7331c49f5 100644 --- a/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java +++ b/src/main/java/org/cyclops/integratedcrafting/core/CraftingJobHandler.java @@ -542,20 +542,20 @@ public void update(INetwork network, int channel, PartPos targetPos) { // Start the crafting job if (startingCraftingJob != null) { - // Other jobs that the target refused were tested against its previous state, - // so they are only waiting for this handler now, until they are tested again. - for (CraftingJob pendingCraftingJob : getPendingCraftingJobs()) { - if (pendingCraftingJob != startingCraftingJob) { - pendingCraftingJob.setInvalidInputs(false); - } - } - // Check if the job was started while blocking mode was enabled in this handler boolean blockingMode = !nonBlockingJobsRunningAmount.containsKey(startingCraftingJob.getId()) || startingCraftingJob.getAmount() == 1; // Start the actual crafting boolean couldCraft = consumeAndInsertCrafting(blockingMode, network, channel, targetPos, startingCraftingJob); + // Other jobs that the target refused were tested against its previous state, + // so they are only waiting for this handler now, until they are tested again. + if (couldCraft) { + for (CraftingJob pendingCraftingJob : getPendingCraftingJobs()) { + pendingCraftingJob.setInvalidInputs(false); + } + } + // Keep inserting as much as possible if non-blocking if (couldCraft && !blockingMode) { nonBlockingJobsRunningAmount.put(startingCraftingJob.getId(), 1);