回退样板供应器按钮倍增的调整
This commit is contained in:
parent
20262814ba
commit
5a9e7bfc7c
|
|
@ -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<GenericStack> stacks, int scale, boolean div) {
|
||||
private boolean eap$checkModify(java.util.List<GenericStack> 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<GenericStack> eap$modifyStacks(List<GenericStack> src, int scale, boolean div) {
|
||||
var dst = new ArrayList<GenericStack>(src.size());
|
||||
private java.util.List<GenericStack> eap$modifyStacks(java.util.List<GenericStack> src, int scale, boolean div) {
|
||||
var dst = new java.util.ArrayList<GenericStack>(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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user