From 51c5d4e3d7b52d5e6fa1a7ae26603896b0961fd7 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Sat, 20 Sep 2025 20:20:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=85=8D=E7=BD=AEAE?= =?UTF-8?q?=E5=90=88=E6=88=90=E6=9A=82=E5=81=9C=E6=A3=80=E6=9F=A5=E9=98=88?= =?UTF-8?q?=E5=80=BC=E4=BB=A5=E9=99=8D=E4=BD=8E=E4=B8=8A=E4=B8=8B=E6=96=87?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E9=A2=91=E7=8E=87=EF=BC=8C=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC=20100000?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extendedae_plus/config/ModConfigs.java | 10 ++++++++- .../mixin/ae2/CraftingCalculationMixin.java | 21 +++++++++++++++++++ .../resources/extendedae_plus.mixins.json | 5 +++-- 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/mixin/ae2/CraftingCalculationMixin.java 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",