From b717d33f8f48664fb68e06c0643d1cd764087512 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Thu, 4 Sep 2025 02:21:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=99=BA=E8=83=BD=E5=80=8D=E5=A2=9E?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=AF=B9=E5=B0=8F=E8=AF=B7=E6=B1=82=E4=BA=A7?= =?UTF-8?q?=E7=94=9F=E9=A2=9D=E5=A4=96=E5=8C=85=E8=A3=85=E4=B8=8E=E5=BC=80?= =?UTF-8?q?=E9=94=80=EF=BC=8C=E9=BB=98=E8=AE=A4=E9=98=88=E5=80=BC=E4=B8=BA?= =?UTF-8?q?=204=EF=BC=8C=E5=8F=AF=E5=9C=A8=E9=85=8D=E7=BD=AE=E4=B8=AD?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/extendedae_plus/config/ModConfigs.java | 8 ++++++++ .../extendedae_plus/util/PatternScaler.java | 18 ++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/extendedae_plus/config/ModConfigs.java b/src/main/java/com/extendedae_plus/config/ModConfigs.java index e07f9dc..5f8e545 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 ForgeConfigSpec.BooleanValue PROVIDER_ROUND_ROBIN_ENABLE; public static final ForgeConfigSpec.BooleanValue PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT; public static final ForgeConfigSpec.IntValue SMART_SCALING_MAX_MULTIPLIER; + public static final ForgeConfigSpec.IntValue SMART_SCALING_MIN_BENEFIT_FACTOR; static { ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); @@ -61,6 +62,13 @@ public final class ModConfigs { "此倍数是针对单次样板产出的放大倍数上限,用于限制一次推送中按倍增缩放的规模") .defineInRange("smartScalingMaxMultiplier", 0, 0, 1048576); + // 智能倍增最小收益因子:若 requestedAmount < perOperationTarget * 此因子,则不启用缩放(默认 4) + SMART_SCALING_MIN_BENEFIT_FACTOR = builder + .comment( + "智能倍增最小收益因子(默认 4)", + "当目标请求量小于 perOperationTarget * 此因子 时,智能倍增将不被启用以避免无意义包装") + .defineInRange("smartScalingMinBenefitFactor", 4, 1, 1024); + // 模式访问终端(ExtendedAE 图样终端)默认是否显示槽位渲染(SlotsRow)。 // true: 默认显示(可通过界面按钮临时隐藏);false: 默认隐藏(可通过按钮显示) PATTERN_TERMINAL_SHOW_SLOTS_DEFAULT = builder diff --git a/src/main/java/com/extendedae_plus/util/PatternScaler.java b/src/main/java/com/extendedae_plus/util/PatternScaler.java index 4624e27..12acabd 100644 --- a/src/main/java/com/extendedae_plus/util/PatternScaler.java +++ b/src/main/java/com/extendedae_plus/util/PatternScaler.java @@ -1,15 +1,11 @@ package com.extendedae_plus.util; -import appeng.api.crafting.IPatternDetails.IInput; import appeng.api.stacks.AEKey; import appeng.api.stacks.GenericStack; import appeng.crafting.pattern.AEProcessingPattern; -import com.extendedae_plus.content.ScaledProcessingPattern; import com.extendedae_plus.api.SmartDoublingAwarePattern; import com.extendedae_plus.config.ModConfigs; - - -import static com.extendedae_plus.util.ExtendedAELogger.LOGGER; +import com.extendedae_plus.content.ScaledProcessingPattern; public final class PatternScaler { private PatternScaler() { @@ -24,9 +20,6 @@ public final class PatternScaler { return null; } - GenericStack[] baseSparseInputs = base.getSparseInputs(); - GenericStack[] baseSparseOutputs = base.getSparseOutputs(); - IInput[] baseInputs = base.getInputs(); GenericStack[] baseOutputs = base.getOutputs(); // 新逻辑:不再对样板进行单位化处理 @@ -61,6 +54,15 @@ public final class PatternScaler { long needed = requestedAmount / perOperationTarget + ((requestedAmount % perOperationTarget) == 0 ? 0 : 1); multiplier = needed <= 1L ? 1L : needed; } + // 小请求绕过:若请求量小且不会带来收益,则不启用缩放(返回 null) + try { + int minBenefit = ModConfigs.SMART_SCALING_MIN_BENEFIT_FACTOR.get(); + if (minBenefit > 1 && requestedAmount > 0 && requestedAmount < perOperationTarget * (long) minBenefit) { + return null; + } + } catch (Throwable ignore) { + // 配置读取异常时保持默认行为(不绕过) + } // 应用配置的最大倍数上限(0 表示不限制) try { int maxMul = ModConfigs.SMART_SCALING_MAX_MULTIPLIER.get();