From 80b2194a8585eec1134dec5a4e2d63d69fa000fd Mon Sep 17 00:00:00 2001 From: GaLi Date: Mon, 24 Nov 2025 18:25:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BBADV=E7=9A=84=E9=80=82?= =?UTF-8?q?=E9=85=8Dmixin=E5=88=B0=E5=8D=95=E7=8B=ACmixin&mixinPlugin?= =?UTF-8?q?=E4=B8=AD=E5=A2=9E=E5=8A=A0=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E8=AF=A5mixin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...tternProviderLogicVirtualCompatBridge.java | 12 ++++ ...rnProviderLogicVirtualCompletionMixin.java | 67 +++++++++++++++++++ .../PatternProviderLogicCompatMixin.java | 39 +++++------ .../resources/extendedae_plus.mixins.json | 1 + 4 files changed, 97 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/compat/PatternProviderLogicVirtualCompatBridge.java create mode 100644 src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java diff --git a/src/main/java/com/extendedae_plus/compat/PatternProviderLogicVirtualCompatBridge.java b/src/main/java/com/extendedae_plus/compat/PatternProviderLogicVirtualCompatBridge.java new file mode 100644 index 0000000..dd97043 --- /dev/null +++ b/src/main/java/com/extendedae_plus/compat/PatternProviderLogicVirtualCompatBridge.java @@ -0,0 +1,12 @@ +package com.extendedae_plus.compat; + +import appeng.api.networking.IGrid; +import appeng.api.networking.IManagedGridNode; + +public interface PatternProviderLogicVirtualCompatBridge { + boolean eap$compatIsVirtualCraftingEnabled(); + + IGrid eap$compatGetGrid(); + + IManagedGridNode eap$compatGetMainNode(); +} 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 new file mode 100644 index 0000000..51ebd80 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/advancedae/compat/PatternProviderLogicVirtualCompletionMixin.java @@ -0,0 +1,67 @@ +package com.extendedae_plus.mixin.advancedae.compat; + +import appeng.api.networking.crafting.ICraftingCPU; +import appeng.api.networking.crafting.ICraftingService; +import appeng.api.crafting.IPatternDetails; +import appeng.api.stacks.KeyCounter; +import appeng.helpers.patternprovider.PatternProviderLogic; +import com.extendedae_plus.compat.PatternProviderLogicVirtualCompatBridge; +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 net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(value = PatternProviderLogic.class, priority = 450, remap = false) +public abstract class PatternProviderLogicVirtualCompletionMixin { + + @Inject(method = "pushPattern", at = @At("RETURN")) + private void eap$advancedaeVirtualCompletion(IPatternDetails patternDetails, KeyCounter[] inputHolder, + CallbackInfoReturnable cir) { + if (!cir.getReturnValueZ()) { + return; + } + if (!(this instanceof PatternProviderLogicVirtualCompatBridge bridge)) { + return; + } + if (!bridge.eap$compatIsVirtualCraftingEnabled()) { + return; + } + + var grid = bridge.eap$compatGetGrid(); + if (grid == null) { + return; + } + + ICraftingService craftingService = grid.getCraftingService(); + if (craftingService == null) { + return; + } + + for (ICraftingCPU cpu : craftingService.getCpus()) { + if (!cpu.isBusy()) { + 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 instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) { + if (advProgressAccessor.eap$getAdvValue() <= 1) { + advCpu.cancelJob(); + break; + } + } + } + } + } + } + } +} 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 36b39b7..006691c 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 @@ -12,19 +12,16 @@ import appeng.api.upgrades.UpgradeInventories; import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogicHost; import appeng.me.cluster.implementations.CraftingCPUCluster; -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.ae.wireless.WirelessSlaveLink; import com.extendedae_plus.ae.wireless.endpoint.GenericNodeEndpointImpl; import com.extendedae_plus.api.bridge.IInterfaceWirelessLinkBridge; +import com.extendedae_plus.compat.PatternProviderLogicVirtualCompatBridge; import com.extendedae_plus.compat.UpgradeSlotCompat; import com.extendedae_plus.init.ModItems; import com.extendedae_plus.items.materials.ChannelCardItem; import com.extendedae_plus.mixin.ae2.accessor.CraftingCpuLogicAccessor; import com.extendedae_plus.mixin.ae2.accessor.ExecutingCraftingJobAccessor; import com.extendedae_plus.util.Logger; -import net.pedroksl.advanced_ae.common.cluster.AdvCraftingCPU; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Final; @@ -45,7 +42,7 @@ import java.util.List; * 根据appflux是否存在来决定是否实现IUpgradeableObject接口 */ @Mixin(value = PatternProviderLogic.class, priority = 500, remap = false) -public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObject, IInterfaceWirelessLinkBridge { +public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObject, IInterfaceWirelessLinkBridge, PatternProviderLogicVirtualCompatBridge { @Unique private IUpgradeInventory eap$compatUpgrades = UpgradeInventories.empty(); @@ -148,23 +145,6 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj } } } - 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 instanceof AdvExecutingCraftingJobTaskProgressAccessor advProgressAccessor) { - if (advProgressAccessor.eap$getAdvValue() <= 1) { - advCpu.cancelJob(); - break; - } - } - } - } } } } @@ -274,6 +254,21 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj } } + @Override + public boolean eap$compatIsVirtualCraftingEnabled() { + return this.eap$compatVirtualCraftingEnabled; + } + + @Override + public IGrid eap$compatGetGrid() { + return this.getGrid(); + } + + @Override + public IManagedGridNode eap$compatGetMainNode() { + return this.mainNode; + } + @Inject(method = "pushPattern", at = @At("HEAD")) private void eap$compatOnPushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder, CallbackInfoReturnable cir) { eap$compatTryVirtualCompletion(patternDetails); diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index ad7d460..7add0ae 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -46,6 +46,7 @@ "advancedae.helpers.AdvPatternProviderLogicDoublingMixin", "advancedae.menu.AdvPatternProviderMenuAdvancedMixin", "advancedae.menu.AdvPatternProviderMenuDoublingMixin", + "advancedae.compat.PatternProviderLogicVirtualCompletionMixin", "ae2.AEProcessingPatternMixin", "ae2.CraftingCalculationMixin", "ae2.CraftingCPUClusterMixin",