添加智能倍增的全局限制

This commit is contained in:
C-H716 2025-11-04 00:40:55 +08:00
parent ac2c524fe8
commit 2c40e0800a
2 changed files with 13 additions and 4 deletions

View File

@ -74,8 +74,9 @@ public final class ModConfig {
@Configurable
@Configurable.Comment(value = {
"全局智能倍增的最大倍数限制0 表示不限制)",
"此倍数是针对单次样板产出的放大倍数上限,用于限制一次推送中按倍增缩放的规模"
"全局智能倍增的最大倍率限制0 表示不限制)",
"此限制针对单次样板产出的倍增上限,用于控制一次推送的最大缩放规模",
"优先级低于样板自身的供应器限制"
})
@Configurable.Synchronized
@Configurable.Range(min = 0, max = Integer.MAX_VALUE)

View File

@ -5,6 +5,7 @@ import appeng.crafting.inv.CraftingSimulationState;
import appeng.crafting.pattern.AEProcessingPattern;
import com.extendedae_plus.ae.api.crafting.ScaledProcessingPattern;
import com.extendedae_plus.api.smartDoubling.ISmartDoublingAwarePattern;
import com.extendedae_plus.config.ModConfig;
import com.extendedae_plus.util.smartDoubling.PatternScaler;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@ -30,6 +31,7 @@ public abstract class CraftingSimulationStateMixin {
ci.cancel();
if (craftsAmount <= 0 || details == null) return;
// 仅处理 AEProcessingPattern
if (!(details instanceof AEProcessingPattern processingPattern)) {
crafts.merge(details, craftsAmount, Long::sum);
return;
@ -40,15 +42,21 @@ public abstract class CraftingSimulationStateMixin {
if (processingPattern instanceof ISmartDoublingAwarePattern aware) {
allowScaling = aware.eap$allowScaling();
perCraftLimit = aware.eap$getMultiplierLimit(); // 已经是最大倍率限制
perCraftLimit = aware.eap$getMultiplierLimit(); // 样板供应器限制
}
// 不允许缩放或者需求为 1
// 样板不允许缩放 或者 需求 1 直接合并
if (!allowScaling || craftsAmount == 1) {
crafts.merge(processingPattern, craftsAmount, Long::sum);
return;
}
// 样板无限制时应用全局配置
if (perCraftLimit <= 0 && ModConfig.INSTANCE.smartScalingMaxMultiplier > 0) {
perCraftLimit = ModConfig.INSTANCE.smartScalingMaxMultiplier;
}
// 根据限制处理
if (perCraftLimit <= 0) {
// 无限制 合并倍率并复用对象
mergeUnlimited(processingPattern, craftsAmount);