为收发器增加抗卸载机制。

This commit is contained in:
GaLicn 2025-08-13 11:14:17 +08:00
parent 35fe0af647
commit b69abee69e
4 changed files with 41 additions and 9 deletions

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1005 KiB

View File

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