diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java index 145bc62..d4fa16c 100644 --- a/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/container/ContainerExPatternProviderMixin.java @@ -20,7 +20,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.ArrayList; import java.util.List; @Pseudo @@ -107,7 +106,7 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen } @Unique - private boolean eap$checkModify(List stacks, int scale, boolean div) { + private boolean eap$checkModify(java.util.List stacks, int scale, boolean div) { if (stacks == null) return false; if (div) { for (var stack : stacks) { @@ -121,12 +120,10 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen } else { for (var stack : stacks) { if (stack != null) { - long amt = stack.amount(); - // 先检查乘法是否会导致超出 Long.MAX_VALUE,避免溢出 - if (amt > Integer.MAX_VALUE / scale) { + long upper = 999999L * stack.what().getAmountPerUnit(); + if (stack.amount() * scale > upper) { return false; } - // 已移除原有的业务上限检查(999999 * amountPerUnit),仅保留溢出检查 } } return true; @@ -134,23 +131,12 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen } @Unique - private List eap$modifyStacks(List src, int scale, boolean div) { - var dst = new ArrayList(src.size()); + private java.util.List eap$modifyStacks(java.util.List src, int scale, boolean div) { + var dst = new java.util.ArrayList(src.size()); for (var stack : src) { if (stack != null) { long amt = stack.amount(); - long newAmt; - if (div) { // 如果是除法操作 - newAmt = amt / scale; // 执行除法 - } else { // 如果是乘法操作 - // 防御性检查:确保不会发生溢出,尽管上层应已验证 - if (amt > Integer.MAX_VALUE / scale) { - // 遇到潜在溢出时跳过,保持为 null;调用方应通过 eap$checkModify 避免此分支 - dst.add(null); - continue; - } - newAmt = amt * scale; // 执行乘法 - } + long newAmt = div ? (amt / scale) : (amt * scale); dst.add(new GenericStack(stack.what(), newAmt)); } else { dst.add(null);