支持更多方块插入频道卡
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.definitions.AEParts;
|
||||||
import appeng.core.localization.GuiText;
|
import appeng.core.localization.GuiText;
|
||||||
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
|
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();
|
String interfaceGroup = GuiText.Interface.getTranslationKey();
|
||||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEBlocks.INTERFACE, 1, interfaceGroup);
|
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEBlocks.INTERFACE, 1, interfaceGroup);
|
||||||
Upgrades.add(ModItems.CHANNEL_CARD.get(), AEParts.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.helpers.patternprovider.PatternProviderLogicHostUpgradesMixin",
|
||||||
"ae2.menu.PatternProviderMenuUpgradesMixin",
|
"ae2.menu.PatternProviderMenuUpgradesMixin",
|
||||||
"ae2.helpers.patternprovider.PatternProviderLogicTickerMixin",
|
"ae2.helpers.patternprovider.PatternProviderLogicTickerMixin",
|
||||||
|
"ae2.parts.automation.IOBusPartChannelCardMixin",
|
||||||
|
"ae2.parts.automation.IOBusPartTickerChannelCardMixin",
|
||||||
|
"ae2.parts.storagebus.StorageBusPartChannelCardMixin",
|
||||||
|
"ae2.parts.storagebus.StorageBusPartTickerChannelCardMixin",
|
||||||
"ae2WTlib.ContainerUWirelessExPatternTerminalMixin",
|
"ae2WTlib.ContainerUWirelessExPatternTerminalMixin",
|
||||||
"extendedae.common.PartExPatternProviderMixin",
|
"extendedae.common.PartExPatternProviderMixin",
|
||||||
"extendedae.common.TileExPatternProviderMixin",
|
"extendedae.common.TileExPatternProviderMixin",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user