diff --git a/src/main/java/com/extendedae_plus/config/ModConfigs.java b/src/main/java/com/extendedae_plus/config/ModConfigs.java index 7a3ae32..d74f914 100644 --- a/src/main/java/com/extendedae_plus/config/ModConfigs.java +++ b/src/main/java/com/extendedae_plus/config/ModConfigs.java @@ -11,6 +11,7 @@ public final class ModConfigs { public static final ModConfigSpec.BooleanValue PROVIDER_ROUND_ROBIN_ENABLE; public static final ModConfigSpec.BooleanValue PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT; public static final ModConfigSpec.IntValue SMART_SCALING_MAX_MULTIPLIER; + public static final ModConfigSpec.IntValue CRAFTING_PAUSE_THRESHOLD; static { ModConfigSpec.Builder builder = new ModConfigSpec.Builder(); @@ -41,6 +42,12 @@ public final class ModConfigs { ) .define("patternTerminalShowSlotsDefault", true); + CRAFTING_PAUSE_THRESHOLD = builder + .comment( + "值越大将减少AE构建合成计划过程中的 wait/notify 次数,提升吞吐但会降低调度响应性" + ) + .defineInRange("craftingPauseThreshold", 100000, 100, Integer.MAX_VALUE); + // end general builder.pop(); @@ -88,5 +95,6 @@ public final class ModConfigs { COMMON_SPEC = builder.build(); } - private ModConfigs() {} + private ModConfigs() { + } } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/CraftingCalculationMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/CraftingCalculationMixin.java new file mode 100644 index 0000000..255abd3 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/CraftingCalculationMixin.java @@ -0,0 +1,21 @@ +package com.extendedae_plus.mixin.ae2; + +import appeng.crafting.CraftingCalculation; +import com.extendedae_plus.config.ModConfigs; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; + +/** + * Mixin 用于增加 CraftingCalculation.handlePausing() 中 incTime 的阈值。 + * 调整 CRAFTING_PAUSE_THRESHOLD 可以控制计算让出控制权的频率。 + */ +@Mixin(value = CraftingCalculation.class, remap = false) +public abstract class CraftingCalculationMixin { + // 可调节的阈值:在执行 pause 检查前 handlePausing 被调用的次数。 + // 增大此值可以减少 wait/notify 的频率(提升吞吐量但降低响应速度)。 + @ModifyConstant(method = "handlePausing", constant = @Constant(intValue = 100)) + private int modifyIncTimeThreshold(int original) { + return ModConfigs.CRAFTING_PAUSE_THRESHOLD.get(); + } +} \ No newline at end of file diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 3f9f3e1..314e662 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -4,6 +4,7 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "ae2.AEProcessingPatternMixin", + "ae2.CraftingCalculationMixin", "ae2.CraftingCPUClusterMixin", "ae2.EncodedPatternItemMixin", "ae2.QuartzCuttingKnifeItemMixin", @@ -36,18 +37,18 @@ "PickFromWirelessMixin", "accessor.AbstractContainerScreenAccessor", "accessor.ScreenAccessor", - "ae2.menu.CraftConfirmMenuGoBackMixin", "ae2.accessor.AEBaseScreenAccessor", "ae2.accessor.AEBaseScreenInvoker", "ae2.accessor.MEStorageScreenAccessor", "ae2.accessor.PatternAccessTermScreenAccessor", "ae2.accessor.PatternAccessTermScreenSlotsRowAccessor", - "ae2.client.gui.InterfaceScreenMixin", "ae2.client.gui.AEBaseScreenMixin", + "ae2.client.gui.InterfaceScreenMixin", "ae2.client.gui.PatternEncodingTermScreenMixin", "ae2.client.gui.PatternProviderCloseMixin", "ae2.client.gui.PatternProviderScreenMixin", "ae2.client.gui.SlotGridLayoutMixin", + "ae2.menu.CraftConfirmMenuGoBackMixin", "extendedae.accessor.GuiExPatternTerminalAccessor", "extendedae.accessor.GuiExPatternTerminalSlotsRowAccessor", "extendedae.client.HighlightButtonMixin",