From 124c0087001337c916b31a581cd7ddf2267677f6 Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Tue, 4 Nov 2025 20:08:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=99=BA=E8=83=BD=E5=80=8D?= =?UTF-8?q?=E5=A2=9E=E5=9C=A8=E5=A4=9A=E4=BE=9B=E5=BA=94=E5=99=A8=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E7=9A=84=E8=BD=AE=E8=AF=A2=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CraftingSimulationStateMixin.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingSimulationStateMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingSimulationStateMixin.java index 5ab0f60..01bfe06 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingSimulationStateMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingSimulationStateMixin.java @@ -71,18 +71,27 @@ public abstract class CraftingSimulationStateMixin implements ICraftingSimulatio if (providerCount <= 0) providerCount = 1; if (perCraftLimit <= 0) { - // 无限倍率 → 按供应器均分并处理余数 - long base = totalAmount / providerCount; - long remainder = totalAmount % providerCount; + // 检查是否开启 provider 轮询分配功能 + if (ModConfig.INSTANCE.providerRoundRobinEnable) { + long base = totalAmount / providerCount; + long remainder = totalAmount % providerCount; - if (remainder > 0) { - ScaledProcessingPattern scaled_r = PatternScaler.createScaled(processingPattern, base + remainder); - finalCrafts.put(scaled_r, 1L); - ScaledProcessingPattern scaled_b = PatternScaler.createScaled(processingPattern, base); - finalCrafts.put(scaled_b, providerCount - 1); + // base+1 组(数量 remainder 个) + if (remainder > 0) { + ScaledProcessingPattern scaledPlus = PatternScaler.createScaled(processingPattern, base + 1); + finalCrafts.merge(scaledPlus, remainder, Long::sum); + } + + // base 组(数量 providerCount - remainder 个) + long countBase = providerCount - remainder; + if (countBase > 0) { + ScaledProcessingPattern scaledBase = PatternScaler.createScaled(processingPattern, base); + finalCrafts.merge(scaledBase, countBase, Long::sum); + } } else { - ScaledProcessingPattern scaled = PatternScaler.createScaled(processingPattern, base); - finalCrafts.put(scaled, providerCount); + // 未开启轮询 → 直接分配一次总量 + ScaledProcessingPattern scaled = PatternScaler.createScaled(processingPattern, totalAmount); + finalCrafts.put(scaled, 1L); } } else { // 有限制 → 拆分 full + remainder