From 5d50f975aa63ffd6b91aa40bab515916e57b0557 Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Tue, 7 Apr 2026 17:24:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=90=88=E6=88=90=E5=8D=A1?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BB=BB=E5=8A=A1=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rnProviderLogicVirtualCompletionMixin.java | 32 ++++++++++++++++++- .../PatternProviderLogicCompatMixin.java | 30 ++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java b/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java index ebe6889..0efe8df 100644 --- a/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java @@ -11,10 +11,13 @@ import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobAcce import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor; import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Map; + @Mixin(value = PatternProviderLogic.class, priority = 450, remap = false) public abstract class PatternProviderLogicVirtualCompletionMixin { @@ -54,7 +57,7 @@ public abstract class PatternProviderLogicVirtualCompletionMixin { var tasks = advJobAccessor.eap$getAdvTasks(); var progress = tasks.get(patternDetails); if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) { - if (advProgressAccessor.eap$getAdvValue() <= 1) { + if (eap$advancedaeShouldFinishWholeJob(tasks, advProgressAccessor)) { boolean finished = false; try { advCpu.updateOutput(null); @@ -79,4 +82,31 @@ public abstract class PatternProviderLogicVirtualCompletionMixin { } } } + + @Unique + private boolean eap$advancedaeShouldFinishWholeJob( + Map tasks, + AdvExecutingCraftingJobTaskProgressAccessor matchedProgress) { + if (matchedProgress.eap$getAdvValue() > 1) { + return false; + } + + for (var entry : tasks.entrySet()) { + var taskProgress = entry.getValue(); + if (!(taskProgress instanceof AdvExecutingCraftingJobTaskProgressAccessor advTaskProgress)) { + continue; + } + + long remaining = advTaskProgress.eap$getAdvValue(); + if (taskProgress == matchedProgress) { + remaining -= 1; + } + + if (remaining > 0) { + return false; + } + } + + return true; + } } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java index fbfbd38..ccfb07f 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java @@ -34,6 +34,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Map; import java.util.List; import java.util.UUID; @@ -146,7 +147,7 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj if (job instanceof ExecutingCraftingJobAccessor accessor) { var tasks = accessor.extendedae_plus$getTasks(); var progress = tasks.get(patternDetails); - if (progress != null && progress.extendedae_plus$getValue() <= 1) { + if (eap$compatShouldFinishWholeJob(tasks, progress)) { cluster.updateOutput(null); try { logicAccessor.extendedae_plus$invokeFinishJob(true); @@ -293,6 +294,33 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj return this.mainNode; } + @Unique + private boolean eap$compatShouldFinishWholeJob( + Map tasks, + com.extendedae_plus.mixin.ae2.accessor.ExecutingCraftingJobTaskProgressAccessor matchedProgress) { + if (matchedProgress == null || matchedProgress.extendedae_plus$getValue() > 1) { + return false; + } + + for (var entry : tasks.entrySet()) { + var taskProgress = entry.getValue(); + if (taskProgress == null) { + continue; + } + + long remaining = taskProgress.extendedae_plus$getValue(); + if (taskProgress == matchedProgress) { + remaining -= 1; + } + + if (remaining > 0) { + return false; + } + } + + return true; + } + @Inject(method = "pushPattern", at = @At("HEAD")) private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable cir) { eap$compatTryVirtualCompletion(patternDetails);