diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java new file mode 100644 index 0000000..c505380 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvCraftingCPULogicAccessor.java @@ -0,0 +1,13 @@ +package com.extendedae_plus.mixin.advancedae.accessor; + +import net.pedroksl.advanced_ae.common.logic.AdvCraftingCPULogic; +import net.pedroksl.advanced_ae.common.logic.ExecutingCraftingJob; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = AdvCraftingCPULogic.class, remap = false) +public interface AdvCraftingCPULogicAccessor { + + @Accessor("job") + ExecutingCraftingJob eap$getAdvJob(); +} diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvExecutingCraftingJobAccessor.java b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvExecutingCraftingJobAccessor.java new file mode 100644 index 0000000..050ee8d --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvExecutingCraftingJobAccessor.java @@ -0,0 +1,15 @@ +package com.extendedae_plus.mixin.advancedae.accessor; + +import appeng.api.crafting.IPatternDetails; +import net.pedroksl.advanced_ae.common.logic.ExecutingCraftingJob; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(value = ExecutingCraftingJob.class, remap = false) +public interface AdvExecutingCraftingJobAccessor { + + @Accessor("tasks") + Map eap$getAdvTasks(); +} diff --git a/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvExecutingCraftingJobTaskProgressAccessor.java b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvExecutingCraftingJobTaskProgressAccessor.java new file mode 100644 index 0000000..f26631d --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/accessor/AdvExecutingCraftingJobTaskProgressAccessor.java @@ -0,0 +1,11 @@ +package com.extendedae_plus.mixin.advancedae.accessor; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(targets = "net.pedroksl.advanced_ae.common.logic.ExecutingCraftingJob$TaskProgress", remap = false) +public interface AdvExecutingCraftingJobTaskProgressAccessor { + + @Accessor("value") + long eap$getAdvValue(); +} 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 d55e0f7..b401b6f 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 @@ -15,6 +15,9 @@ import appeng.me.cluster.implementations.CraftingCPUCluster; import com.extendedae_plus.ae.items.ChannelCardItem; import com.extendedae_plus.bridge.CompatUpgradeProvider; import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge; +import com.extendedae_plus.mixin.advancedae.accessor.AdvCraftingCPULogicAccessor; +import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobAccessor; +import com.extendedae_plus.mixin.advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor; import com.extendedae_plus.compat.UpgradeSlotCompat; import com.extendedae_plus.init.ModItems; import com.extendedae_plus.mixin.ae2.accessor.CraftingCpuLogicAccessor; @@ -26,6 +29,7 @@ import com.extendedae_plus.wireless.endpoint.GenericNodeEndpointImpl; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -530,6 +534,41 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr } } } + continue; + } + if (cpu instanceof AdvCraftingCPU advCpu) { + var logic = advCpu.craftingLogic; + if (logic instanceof AdvCraftingCPULogicAccessor advLogicAccessor) { + var job = advLogicAccessor.eap$getAdvJob(); + if (job != null && job instanceof AdvExecutingCraftingJobAccessor advJobAccessor) { + var tasks = advJobAccessor.eap$getAdvTasks(); + var progress = tasks.get(patternDetails); + if (progress == null && patternDetails != null) { + var patternDefinition = patternDetails.getDefinition(); + for (var entry : tasks.entrySet()) { + var taskPattern = entry.getKey(); + if (taskPattern == patternDetails) { + progress = entry.getValue(); + break; + } + if (taskPattern != null && patternDefinition != null) { + var taskDefinition = taskPattern.getDefinition(); + if (taskDefinition != null && taskDefinition.equals(patternDefinition)) { + progress = entry.getValue(); + break; + } + } + } + } + + if (progress instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) { + if (advProgressAccessor.eap$getAdvValue() <= 1) { + advCpu.cancelJob(); + break; + } + } + } + } } } } diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index d70901b..733ca40 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -7,6 +7,9 @@ "advancedae.AdvPatternProviderLogicContainsRedirectMixin", "advancedae.accessor.AdvPatternProviderLogicPatternsAccessor", "advancedae.accessor.AdvPatternProviderMenuAdvancedAccessor", + "advancedae.accessor.AdvCraftingCPULogicAccessor", + "advancedae.accessor.AdvExecutingCraftingJobAccessor", + "advancedae.accessor.AdvExecutingCraftingJobTaskProgressAccessor", "advancedae.helpers.AdvPatternProviderLogicAdvancedMixin", "advancedae.helpers.AdvPatternProviderLogicDoublingMixin", "advancedae.menu.AdvPatternProviderMenuAdvancedMixin",