appliedflux下供应器逻辑

This commit is contained in:
GaLicn 2025-09-25 13:25:44 +08:00
parent b0684cd354
commit 4327ccc67a

View File

@ -33,7 +33,7 @@ import java.util.List;
* - 安装 appflux 优先从 appflux 提供的升级槽读取频道卡 * - 安装 appflux 优先从 appflux 提供的升级槽读取频道卡
* - 建立到无线主站的网格连接 * - 建立到无线主站的网格连接
*/ */
@Mixin(value = PatternProviderLogic.class, priority = 1500, remap = false) @Mixin(value = PatternProviderLogic.class, priority = 900, remap = false)
public abstract class PatternProviderLogicCompatMixin implements CompatUpgradeProvider, InterfaceWirelessLinkBridge { public abstract class PatternProviderLogicCompatMixin implements CompatUpgradeProvider, InterfaceWirelessLinkBridge {
@Unique @Unique
@ -239,14 +239,14 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
} }
// 双重保险如果主要方式失败尝试备用方式 // 双重保险如果主要方式失败尝试备用方式
if (upgrades == null || eap$isUpgradeInventoryEmpty(upgrades)) { if (upgrades == null || !eap$hasChannelCard(upgrades)) {
ExtendedAELogger.LOGGER.debug("[样板供应器] 主升级槽为空,尝试备用方式"); ExtendedAELogger.LOGGER.debug("[样板供应器] 主升级槽无频道卡,尝试备用方式");
if (UpgradeSlotCompat.shouldEnableUpgradeSlots()) { if (UpgradeSlotCompat.shouldEnableUpgradeSlots()) {
// 如果我们的槽为空尝试检查是否有AppliedFlux的槽 // 如果我们的槽无频道卡尝试检查是否有AppliedFlux的槽
try { try {
IUpgradeInventory backupUpgrades = eap$getAppliedFluxUpgrades(); IUpgradeInventory backupUpgrades = eap$getAppliedFluxUpgrades();
if (backupUpgrades != null && !eap$isUpgradeInventoryEmpty(backupUpgrades)) { if (backupUpgrades != null && eap$hasChannelCard(backupUpgrades)) {
upgrades = backupUpgrades; upgrades = backupUpgrades;
ExtendedAELogger.LOGGER.debug("[样板供应器] 使用备用 appflux 升级槽"); ExtendedAELogger.LOGGER.debug("[样板供应器] 使用备用 appflux 升级槽");
} }
@ -254,8 +254,8 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
ExtendedAELogger.LOGGER.debug("[样板供应器] 备用升级槽检查失败: {}", t.getMessage()); ExtendedAELogger.LOGGER.debug("[样板供应器] 备用升级槽检查失败: {}", t.getMessage());
} }
} else { } else {
// 如果AppliedFlux的槽为空尝试我们的兼容槽 // 如果AppliedFlux的槽无频道卡尝试我们的兼容槽
if (this.eap$compatUpgrades != null && !eap$isUpgradeInventoryEmpty(this.eap$compatUpgrades)) { if (this.eap$compatUpgrades != null && eap$hasChannelCard(this.eap$compatUpgrades)) {
upgrades = this.eap$compatUpgrades; upgrades = this.eap$compatUpgrades;
ExtendedAELogger.LOGGER.debug("[样板供应器] 使用备用兼容升级槽"); ExtendedAELogger.LOGGER.debug("[样板供应器] 使用备用兼容升级槽");
} }
@ -279,6 +279,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
eap$compatLink.setFrequency(0L); eap$compatLink.setFrequency(0L);
eap$compatLink.updateStatus(); eap$compatLink.updateStatus();
} }
eap$compatLastChannel = 0L;
eap$compatHasInitialized = true; eap$compatHasInitialized = true;
try { host.saveChanges(); } catch (Throwable ignored) {} try { host.saveChanges(); } catch (Throwable ignored) {}
return; return;
@ -291,6 +292,7 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
eap$compatLink.setFrequency(channel); eap$compatLink.setFrequency(channel);
eap$compatLink.updateStatus(); eap$compatLink.updateStatus();
eap$compatLastChannel = channel; // 记录当前频道
ExtendedAELogger.LOGGER.debug("[样板供应器] 设置频道={} 连接状态={}", channel, eap$compatLink.isConnected()); ExtendedAELogger.LOGGER.debug("[样板供应器] 设置频道={} 连接状态={}", channel, eap$compatLink.isConnected());
try { host.saveChanges(); } catch (Throwable ignored) {} try { host.saveChanges(); } catch (Throwable ignored) {}
mainNode.ifPresent((grid, node) -> { mainNode.ifPresent((grid, node) -> {
@ -335,18 +337,54 @@ public abstract class PatternProviderLogicCompatMixin implements CompatUpgradePr
eap$compatHasInitialized = initialized; eap$compatHasInitialized = initialized;
} }
// CompatUpgradeProvider 实现仅在未安装 appflux 时由我们提供升级槽 @Override
@Unique public void eap$handleDelayedInit() {
private boolean eap$isUpgradeInventoryEmpty(IUpgradeInventory inventory) { // 如果还未初始化或者需要重新检查AppliedFlux升级槽
if (inventory == null) { if (!eap$compatHasInitialized) {
return true; eap$compatInitializeChannelLink();
} } else if (!UpgradeSlotCompat.shouldEnableUpgradeSlots()) {
for (ItemStack stack : inventory) { // 安装了AppliedFlux时定期检查升级槽变化
if (!stack.isEmpty()) { try {
return false; IUpgradeInventory afUpgrades = eap$getAppliedFluxUpgrades();
if (afUpgrades != null && eap$hasChannelCard(afUpgrades)) {
// 检查频道是否发生变化
for (ItemStack stack : afUpgrades) {
if (!stack.isEmpty() && stack.getItem() == ModItems.CHANNEL_CARD.get()) {
long newChannel = ChannelCardItem.getChannel(stack);
if (newChannel != eap$compatLastChannel) {
ExtendedAELogger.LOGGER.debug("[样板供应器] 检测到频道变化: {} -> {}", eap$compatLastChannel, newChannel);
eap$compatLastChannel = -1; // 强制重新初始化
eap$compatHasInitialized = false;
eap$compatInitializeChannelLink();
}
break;
}
}
} else if (eap$compatLastChannel != 0L) {
// 频道卡被移除
ExtendedAELogger.LOGGER.debug("[样板供应器] 频道卡被移除");
eap$compatLastChannel = -1;
eap$compatHasInitialized = false;
eap$compatInitializeChannelLink();
}
} catch (Throwable t) {
ExtendedAELogger.LOGGER.debug("[样板供应器] 延迟初始化检查失败: {}", t.getMessage());
} }
} }
return true; }
// CompatUpgradeProvider 实现仅在未安装 appflux 时由我们提供升级槽
@Unique
private boolean eap$hasChannelCard(IUpgradeInventory inventory) {
if (inventory == null) {
return false;
}
for (ItemStack stack : inventory) {
if (!stack.isEmpty() && stack.getItem() == ModItems.CHANNEL_CARD.get()) {
return true;
}
}
return false;
} }
/** /**