diff --git a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java index 0c1d0a1..5c7dd8d 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java +++ b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlockEntity.java @@ -26,8 +26,6 @@ import java.util.EnumSet; * - 频率设置; * - 集成 AE2 节点; * - 集成无线主/从逻辑。 - * - * 注意:本类不包含注册常量,需在你的注册系统中完成 BlockEntityType 的创建与绑定。 */ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWirelessEndpoint, IInWorldGridNodeHost { @@ -149,6 +147,14 @@ public class WirelessTransceiverBlockEntity extends BlockEntity implements IWire // 在首个 tick 创建,以保证区块已就绪 GridHelper.onFirstTick(this, be -> { be.managedNode.create(be.getLevel(), be.getBlockPos()); + // 节点创建后,重新应用当前模式与频率,确保: + // - 主端在重载后完成注册; + // - 从端在重载后开始维护连接。 + if (be.masterMode) { + be.masterLink.setFrequency(be.frequency); + } else { + be.slaveLink.setFrequency(be.frequency); + } }); } diff --git a/src/main/java/com/extendedae_plus/wireless/WirelessMasterLink.java b/src/main/java/com/extendedae_plus/wireless/WirelessMasterLink.java index 8205c01..4024b49 100644 --- a/src/main/java/com/extendedae_plus/wireless/WirelessMasterLink.java +++ b/src/main/java/com/extendedae_plus/wireless/WirelessMasterLink.java @@ -18,15 +18,25 @@ public class WirelessMasterLink { public long getFrequency() { return frequency; } public void setFrequency(long frequency) { - if (this.frequency == frequency) return; - // 先反注册旧频率 - if (registered) { - unregister(); + // 如果频率发生变化,先撤销旧频率的注册 + if (this.frequency != frequency) { + if (registered) { + unregister(); + } + this.frequency = frequency; } - this.frequency = frequency; - // 再尝试注册新频率 + + // 频率未变的情况下也要校正注册状态: + // - 当从“从端”切回“主端”时,registered 可能为 false,需要重新注册; + // - 当频率为 0 或端点被移除时,确保处于未注册。 if (frequency != 0L && !host.isEndpointRemoved()) { - register(); + if (!registered) { + register(); + } + } else { + if (registered) { + unregister(); + } } } diff --git a/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png new file mode 100644 index 0000000..b062ad4 Binary files /dev/null and b/src/main/resources/assets/extendedae_plus/textures/block/wireless_transceiver.png differ diff --git a/src/main/resources/data/extendedae_plus/recipes/wireless_transceiver.json b/src/main/resources/data/extendedae_plus/recipes/wireless_transceiver.json new file mode 100644 index 0000000..f1cc4e6 --- /dev/null +++ b/src/main/resources/data/extendedae_plus/recipes/wireless_transceiver.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "RRR", + "RLR", + "RRR" + ], + "key": { + "R": { "item": "ae2:quantum_ring" }, + "L": { "item": "ae2:quantum_link" } + }, + "result": { + "item": "extendedae_plus:wireless_transceiver", + "count": 1 + } +}