52 lines
1.5 KiB
Java
52 lines
1.5 KiB
Java
package com.extendedae_plus.wireless;
|
|
|
|
import net.minecraft.server.level.ServerLevel;
|
|
|
|
/**
|
|
* 主收发器端逻辑:负责在频率变化/加载时向注册中心登记唯一主端,卸载时反注册。
|
|
* 方块实体应在合适的生命周期中调用 register/unregister。
|
|
*/
|
|
public class WirelessMasterLink {
|
|
private final IWirelessEndpoint host;
|
|
private long frequency; // 0 为未设置
|
|
private boolean registered;
|
|
|
|
public WirelessMasterLink(IWirelessEndpoint host) {
|
|
this.host = host;
|
|
}
|
|
|
|
public long getFrequency() { return frequency; }
|
|
|
|
public void setFrequency(long frequency) {
|
|
if (this.frequency == frequency) return;
|
|
// 先反注册旧频率
|
|
if (registered) {
|
|
unregister();
|
|
}
|
|
this.frequency = frequency;
|
|
// 再尝试注册新频率
|
|
if (frequency != 0L && !host.isEndpointRemoved()) {
|
|
register();
|
|
}
|
|
}
|
|
|
|
public boolean register() {
|
|
ServerLevel level = host.getServerLevel();
|
|
if (level == null || frequency == 0L) return false;
|
|
boolean ok = WirelessMasterRegistry.register(level, frequency, host);
|
|
this.registered = ok;
|
|
return ok;
|
|
}
|
|
|
|
public void unregister() {
|
|
ServerLevel level = host.getServerLevel();
|
|
if (!registered || level == null || frequency == 0L) return;
|
|
WirelessMasterRegistry.unregister(level, frequency, host);
|
|
registered = false;
|
|
}
|
|
|
|
public void onUnloadOrRemove() {
|
|
unregister();
|
|
}
|
|
}
|