回退样板供应器按钮倍增的调整
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.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Pseudo
|
@Pseudo
|
||||||
|
|
@ -107,7 +106,7 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@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 (stacks == null) return false;
|
||||||
if (div) {
|
if (div) {
|
||||||
for (var stack : stacks) {
|
for (var stack : stacks) {
|
||||||
|
|
@ -121,12 +120,10 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen
|
||||||
} else {
|
} else {
|
||||||
for (var stack : stacks) {
|
for (var stack : stacks) {
|
||||||
if (stack != null) {
|
if (stack != null) {
|
||||||
long amt = stack.amount();
|
long upper = 999999L * stack.what().getAmountPerUnit();
|
||||||
// 先检查乘法是否会导致超出 Long.MAX_VALUE,避免溢出
|
if (stack.amount() * scale > upper) {
|
||||||
if (amt > Integer.MAX_VALUE / scale) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// 已移除原有的业务上限检查(999999 * amountPerUnit),仅保留溢出检查
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -134,23 +131,12 @@ public abstract class ContainerExPatternProviderMixin extends PatternProviderMen
|
||||||
}
|
}
|
||||||
|
|
||||||
@Unique
|
@Unique
|
||||||
private List<GenericStack> eap$modifyStacks(List<GenericStack> src, int scale, boolean div) {
|
private java.util.List<GenericStack> eap$modifyStacks(java.util.List<GenericStack> src, int scale, boolean div) {
|
||||||
var dst = new ArrayList<GenericStack>(src.size());
|
var dst = new java.util.ArrayList<GenericStack>(src.size());
|
||||||
for (var stack : src) {
|
for (var stack : src) {
|
||||||
if (stack != null) {
|
if (stack != null) {
|
||||||
long amt = stack.amount();
|
long amt = stack.amount();
|
||||||
long newAmt;
|
long newAmt = div ? (amt / scale) : (amt * scale);
|
||||||
if (div) { // 如果是除法操作
|
|
||||||
newAmt = amt / scale; // 执行除法
|
|
||||||
} else { // 如果是乘法操作
|
|
||||||
// 防御性检查:确保不会发生溢出,尽管上层应已验证
|
|
||||||
if (amt > Integer.MAX_VALUE / scale) {
|
|
||||||
// 遇到潜在溢出时跳过,保持为 null;调用方应通过 eap$checkModify 避免此分支
|
|
||||||
dst.add(null);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
newAmt = amt * scale; // 执行乘法
|
|
||||||
}
|
|
||||||
dst.add(new GenericStack(stack.what(), newAmt));
|
dst.add(new GenericStack(stack.what(), newAmt));
|
||||||
} else {
|
} else {
|
||||||
dst.add(null);
|
dst.add(null);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user