diff --git a/build.gradle b/build.gradle index d0c7699..1f33000 100644 --- a/build.gradle +++ b/build.gradle @@ -80,13 +80,14 @@ dependencies { annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" - modCompileOnly "curse.maven:applied-flux-965012:${applied_flux_version}" + modCompileOnly "curse.maven:applied-flux-965012:${applied_flux_version}" modCompileOnly "curse.maven:mega-cells-622112:${mega_cells_version}" modCompileOnly "curse.maven:jade-324717:${jade_version}" // GregTech modCompileOnly "curse.maven:gregtechceu-modern-890405:${gregtech_version}" modCompileOnly "curse.maven:ldlib-626676:${ldlib_version}" + modCompileOnly files('libs/gtlcore-1.2.2.1-fix5.jar') //curios modRuntimeOnly "curse.maven:curios-309927:${curios_version}" diff --git a/gradle.properties b/gradle.properties index 15586e8..e418faf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G loom.platform = forge # Mod properties -mod_version = 1.4.1.beta +mod_version = 1.4.1-beta-gtm maven_group = com.extendedae_plus archives_name = extendedae_plus @@ -26,7 +26,7 @@ rei_version=12.0.622 cloth_config_version=9.0.94 projecte_version=4901949 appliede_version=5364294 -gregtech_version=5369020 +gregtech_version=5753724 ldlib_version=5394816 ie_version=5224387 mixin_version=0.8.4 diff --git a/libs/gtlcore-1.2.2.1-fix5.jar b/libs/gtlcore-1.2.2.1-fix5.jar new file mode 100644 index 0000000..f5504ee Binary files /dev/null and b/libs/gtlcore-1.2.2.1-fix5.jar differ diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/AEProcessingPatternMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/AEProcessingPatternMixin.java index 4381601..28030b2 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/AEProcessingPatternMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/AEProcessingPatternMixin.java @@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.Unique; @Mixin(value = AEProcessingPattern.class, remap = false) public class AEProcessingPatternMixin implements SmartDoublingAwarePattern { @Unique - private boolean eap$allowScaling = true; // 默认允许缩放 + private boolean eap$allowScaling = false; // 默认不允许缩放 @Override public boolean eap$allowScaling() { diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java deleted file mode 100644 index 1ff3e78..0000000 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/adaptation/AdvPatternProviderLogicContainsRedirectMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.extendedae_plus.mixin.ae2.autopattern.adaptation; - -import appeng.api.crafting.IPatternDetails; -import com.extendedae_plus.content.ScaledProcessingPattern; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Pseudo; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import java.util.List; - -/**适配 - * Redirect PatternProviderLogic.pushPattern 中对 List.contains 的调用, - * 在遇到缩放样板时回退匹配到原始样板实例。 - */ -@Pseudo -@Mixin(targets = "net.pedroksl.advanced_ae.common.logic.AdvPatternProviderLogic", remap = false) -public class AdvPatternProviderLogicContainsRedirectMixin { - - @Redirect(method = "pushPattern", - at = @At( - value = "INVOKE", - target = "Ljava/util/List;contains(Ljava/lang/Object;)Z") - ) - private boolean eap$patternsContains(List list, Object o) { - try { - if (o instanceof ScaledProcessingPattern scaled) { - IPatternDetails base = scaled.getOriginal(); - if (base != null && list.indexOf(base) != -1) { - return true; - } - } - // 使用 indexOf 避免再次触发对 List.contains 的 redirect(防止递归) - return list.indexOf(o) != -1; - } catch (Throwable t) { - return list.indexOf(o) != -1; - } - } -} \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/GTLCoreMEPatternBufferPartMachineMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/GTLCoreMEPatternBufferPartMachineMixin.java index c82b605..c939567 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/GTLCoreMEPatternBufferPartMachineMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/GTLCoreMEPatternBufferPartMachineMixin.java @@ -1,20 +1,47 @@ package com.extendedae_plus.mixin.ae2.autopattern.gtceu; import appeng.api.crafting.IPatternDetails; +import appeng.crafting.pattern.AEProcessingPattern; +import com.extendedae_plus.api.SmartDoublingAwarePattern; import com.extendedae_plus.content.ScaledProcessingPattern; import com.google.common.collect.BiMap; +import org.gtlcore.gtlcore.common.machine.multiblock.part.ae.MEPatternBufferPartMachine; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.List; import java.util.Map; import java.util.Objects; +import static com.extendedae_plus.util.ExtendedAELogger.LOGGER; + @Pseudo -@Mixin(targets = "org.gtlcore.gtlcore.common.machine.multiblock.part.ae.MEPatternBufferPartMachine",remap = false) +@Mixin(value = MEPatternBufferPartMachine.class, remap = false) public class GTLCoreMEPatternBufferPartMachineMixin { + @Final + @Shadow + private BiMap patternSlotMap; + + // 设置样板总成是否翻倍 + @Inject(method = "getAvailablePatterns", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;toList()Ljava/util/List;", shift = At.Shift.BEFORE)) + private void beforeToList(CallbackInfoReturnable> cir) { + if (patternSlotMap == null) return; + for (Map.Entry entry : patternSlotMap.entrySet()) { + IPatternDetails key = entry.getKey(); + if (key instanceof AEProcessingPattern proc && proc instanceof SmartDoublingAwarePattern aware) { + aware.eap$setAllowScaling(true); + LOGGER.info("设置true,{}", aware); + } + } + } + // 重定向containsKey检查 @Redirect(method = "pushPattern(Lappeng/api/crafting/IPatternDetails;[Lappeng/api/stacks/KeyCounter;)Z", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;containsKey(Ljava/lang/Object;)Z")) diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/MEPatternBufferPartMachineMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/MEPatternBufferPartMachineMixin.java index 90c7ab1..fa57b22 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/MEPatternBufferPartMachineMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/gtceu/MEPatternBufferPartMachineMixin.java @@ -1,20 +1,47 @@ package com.extendedae_plus.mixin.ae2.autopattern.gtceu; import appeng.api.crafting.IPatternDetails; +import appeng.crafting.pattern.AEProcessingPattern; +import com.extendedae_plus.api.SmartDoublingAwarePattern; import com.extendedae_plus.content.ScaledProcessingPattern; import com.google.common.collect.BiMap; +import com.gregtechceu.gtceu.integration.ae2.machine.MEPatternBufferPartMachine; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.List; import java.util.Map; import java.util.Objects; -; +import static com.extendedae_plus.util.ExtendedAELogger.LOGGER; -@Mixin(targets = "com.gregtechceu.gtceu.integration.ae2.machine.MEPatternBufferPartMachine",remap = false) +@Pseudo +@Mixin(value = MEPatternBufferPartMachine.class, remap = false) public class MEPatternBufferPartMachineMixin { + @Shadow + @Final + private BiMap detailsSlotMap; + + // 设置样板总成是否翻倍 + @Inject(method = "getAvailablePatterns", at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;toList()Ljava/util/List;", shift = At.Shift.BEFORE)) + private void beforeToList(CallbackInfoReturnable> cir) { + if (detailsSlotMap == null) return; + for (Map.Entry entry : detailsSlotMap.entrySet()) { + IPatternDetails key = entry.getKey(); + if (key instanceof AEProcessingPattern proc && proc instanceof SmartDoublingAwarePattern aware) { + aware.eap$setAllowScaling(true); + LOGGER.info("设置true,{}", aware); + } + } + } + // 重定向containsKey检查 @Redirect(method = "pushPattern(Lappeng/api/crafting/IPatternDetails;[Lappeng/api/stacks/KeyCounter;)Z", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/BiMap;containsKey(Ljava/lang/Object;)Z")) diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 9df4da8..8fd3bc6 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -41,7 +41,6 @@ "ae2.autopattern.CraftingTreeNodeMixin", "ae2.autopattern.CraftingTreeProcessMixin", "ae2.autopattern.PatternProviderLogicContainsRedirectMixin", - "ae2.autopattern.adaptation.AdvPatternProviderLogicContainsRedirectMixin", "ae2.autopattern.gtceu.GTLCoreMEPatternBufferPartMachineMixin", "ae2.autopattern.gtceu.MEPatternBufferPartMachineMixin", "ae2.helpers.PatternProviderLogicAdvancedMixin",