支持更多方块插入频道卡
This commit is contained in:
parent
8a4950f244
commit
1589f179cd
|
|
@ -6,6 +6,14 @@ import appeng.core.definitions.AEItems;
|
|||
import appeng.core.definitions.AEParts;
|
||||
import appeng.core.localization.GuiText;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.EX_PATTERN_PROVIDER;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.EX_PATTERN_PROVIDER_PART;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.EX_INTERFACE;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.EX_INTERFACE_PART;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.OVERSIZE_INTERFACE;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.OVERSIZE_INTERFACE_PART;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.EX_IMPORT_BUS;
|
||||
import static com.glodblock.github.extendedae.common.EPPItemAndBlock.EX_EXPORT_BUS;
|
||||
|
||||
/**
|
||||
*
|
||||
|
|
@ -22,6 +30,31 @@ public class UpgradeCards {
|
|||
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);
|
||||
|
||||
// 新增:样板供应器(方块与部件)支持频道卡,每台最多 1 张
|
||||
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);
|
||||
|
||||
// ExtendedAE 的扩展样板供应器(方块与部件)
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(),EX_PATTERN_PROVIDER, 1, patternProviderGroup);
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(),EX_PATTERN_PROVIDER_PART, 1, patternProviderGroup);
|
||||
|
||||
//EAE 的扩展接口与超大接口(方块与部件)支持频道卡
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_INTERFACE, 1, interfaceGroup);
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_INTERFACE_PART, 1, interfaceGroup);
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), OVERSIZE_INTERFACE, 1, interfaceGroup);
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), OVERSIZE_INTERFACE_PART, 1, interfaceGroup);
|
||||
|
||||
//AE2 的输入/输出/存储总线支持频道卡(部件)
|
||||
String ioBusGroup = GuiText.IOBuses.getTranslationKey();
|
||||
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, ioBusGroup);
|
||||
|
||||
//EAE 的扩展输入/输出总线支持频道卡(部件)
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_IMPORT_BUS, 1, ioBusGroup);
|
||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), EX_EXPORT_BUS, 1, ioBusGroup);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
package com.extendedae_plus.mixin.ae2.parts.automation;
|
||||
|
||||
import appeng.api.networking.security.IActionHost;
|
||||
import appeng.api.upgrades.IUpgradeInventory;
|
||||
import appeng.api.upgrades.IUpgradeableObject;
|
||||
import appeng.helpers.InterfaceLogicHost;
|
||||
import appeng.parts.automation.IOBusPart;
|
||||
import com.extendedae_plus.ae.items.ChannelCardItem;
|
||||
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import com.extendedae_plus.wireless.WirelessSlaveLink;
|
||||
import com.extendedae_plus.wireless.endpoint.GenericNodeEndpointImpl;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
/**
|
||||
* 给 AE2 的 I/O 总线注入频道卡联动:在升级变更时读取频道并更新无线链接。
|
||||
*/
|
||||
@Mixin(value = IOBusPart.class, remap = false)
|
||||
public abstract class IOBusPartChannelCardMixin implements InterfaceWirelessLinkBridge, IUpgradeableObject {
|
||||
|
||||
@Unique
|
||||
private WirelessSlaveLink extendedae_plus$link;
|
||||
|
||||
@Inject(method = "upgradesChanged", at = @At("TAIL"))
|
||||
private void extendedae_plus$onUpgradesChanged(CallbackInfo ci) {
|
||||
IUpgradeInventory inv = this.getUpgrades();
|
||||
long channel = 0L;
|
||||
boolean found = false;
|
||||
for (var stack : inv) {
|
||||
if (!stack.isEmpty() && stack.getItem() == ModItems.CHANNEL_CARD.get()) {
|
||||
channel = ChannelCardItem.getChannel(stack);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
// 无频道卡则断开
|
||||
if (extendedae_plus$link != null) {
|
||||
extendedae_plus$link.setFrequency(0L);
|
||||
extendedae_plus$link.updateStatus();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (extendedae_plus$link == null) {
|
||||
var endpoint = new GenericNodeEndpointImpl(
|
||||
() -> ((appeng.parts.AEBasePart)(Object)this).getHost().getBlockEntity(),
|
||||
() -> ((IActionHost)(Object)this).getActionableNode()
|
||||
);
|
||||
extendedae_plus$link = new WirelessSlaveLink(endpoint);
|
||||
}
|
||||
extendedae_plus$link.setFrequency(channel);
|
||||
extendedae_plus$link.updateStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void extendedae_plus$updateWirelessLink() {
|
||||
if (extendedae_plus$link != null) {
|
||||
extendedae_plus$link.updateStatus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.extendedae_plus.mixin.ae2.parts.automation;
|
||||
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.api.networking.ticking.TickRateModulation;
|
||||
import appeng.parts.automation.IOBusPart;
|
||||
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
/**
|
||||
* 在 I/O 总线的 tickingRequest 尾部驱动无线链接刷新。
|
||||
*/
|
||||
@Mixin(value = IOBusPart.class, remap = false)
|
||||
public abstract class IOBusPartTickerChannelCardMixin {
|
||||
|
||||
@Inject(method = "tickingRequest", at = @At("TAIL"))
|
||||
private void extendedae_plus$tickTail(IGridNode node, int ticksSinceLastCall, CallbackInfoReturnable<TickRateModulation> cir) {
|
||||
if (this instanceof InterfaceWirelessLinkBridge bridge) {
|
||||
bridge.extendedae_plus$updateWirelessLink();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
package com.extendedae_plus.mixin.ae2.parts.storagebus;
|
||||
|
||||
import appeng.api.networking.security.IActionHost;
|
||||
import appeng.api.upgrades.IUpgradeInventory;
|
||||
import appeng.api.upgrades.IUpgradeableObject;
|
||||
import appeng.parts.storagebus.StorageBusPart;
|
||||
import com.extendedae_plus.ae.items.ChannelCardItem;
|
||||
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
|
||||
import com.extendedae_plus.init.ModItems;
|
||||
import com.extendedae_plus.wireless.WirelessSlaveLink;
|
||||
import com.extendedae_plus.wireless.endpoint.GenericNodeEndpointImpl;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
/**
|
||||
* 给 AE2 的存储总线注入频道卡联动:在升级变更时读取频道并更新无线链接。
|
||||
*/
|
||||
@Mixin(value = StorageBusPart.class, remap = false)
|
||||
public abstract class StorageBusPartChannelCardMixin implements InterfaceWirelessLinkBridge, IUpgradeableObject {
|
||||
|
||||
@Unique
|
||||
private WirelessSlaveLink extendedae_plus$link;
|
||||
|
||||
@Inject(method = "upgradesChanged", at = @At("TAIL"))
|
||||
private void extendedae_plus$onUpgradesChanged(CallbackInfo ci) {
|
||||
IUpgradeInventory inv = this.getUpgrades();
|
||||
long channel = 0L;
|
||||
boolean found = false;
|
||||
for (var stack : inv) {
|
||||
if (!stack.isEmpty() && stack.getItem() == ModItems.CHANNEL_CARD.get()) {
|
||||
channel = ChannelCardItem.getChannel(stack);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (extendedae_plus$link != null) {
|
||||
extendedae_plus$link.setFrequency(0L);
|
||||
extendedae_plus$link.updateStatus();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (extendedae_plus$link == null) {
|
||||
var endpoint = new GenericNodeEndpointImpl(
|
||||
() -> ((appeng.parts.AEBasePart)(Object)this).getHost().getBlockEntity(),
|
||||
() -> ((IActionHost)(Object)this).getActionableNode()
|
||||
);
|
||||
extendedae_plus$link = new WirelessSlaveLink(endpoint);
|
||||
}
|
||||
extendedae_plus$link.setFrequency(channel);
|
||||
extendedae_plus$link.updateStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void extendedae_plus$updateWirelessLink() {
|
||||
if (extendedae_plus$link != null) {
|
||||
extendedae_plus$link.updateStatus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package com.extendedae_plus.mixin.ae2.parts.storagebus;
|
||||
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.api.networking.ticking.TickRateModulation;
|
||||
import appeng.parts.storagebus.StorageBusPart;
|
||||
import com.extendedae_plus.bridge.InterfaceWirelessLinkBridge;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
/**
|
||||
* 在存储总线的 tickingRequest 尾部驱动无线链接刷新。
|
||||
*/
|
||||
@Mixin(value = StorageBusPart.class, remap = false)
|
||||
public abstract class StorageBusPartTickerChannelCardMixin {
|
||||
|
||||
@Inject(method = "tickingRequest", at = @At("TAIL"))
|
||||
private void extendedae_plus$tickTail(IGridNode node, int ticksSinceLastCall, CallbackInfoReturnable<TickRateModulation> cir) {
|
||||
if (this instanceof InterfaceWirelessLinkBridge bridge) {
|
||||
bridge.extendedae_plus$updateWirelessLink();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -67,6 +67,10 @@
|
|||
"ae2.helpers.patternprovider.PatternProviderLogicHostUpgradesMixin",
|
||||
"ae2.menu.PatternProviderMenuUpgradesMixin",
|
||||
"ae2.helpers.patternprovider.PatternProviderLogicTickerMixin",
|
||||
"ae2.parts.automation.IOBusPartChannelCardMixin",
|
||||
"ae2.parts.automation.IOBusPartTickerChannelCardMixin",
|
||||
"ae2.parts.storagebus.StorageBusPartChannelCardMixin",
|
||||
"ae2.parts.storagebus.StorageBusPartTickerChannelCardMixin",
|
||||
"ae2WTlib.ContainerUWirelessExPatternTerminalMixin",
|
||||
"extendedae.common.PartExPatternProviderMixin",
|
||||
"extendedae.common.TileExPatternProviderMixin",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user