From fb2c51843e190f0299c98801b5b72af4dfeb2c30 Mon Sep 17 00:00:00 2001 From: pedroksl Date: Sat, 14 Sep 2024 04:09:29 -0300 Subject: [PATCH] Fixed Quantum Computer voiding secondary outputs of recipes. --- gradle.properties | 4 ++-- .../common/cluster/AdvCraftingCPU.java | 8 ++++++++ .../common/cluster/AdvCraftingCPUCluster.java | 18 +++++++++++++----- .../common/logic/AdvCraftingCPULogic.java | 18 +++++++++++++++++- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index 1a0c6453..a39565ae 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,8 +14,8 @@ loader_version_range=[4,) mod_id=advanced_ae mod_name=Advanced AE mod_license=LGPL-3.0 -mod_version=0.4.4-1.21.1 +mod_version=0.4.5-1.21.1 mod_group_id=net.pedroksl.advanced_ae mod_authors=Pedroksl mod_description=This mod aims to expand on the added capabilities of Extended AE. -use_Xei=rei \ No newline at end of file +use_Xei=emi \ No newline at end of file diff --git a/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPU.java b/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPU.java index b22aea5e..425b5745 100644 --- a/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPU.java +++ b/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPU.java @@ -85,6 +85,10 @@ public CpuSelectionMode getSelectionMode() { return cluster.getSelectionMode(); } + public boolean isInventoryEmpty() { + return this.getInventory().list.isEmpty(); + } + public void markDirty() { cluster.markDirty(); } @@ -109,6 +113,10 @@ public ListCraftingInventory getInventory() { return craftingLogic.getInventory(); } + public void deactivate() { + cluster.deactivate(plan); + } + public IActionSource getSrc() { return cluster.getSrc(); } diff --git a/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPUCluster.java b/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPUCluster.java index 8a5c20b4..7aca87a5 100644 --- a/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPUCluster.java +++ b/src/main/java/net/pedroksl/advanced_ae/common/cluster/AdvCraftingCPUCluster.java @@ -234,8 +234,9 @@ public ICraftingSubmitResult submitJob( } private void killCpu(ICraftingPlan plan, boolean updateGrid) { - var cpu = this.activeCpus.remove(plan); + var cpu = this.activeCpus.get(plan); cpu.craftingLogic.cancel(); + cpu.craftingLogic.markForDeletion(); recalculateRemainingStorage(); if (updateGrid) { updateGridForChangedCpu(this); @@ -246,14 +247,21 @@ private void killCpu(ICraftingPlan plan) { killCpu(plan, true); } + protected void deactivate(ICraftingPlan plan) { + this.activeCpus.remove(plan); + recalculateRemainingStorage(); + updateGridForChangedCpu(this); + } + public List getActiveCPUs() { var list = new ArrayList(); var killList = new ArrayList(); - for (var cpu : activeCpus.entrySet()) { - if (cpu.getValue().craftingLogic.hasJob()) { - list.add(cpu.getValue()); + for (var cpuEntry : activeCpus.entrySet()) { + var cpu = cpuEntry.getValue(); + if (cpu.craftingLogic.hasJob() || cpu.craftingLogic.isMarkedForDeletion()) { + list.add(cpu); } else { - killList.add(cpu.getKey()); + killList.add(cpuEntry.getKey()); } } for (var cpu : killList) { diff --git a/src/main/java/net/pedroksl/advanced_ae/common/logic/AdvCraftingCPULogic.java b/src/main/java/net/pedroksl/advanced_ae/common/logic/AdvCraftingCPULogic.java index 3e1dc21c..490de653 100644 --- a/src/main/java/net/pedroksl/advanced_ae/common/logic/AdvCraftingCPULogic.java +++ b/src/main/java/net/pedroksl/advanced_ae/common/logic/AdvCraftingCPULogic.java @@ -62,6 +62,8 @@ public class AdvCraftingCPULogic { private long lastModifiedOnTick = TickHandler.instance().getCurrentTick(); + private boolean markedForDeletion = false; + public AdvCraftingCPULogic(AdvCraftingCPU cpu) { this.cpu = cpu; } @@ -118,6 +120,10 @@ public void tickCraftingLogic(IEnergyService eg, CraftingService cc) { this.storeItems(); if (!this.inventory.list.isEmpty()) { cantStoreItems = true; + } else { + if (markedForDeletion) { + cpu.deactivate(); + } } return; } @@ -308,7 +314,9 @@ private void finishJob(boolean success) { // TODO: log // Clear waitingFor list and post all the relevant changes. - job.waitingFor.clear(); + if (!success) { + job.waitingFor.clear(); + } // Notify opened menus of cancelled scheduled tasks. for (var entry : job.tasks.entrySet()) { for (var output : entry.getKey().getOutputs()) { @@ -505,4 +513,12 @@ private void notifyJobOwner(ExecutingCraftingJob job, CraftingJobStatusPacket.St connectedPlayer.connection.send(message); } } + + public boolean isMarkedForDeletion() { + return this.markedForDeletion; + } + + public void markForDeletion() { + this.markedForDeletion = true; + } }