diff --git a/src/main/java/com/extendedae_plus/init/UpgradeCards.java b/src/main/java/com/extendedae_plus/init/UpgradeCards.java index 9a8de67..0816756 100644 --- a/src/main/java/com/extendedae_plus/init/UpgradeCards.java +++ b/src/main/java/com/extendedae_plus/init/UpgradeCards.java @@ -1,7 +1,10 @@ package com.extendedae_plus.init; import appeng.api.upgrades.Upgrades; +import appeng.core.definitions.AEBlocks; import appeng.core.definitions.AEItems; +import appeng.core.definitions.AEParts; +import appeng.core.localization.GuiText; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; @@ -12,6 +15,23 @@ public class UpgradeCards { Upgrades.add(AEItems.ENERGY_CARD, ModItems.ENTITY_TICKER_PART_ITEM.get(), 8, "group.entity_ticker.name"); // 使用单一的 UpgradeCard Item 作为注册键,总共允许安装 4 张(不同等级由 ItemStack NBT 区分) Upgrades.add(ModItems.ENTITY_SPEED_CARD.get(), ModItems.ENTITY_TICKER_PART_ITEM.get(), 4, "group.entity_ticker.name"); + + // 频道卡:对齐旧版注册 — AE2 接口(方块与部件) + String interfaceGroup = GuiText.Interface.getTranslationKey(); + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEBlocks.INTERFACE, 1, interfaceGroup); + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.INTERFACE, 1, interfaceGroup); + + // 频道卡:AE2 样板供应器(方块与部件) + String patternProviderGroup = "group.pattern_provider.name"; + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEBlocks.PATTERN_PROVIDER, 1, patternProviderGroup); + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.PATTERN_PROVIDER, 1, patternProviderGroup); + + // 频道卡:AE2 I/O 总线与存储总线(部件) + String ioBusGroup = GuiText.IOBuses.getTranslationKey(); + String storageGroup = "group.storage.name"; + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.IMPORT_BUS, 1, ioBusGroup); + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.EXPORT_BUS, 1, ioBusGroup); + Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.STORAGE_BUS, 1, storageGroup); }); } } \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java new file mode 100644 index 0000000..86f561c --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/InterfaceLogicTickerMixin.java @@ -0,0 +1,42 @@ +package com.extendedae_plus.mixin.ae2.helpers; + +import appeng.helpers.InterfaceLogic; +import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * 注入到 InterfaceLogic.Ticker 的每tick回调,驱动无线链接状态更新与延迟初始化。 + */ +@Mixin(targets = "appeng.helpers.InterfaceLogic$Ticker") +public abstract class InterfaceLogicTickerMixin { + + // Mixin 访问内部类的外部引用字段(javac 生成名 this$0) + @Shadow(remap = false) + @Final + private InterfaceLogic this$0; + + @Inject(method = "tickingRequest", at = @At("HEAD"), remap = false) + private void eap$tickHead(appeng.api.networking.IGridNode node, int ticksSinceLastCall, + CallbackInfoReturnable cir) { + // 仅在服务端处理延迟初始化,避免客户端干扰 + if (node != null && node.getLevel() != null && node.getLevel().isClientSide) { + return; + } + if (this$0 instanceof InterfaceWirelessLinkBridge bridge) { + bridge.eap$handleDelayedInit(); + } + } + + @Inject(method = "tickingRequest", at = @At("TAIL"), remap = false) + private void eap$tickTail(appeng.api.networking.IGridNode node, int ticksSinceLastCall, + CallbackInfoReturnable cir) { + if (this$0 instanceof InterfaceWirelessLinkBridge bridge) { + bridge.eap$updateWirelessLink(); + } + } +} diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index 1e725ba..b562441 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -26,6 +26,7 @@ "ae2.autopattern.CraftingTreeProcessMixin", "ae2.autopattern.PatternProviderLogicContainsRedirectMixin", "ae2.helpers.InterfaceLogicChannelCardMixin", + "ae2.helpers.InterfaceLogicTickerMixin", "ae2.helpers.PatternProviderLogicAdvancedMixin", "ae2.helpers.PatternProviderLogicDoublingMixin", "ae2.parts.automation.IOBusPartChannelCardMixin",