频道卡逻辑

This commit is contained in:
GaLicn 2025-09-24 15:10:43 +08:00
parent 0571efe2f9
commit 56dcdad91f
3 changed files with 63 additions and 0 deletions

View File

@ -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);
});
}
}

View File

@ -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<appeng.api.networking.ticking.TickRateModulation> 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<appeng.api.networking.ticking.TickRateModulation> cir) {
if (this$0 instanceof InterfaceWirelessLinkBridge bridge) {
bridge.eap$updateWirelessLink();
}
}
}

View File

@ -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",