feat: 支持新版本core的样板翻倍

This commit is contained in:
C-H716 2025-09-25 22:23:52 +08:00
parent 560d9c71dc
commit a385f14be3
4 changed files with 4 additions and 32 deletions

View File

@ -1,21 +0,0 @@
package com.extendedae_plus.mixin.ae2;
import appeng.crafting.CraftingCalculation;
import com.extendedae_plus.config.ModConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
/**
* Mixin 用于增加 CraftingCalculation.handlePausing() incTime 的阈值
* 调整 CRAFTING_PAUSE_THRESHOLD 可以控制计算让出控制权的频率
*/
@Mixin(value = CraftingCalculation.class, remap = false)
public abstract class CraftingCalculationMixin {
// 可调节的阈值在执行 pause 检查前 handlePausing 被调用的次数
// 增大此值可以减少 wait/notify 的频率提升吞吐量但降低响应速度
@ModifyConstant(method = "handlePausing", constant = @Constant(intValue = 100))
private int modifyIncTimeThreshold(int original) {
return ModConfig.INSTANCE.craftingPauseThreshold;
}
}

View File

@ -10,21 +10,14 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
@Mixin(value = CraftingTreeNode.class,remap = false)
@Mixin(value = CraftingTreeNode.class,remap = false,priority = 2000)
public class CraftingTreeNodeMixin {
@Inject(method = "request(Lappeng/crafting/inv/CraftingSimulationState;JLappeng/api/stacks/KeyCounter;)V",
@Inject(method = "ultraFastRequest(Lappeng/crafting/inv/CraftingSimulationState;JLappeng/api/stacks/KeyCounter;)V",
at = @At(value = "INVOKE",
target = "Lappeng/crafting/CraftingTreeNode;addContainerItems(Lappeng/api/stacks/AEKey;JLappeng/api/stacks/KeyCounter;)V"),
locals = LocalCapture.CAPTURE_FAILHARD)
private void captureRequestedAmount(CraftingSimulationState inv, long requestedAmount, KeyCounter containerItems, CallbackInfo ci) {
// push the requestedAmount before addContainerItems is called
RequestedAmountHolder.push(requestedAmount);
}
@Inject(method = "request(Lappeng/crafting/inv/CraftingSimulationState;JLappeng/api/stacks/KeyCounter;)V",
at = @At(value = "RETURN"))
private void clearRequestedAmountOnReturn(CraftingSimulationState inv, long requestedAmount, KeyCounter containerItems, CallbackInfo ci) {
// pop the pushed requested amount on return
RequestedAmountHolder.pop();
RequestedAmountHolder.push(requestedAmount);
}
}

View File

@ -56,6 +56,7 @@ public abstract class CraftingTreeProcessMixin {
CraftingTreeNodeAccessor parentAcc = (CraftingTreeNodeAccessor) craftingTreeNode;
AEKey parentTarget = parentAcc.eap$getWhat();
long requested = RequestedAmountHolder.get();
RequestedAmountHolder.pop();
// 根据配置决定是否在 provider 间轮询分配请求量默认开启
long perProvider = 1L;

View File

@ -45,7 +45,6 @@
"advancedae.menu.AdvPatternProviderMenuAdvancedMixin",
"advancedae.menu.AdvPatternProviderMenuDoublingMixin",
"ae2.AEProcessingPatternMixin",
"ae2.CraftingCalculationMixin",
"ae2.CraftingCPUClusterMixin",
"ae2.EncodedPatternItemMixin",
"ae2.InterfaceLogicUpgradesMixin",