diff --git a/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java b/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java
index 5a16d5b..a7454d9 100644
--- a/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java
+++ b/src/main/java/com/extendedae_plus/ae/parts/EntitySpeedTickerPart.java
@@ -51,7 +51,7 @@ import java.lang.reflect.Method;
* 实体加速器部件,用于加速目标方块实体的 tick 速率,消耗 AE 网络能量,支持加速卡和能量卡升级。
* 灵感来源于 Crazy AE2 Addons。
*/
-public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTickable, MenuProvider, IUpgradeableObject {
+public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTickable, MenuProvider, IUpgradeableObject {
public static final ResourceLocation MODEL_BASE = new ResourceLocation(
ExtendedAEPlus.MODID, "part/entity_speed_ticker_part");
@@ -62,18 +62,14 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
@PartModels
public static final PartModel MODELS_HAS_CHANNEL = new PartModel(MODEL_BASE, new ResourceLocation(ExtendedAEPlus.MODID, "part/entity_speed_ticker_has_channel"));
- public EntitySpeedTickerMenu menu; // 当前打开的菜单实例
- private boolean networkEnergySufficient = true; // 网络能量是否充足
- private int cachedSpeed = -1; // 缓存的加速倍率
- private int cachedEnergyCardCount = -1; // 缓存的能量卡数量
- private BlockEntity cachedTarget = null;
- private BlockPos cachedTargetPos = null;
+ private static volatile boolean[] cachedAttempts;
private static volatile Method cachedFEExtractMethod;
private static volatile boolean FE_UNAVAILABLE;
- // ===== 静态块:反射初始化 FE 方法 =====
+ // 静态块:初始化缓存
static {
+ cachedAttempts = ModConfig.INSTANCE.prioritizeDiskEnergy ? new boolean[]{false, true, true} : new boolean[]{true, false, true};
if (ModList.get().isLoaded("appflux")) {
try {
Class> helperClass = Class.forName("com.extendedae_plus.util.FluxEnergyHelper");
@@ -90,8 +86,17 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
}
}
}
+
+ public EntitySpeedTickerMenu menu; // 当前打开的菜单实例
+ private boolean networkEnergySufficient = true; // 网络能量是否充足
+ private int cachedSpeed = -1; // 缓存的加速倍率
+ private int cachedEnergyCardCount = -1; // 缓存的能量卡数量
+ private BlockEntity cachedTarget = null;
+ private BlockPos cachedTargetPos = null;
+
/**
* 构造函数,初始化部件并设置网络节点属性。
+ *
* @param partItem 部件物品
*/
public EntitySpeedTickerPart(IPartItem> partItem) {
@@ -108,17 +113,26 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
);
}
+ /**
+ * 更新缓存的 attempts 数组,由 ModConfig 调用。
+ */
+ public static void updateCachedAttempts(boolean prioritizeDiskEnergy) {
+ synchronized (EntitySpeedTickerPart.class) {
+ cachedAttempts = prioritizeDiskEnergy ? new boolean[]{false, true, true} : new boolean[]{true, false, true};
+ }
+ }
+
public boolean getAccelerateEnabled() {
return this.getConfigManager().getSetting(com.extendedae_plus.ae.api.config.Settings.ACCELERATE) == YesNo.YES;
}
/**
* 设置加速开关状态并通知菜单。
+ *
* @param enabled 是否启用加速
*/
public void setAccelerateEnabled(boolean enabled) {
this.getConfigManager().putSetting(com.extendedae_plus.ae.api.config.Settings.ACCELERATE, enabled ? YesNo.YES : YesNo.NO);
- // 是否启用加速
if (menu != null) {
menu.setAccelerateEnabled(enabled);
}
@@ -130,6 +144,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 更新网络能量充足状态并通知菜单。
+ *
* @param sufficient 是否能量充足
*/
private void updateNetworkEnergySufficient(boolean sufficient) {
@@ -141,6 +156,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 获取当前状态的渲染模型。
+ *
* @return 当前状态的模型
*/
@Override
@@ -156,9 +172,10 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 处理玩家右键激活部件,打开菜单。
+ *
* @param player 玩家
- * @param hand 手
- * @param pos 点击位置
+ * @param hand 手
+ * @param pos 点击位置
* @return 总是返回 true
*/
@Override
@@ -171,6 +188,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 定义部件的碰撞箱。
+ *
* @param bch 碰撞辅助器
*/
@Override
@@ -181,6 +199,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 获取定时请求,指定 tick 频率。
+ *
* @param iGridNode 网络节点
* @return TickingRequest 对象
*/
@@ -205,7 +224,8 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 网络定时回调,处理目标方块实体的加速。
- * @param iGridNode 网络节点
+ *
+ * @param iGridNode 网络节点
* @param ticksSinceLastCall 距离上次调用的 tick 数
* @return TickRateModulation.IDLE
*/
@@ -223,8 +243,9 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 对目标方块实体执行加速 tick 操作。
+ *
* @param blockEntity 目标方块实体
- * @param 方块实体类型
+ * @param 方块实体类型
*/
private void ticker(@NotNull T blockEntity) {
if (!isValidForTicking()) {
@@ -241,7 +262,6 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
return;
}
- // 如果缓存未初始化(第一次 tick),计算并更新缓存
if (cachedEnergyCardCount == -1 || cachedSpeed == -1) {
this.cachedEnergyCardCount = getUpgrades().getInstalledUpgrades(AEItems.ENERGY_CARD);
this.cachedSpeed = calculateSpeed();
@@ -251,7 +271,6 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
return;
}
- // 使用 PowerUtils 的缓存获取能耗,并应用方块特定的倍率
double requiredPower = PowerUtils.getCachedPower(cachedSpeed, cachedEnergyCardCount)
* ConfigParsingUtils.getMultiplierForBlock(blockId);
if (!extractPower(requiredPower)) {
@@ -263,6 +282,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 检查网络节点是否有效。
+ *
* @return 是否可以执行 tick
*/
private boolean isValidForTicking() {
@@ -280,8 +300,10 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
cachedTarget = getLevel().getBlockEntity(targetPos);
}
}
+
/**
* 获取目标方块实体的 ticker。
+ *
* @param blockEntity 目标方块实体
* @return ticker 或 null
*/
@@ -292,6 +314,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 计算加速倍率。
+ *
* @return 生效的加速倍率
*/
private int calculateSpeed() {
@@ -302,6 +325,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 提取网络能量并更新状态,优先从 AE2 网络提取 AE 能量,不足时从磁盘提取 FE 能量。
+ *
* @param requiredPower 所需能量(AE 单位)
* @return 是否成功提取足够能量
*/
@@ -310,11 +334,8 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
MEStorage storage = getMainNode().getGrid().getStorageService().getInventory();
IActionSource source = IActionSource.ofMachine(this);
- // 优先级:FE(如果优先磁盘) -> AE -> FE(如果未优先磁盘)
- boolean[] attempts = ModConfig.INSTANCE.prioritizeDiskEnergy ? new boolean[]{true, false, true} : new boolean[]{false, true, false};
-
- for (int i = 0; i < attempts.length; i++) {
- if (!attempts[i]) continue;
+ for (int i = 0; i < cachedAttempts.length; i++) {
+ if (!cachedAttempts[i]) continue;
if (i == 0 || i == 2) { // FE 提取
if (!FE_UNAVAILABLE && cachedFEExtractMethod != null) {
try {
@@ -329,10 +350,14 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
}
}
} else { // AE 提取
- double extracted = energyService.extractAEPower(requiredPower, Actionable.MODULATE, PowerMultiplier.CONFIG);
- if (extracted >= requiredPower) {
- updateNetworkEnergySufficient(true);
- return true;
+ double simulated = energyService.extractAEPower(requiredPower, Actionable.SIMULATE, PowerMultiplier.CONFIG);
+ if (simulated >= requiredPower) {
+ double extracted = energyService.extractAEPower(requiredPower, Actionable.MODULATE, PowerMultiplier.CONFIG);
+ boolean sufficient = extracted >= requiredPower;
+ updateNetworkEnergySufficient(sufficient);
+ if (sufficient) {
+ return true;
+ }
}
}
}
@@ -342,14 +367,14 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 执行加速 tick 操作。
+ *
* @param blockEntity 目标方块实体
- * @param ticker 方块实体 ticker
- * @param speed 加速倍率
+ * @param ticker 方块实体 ticker
+ * @param speed 加速倍率
*/
private void performTicks(T blockEntity,
BlockEntityTicker ticker,
int speed) {
- // 执行 speed-1 次额外 tick(原生 tick 已包含 1 次)
for (int i = 0; i < speed - 1; i++) {
ticker.tick(
blockEntity.getLevel(),
@@ -372,9 +397,10 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 创建菜单实例。
- * @param containerId 容器ID
+ *
+ * @param containerId 容器ID
* @param playerInventory 玩家背包
- * @param player 玩家
+ * @param player 玩家
* @return 菜单实例
*/
@Override
@@ -386,6 +412,7 @@ public class EntitySpeedTickerPart extends UpgradeablePart implements IGridTick
/**
* 获取升级卡槽数量。
+ *
* @return 升级卡槽数量
*/
@Override
diff --git a/src/main/java/com/extendedae_plus/config/ModConfig.java b/src/main/java/com/extendedae_plus/config/ModConfig.java
index 173ae83..5d33380 100644
--- a/src/main/java/com/extendedae_plus/config/ModConfig.java
+++ b/src/main/java/com/extendedae_plus/config/ModConfig.java
@@ -1,18 +1,30 @@
package com.extendedae_plus.config;
import com.extendedae_plus.ExtendedAEPlus;
+import com.extendedae_plus.ae.parts.EntitySpeedTickerPart;
+import com.extendedae_plus.util.entitySpeed.ConfigParsingUtils;
+import com.extendedae_plus.util.entitySpeed.PowerUtils;
import dev.toma.configuration.Configuration;
+import dev.toma.configuration.client.IValidationHandler;
import dev.toma.configuration.config.Config;
import dev.toma.configuration.config.Configurable;
import dev.toma.configuration.config.format.ConfigFormats;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+import static com.extendedae_plus.util.Logger.EAP$LOGGER;
@Config(id = ExtendedAEPlus.MODID)
public final class ModConfig {
public static ModConfig INSTANCE;
private static final Object lock = new Object();
-
+ private static final long DEBOUNCE_INTERVAL = 1000; // 防抖间隔,单位:毫秒
+ private static final AtomicLong lastUpdateTime = new AtomicLong(0);
public static void init() {
synchronized (lock) {
@@ -21,6 +33,7 @@ public final class ModConfig {
}
}
}
+
@Configurable
@Configurable.Comment(value = {
"扩展样板供应器总槽位容量的倍率。",
@@ -95,6 +108,7 @@ public final class ModConfig {
})
@Configurable.Range(min = 0, max = Integer.MAX_VALUE)
@Configurable.Synchronized
+ @Configurable.ValueUpdateCallback(method = "onEntityTickerCostUpdate")
public int entityTickerCost = 512;
@Configurable
@@ -103,9 +117,8 @@ public final class ModConfig {
"格式:全名或通配符/正则字符串,例如 'minecraft:chest'、'minecraft:*'、'modid:.*_fluid'"
})
@Configurable.Synchronized
- public String[] entityTickerBlackList = {
-
- };
+ @Configurable.ValueUpdateCallback(method = "onEntityTickerBlackListUpdate")
+ public String[] entityTickerBlackList = {};
@Configurable
@Configurable.Comment(value = {
@@ -113,9 +126,8 @@ public final class ModConfig {
"支持通配符/正则匹配(例如 'minecraft:* 2x' 会对整个命名空间生效)。"
})
@Configurable.Synchronized
- public String[] entityTickerMultipliers = {
-
- };
+ @Configurable.ValueUpdateCallback(method = "onEntityTickerMultipliersUpdate")
+ public String[] entityTickerMultipliers = {};
@Configurable
@Configurable.Comment(value = {
@@ -131,5 +143,45 @@ public final class ModConfig {
"开启后,将优先尝试从磁盘提取FE能量;反之优先消耗AE网络中的能量"
})
@Configurable.Synchronized
+ @Configurable.ValueUpdateCallback(method = "onPrioritizeDiskEnergyUpdate")
public boolean prioritizeDiskEnergy = true;
+
+ private static final ScheduledExecutorService EXECUTOR = Executors.newSingleThreadScheduledExecutor();
+ private static ScheduledFuture> pendingPowerTask;
+ private static final Object POWER_LOCK = new Object();
+
+ private void onEntityTickerCostUpdate(int newValue, IValidationHandler handler) {
+ synchronized (POWER_LOCK) {
+ if (pendingPowerTask != null) {
+ pendingPowerTask.cancel(false);
+ }
+ pendingPowerTask = EXECUTOR.schedule(() -> {
+ synchronized (PowerUtils.class) {
+ PowerUtils.initializeCaches();
+ }
+ }, 1000, TimeUnit.MILLISECONDS); // 1000ms 防抖
+ }
+ }
+
+
+ private void onEntityTickerBlackListUpdate(String[] newValue, IValidationHandler handler) {
+ synchronized (ConfigParsingUtils.class) {
+ EAP$LOGGER.info("onEntityTickerBlackListUpdate");
+ ConfigParsingUtils.reload();
+ }
+ }
+
+ private void onEntityTickerMultipliersUpdate(String[] newValue, IValidationHandler handler) {
+ synchronized (ConfigParsingUtils.class) {
+ EAP$LOGGER.info("onEntityTickerMultipliersUpdate");
+ ConfigParsingUtils.reload();
+ }
+ }
+
+ private void onPrioritizeDiskEnergyUpdate(boolean newValue, dev.toma.configuration.client.IValidationHandler handler) {
+ synchronized (EntitySpeedTickerPart.class) {
+ EAP$LOGGER.info("onPrioritizeDiskEnergyUpdate");
+ EntitySpeedTickerPart.updateCachedAttempts(newValue);
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java
index edebb1c..25a4cfc 100644
--- a/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java
+++ b/src/main/java/com/extendedae_plus/mixin/ae2/compat/PatternProviderLogicCompatMixin.java
@@ -85,7 +85,6 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
private void eap$onAppfluxUpgradesChanged(CallbackInfo ci) {
try {
if (UpgradeSlotCompat.shouldEnableChannelCard()) {
- Logger.EAP$LOGGER.info("监听到appflux升级变化,处理频道卡");
// 升级变更,重置并尝试初始化频道卡
eap$compatLastChannel = -1;
eap$compatHasInitialized = false;
@@ -100,13 +99,9 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
at = @At("TAIL"))
private void eap$compatInitUpgrades(IManagedGridNode mainNode, PatternProviderLogicHost host, int patternInventorySize, CallbackInfo ci) {
try {
- Logger.EAP$LOGGER.info("兼容性PatternProviderLogic初始化被调用");
-
boolean upgradeSlots = UpgradeSlotCompat.shouldEnableUpgradeSlots();
boolean channelCard = UpgradeSlotCompat.shouldEnableChannelCard();
- Logger.EAP$LOGGER.info("升级槽功能: {}, 频道卡功能: {}", upgradeSlots, channelCard);
-
if (upgradeSlots) {
// 只有在升级槽功能启用时才创建升级槽
this.eap$compatUpgrades = UpgradeInventories.forMachine(
@@ -114,12 +109,9 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
1,
this::eap$compatOnUpgradesChanged
);
- Logger.EAP$LOGGER.info("创建了完整的升级槽");
} else if (channelCard) {
// 如果装了appflux,我们不创建自己的升级槽,而是监听appflux的升级槽
- Logger.EAP$LOGGER.info("装了appflux,将监听其升级槽来处理频道卡");
} else {
- Logger.EAP$LOGGER.info("跳过升级槽创建");
}
} catch (Exception e) {
Logger.EAP$LOGGER.error("兼容性升级初始化失败", e);
@@ -188,7 +180,6 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
} else {
// 装了appflux时,这个方法不应该被调用,因为appflux的Mixin会覆盖它
// 但是为了安全起见,返回空的升级槽
- Logger.EAP$LOGGER.debug("装了appflux时getUpgrades被调用,这不应该发生");
return UpgradeInventories.empty();
}
}
@@ -250,7 +241,6 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
if (this instanceof IUpgradeableObject) {
IUpgradeableObject upgradeableThis = (IUpgradeableObject) this;
upgrades = upgradeableThis.getUpgrades();
- Logger.EAP$LOGGER.debug("从appflux获取到升级槽: {}", upgrades != null);
}
} catch (Exception e) {
Logger.EAP$LOGGER.error("获取appflux升级槽失败", e);
@@ -262,7 +252,6 @@ public abstract class PatternProviderLogicCompatMixin implements IUpgradeableObj
if (!stack.isEmpty() && stack.getItem() == ModItems.CHANNEL_CARD.get()) {
channel = ChannelCardItem.getChannel(stack);
found = true;
- Logger.EAP$LOGGER.info("找到频道卡,频道: {}", channel);
break;
}
}
diff --git a/src/main/java/com/extendedae_plus/mixin/appflux/AppfluxPatternProviderLogicMixin.java b/src/main/java/com/extendedae_plus/mixin/appflux/AppfluxPatternProviderLogicMixin.java
index 4a22199..af7cf1b 100644
--- a/src/main/java/com/extendedae_plus/mixin/appflux/AppfluxPatternProviderLogicMixin.java
+++ b/src/main/java/com/extendedae_plus/mixin/appflux/AppfluxPatternProviderLogicMixin.java
@@ -28,12 +28,8 @@ public class AppfluxPatternProviderLogicMixin {
at = @At("TAIL"))
private void eap$modifyAppfluxUpgradeSlots(IManagedGridNode mainNode, PatternProviderLogicHost host, int patternInventorySize, CallbackInfo ci) {
try {
- Logger.EAP$LOGGER.info("AppfluxPatternProviderLogicMixin被调用!");
-
// 只有当appflux存在且不启用我们的升级槽时才修改数量
if (!UpgradeSlotCompat.shouldEnableUpgradeSlots() && UpgradeSlotCompat.shouldEnableChannelCard()) {
- Logger.EAP$LOGGER.info("尝试修改appflux升级槽数量为2个");
-
// 使用反射找到appflux的升级槽字段并替换
try {
Field upgradesField = this.getClass().getDeclaredField("af_$upgrades");
@@ -41,8 +37,6 @@ public class AppfluxPatternProviderLogicMixin {
IUpgradeInventory currentUpgrades = (IUpgradeInventory) upgradesField.get(this);
if (currentUpgrades != null) {
- Logger.EAP$LOGGER.info("找到appflux升级槽,当前大小: {}", currentUpgrades.size());
-
// 创建新的2槽升级槽
IUpgradeInventory newUpgrades = UpgradeInventories.forMachine(
host.getTerminalIcon().getItem(),
@@ -66,7 +60,6 @@ public class AppfluxPatternProviderLogicMixin {
// 替换升级槽
upgradesField.set(this, newUpgrades);
- Logger.EAP$LOGGER.info("成功将appflux升级槽替换为2个槽");
}
} catch (Exception e) {
Logger.EAP$LOGGER.error("反射修改appflux升级槽失败", e);
diff --git a/src/main/java/com/extendedae_plus/util/entitySpeed/ConfigParsingUtils.java b/src/main/java/com/extendedae_plus/util/entitySpeed/ConfigParsingUtils.java
index 11434a4..f34e020 100644
--- a/src/main/java/com/extendedae_plus/util/entitySpeed/ConfigParsingUtils.java
+++ b/src/main/java/com/extendedae_plus/util/entitySpeed/ConfigParsingUtils.java
@@ -6,7 +6,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Supplier;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -33,8 +32,6 @@ public final class ConfigParsingUtils {
private static volatile Map blacklistResultCache = new HashMap<>();
private static volatile Map multiplierResultCache = new HashMap<>();
private static final Object CACHE_LOCK = new Object();
- private static final AtomicLong callCounter = new AtomicLong(0);
- private static final long CHECK_INTERVAL = 100;
/*
初始化缓存,在模组加载时调用
@@ -121,7 +118,6 @@ public final class ConfigParsingUtils {
if (blockId == null || BLACKLIST_SUPPLIER.get() == null || BLACKLIST_SUPPLIER.get().length == 0) {
return false;
}
- checkConfigChange();
return blacklistResultCache.computeIfAbsent(blockId, id ->
getCachedBlacklist().values().stream().anyMatch(p -> p.matcher(id).matches())
);
@@ -134,7 +130,6 @@ public final class ConfigParsingUtils {
if (blockId == null || MULTIPLIERS_SUPPLIER.get() == null || MULTIPLIERS_SUPPLIER.get().length == 0) {
return 1.0;
}
- checkConfigChange();
return multiplierResultCache.computeIfAbsent(blockId, id -> {
double maxMultiplier = 1.0;
for (MultiplierEntry me : getCachedMultiplierEntries().values()) {
@@ -213,22 +208,6 @@ public final class ConfigParsingUtils {
}
}
- /**
- * 每 100 次调用检查配置是否变化。
- */
- private static void checkConfigChange() {
- if (callCounter.incrementAndGet() % CHECK_INTERVAL == 0) {
- String[] currentBlacklist = BLACKLIST_SUPPLIER.get();
- String[] currentMultipliers = MULTIPLIERS_SUPPLIER.get();
- synchronized (CACHE_LOCK) {
- if (cachedBlacklistSourceSnapshot == null || !Arrays.equals(cachedBlacklistSourceSnapshot, currentBlacklist) ||
- cachedMultiplierSourceSnapshot == null || !Arrays.equals(cachedMultiplierSourceSnapshot, currentMultipliers)) {
- reload();
- }
- }
- }
- }
-
/**
* 清空缓存,下一次获取时将重新解析。
*/
@@ -240,7 +219,6 @@ public final class ConfigParsingUtils {
cachedMultiplierSourceSnapshot = null;
blacklistResultCache.clear();
multiplierResultCache.clear();
- callCounter.set(0);
}
}
}
\ No newline at end of file
diff --git a/src/main/java/com/extendedae_plus/util/entitySpeed/PowerUtils.java b/src/main/java/com/extendedae_plus/util/entitySpeed/PowerUtils.java
index ecf44ee..5115be4 100644
--- a/src/main/java/com/extendedae_plus/util/entitySpeed/PowerUtils.java
+++ b/src/main/java/com/extendedae_plus/util/entitySpeed/PowerUtils.java
@@ -9,7 +9,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
/**
* 用于计算实体加速器的能耗与加速倍率的工具类
@@ -17,12 +16,8 @@ import java.util.concurrent.atomic.AtomicInteger;
public final class PowerUtils {
private static final int[] VALID_MULTIPLIERS = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};
private static final int[] VALID_ENERGY_CARD_COUNTS = {0, 1, 2, 3, 4, 5, 6, 7, 8};
- private static final AtomicInteger checkCounter = new AtomicInteger(0); // 原子计数器
- private static final int CHECK_COUNTER_THRESHOLD = 100; // 配置检查阈值
- private static final int CHECK_COUNTER_RESET_THRESHOLD = 10000; // 计数器重置阈值
private static volatile Map> powerCache = new HashMap<>();
private static volatile Map ratioCache = new HashMap<>();
- private static volatile int lastEntityTickerCost = -1;
// 静态初始化块,预计算缓存
static {
@@ -34,7 +29,7 @@ public final class PowerUtils {
/**
* 初始化所有可能的缓存条目
*/
- private static void initializeCaches() {
+ public static void initializeCaches() {
synchronized (PowerUtils.class) {
powerCache.clear();
ratioCache.clear();
@@ -54,7 +49,6 @@ public final class PowerUtils {
}
powerCache.put(product, energyCardMap);
}
- lastEntityTickerCost = ModConfig.INSTANCE.entityTickerCost;
}
}
@@ -131,17 +125,6 @@ public final class PowerUtils {
*/
public static double getCachedPower(int product, int energyCardCount) {
if (product <= 1) return 0.0;
- // 每 100 次调用检查一次配置
- if (checkCounter.getAndIncrement() % CHECK_COUNTER_THRESHOLD == 0) {
- checkCounter.set(checkCounter.get() % CHECK_COUNTER_RESET_THRESHOLD);
- if (lastEntityTickerCost != ModConfig.INSTANCE.entityTickerCost) {
- synchronized (PowerUtils.class) {
- if (lastEntityTickerCost != ModConfig.INSTANCE.entityTickerCost) {
- initializeCaches();
- }
- }
- }
- }
Map energyCardMap = powerCache.get(product);
if (energyCardMap == null) return 0.0;
Double cachedPower = energyCardMap.get(energyCardCount);