兼容未设置owner的收发器
This commit is contained in:
parent
30bb52e2e9
commit
7060d78e5d
|
|
@ -51,7 +51,8 @@ public class WirelessMasterLink {
|
|||
|
||||
public boolean register() {
|
||||
ServerLevel level = host.getServerLevel();
|
||||
if (level == null || frequency == 0L || placerId == null) return false;
|
||||
if (level == null || frequency == 0L) return false;
|
||||
// placerId可以为null(公共收发器模式)
|
||||
boolean ok = WirelessMasterRegistry.register(level, frequency, placerId, host);
|
||||
this.registered = ok;
|
||||
return ok;
|
||||
|
|
@ -59,7 +60,8 @@ public class WirelessMasterLink {
|
|||
|
||||
public void unregister() {
|
||||
ServerLevel level = host.getServerLevel();
|
||||
if (!registered || level == null || frequency == 0L || placerId == null) return;
|
||||
if (!registered || level == null || frequency == 0L) return;
|
||||
// placerId可以为null(公共收发器模式)
|
||||
WirelessMasterRegistry.unregister(level, frequency, placerId, host);
|
||||
registered = false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,19 +17,30 @@ import java.util.UUID;
|
|||
* 无线主端注册中心:按 维度 + 频率 + 所有者 唯一注册一个主收发器端点。
|
||||
* 从端通过本注册中心按频率查找主端,实现一对多连接。
|
||||
* 所有者隔离:有FTBTeams时同队共享,没有时每个玩家独立。
|
||||
* 公共模式:placerId为null时使用公共UUID,所有人都能访问(向下兼容旧版本)。
|
||||
*/
|
||||
public final class WirelessMasterRegistry {
|
||||
private WirelessMasterRegistry() {}
|
||||
|
||||
private static final Map<Key, WeakReference<IWirelessEndpoint>> MASTERS = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 公共收发器UUID(用于没有设置所有者的收发器)
|
||||
* 所有placerId为null的收发器都使用这个UUID,实现公共访问
|
||||
*/
|
||||
public static final UUID PUBLIC_NETWORK_UUID = new UUID(0, 0);
|
||||
|
||||
public static synchronized boolean register(ServerLevel level, long frequency, @Nullable UUID placerId, IWirelessEndpoint endpoint) {
|
||||
Objects.requireNonNull(level, "level");
|
||||
Objects.requireNonNull(endpoint, "endpoint");
|
||||
if (frequency == 0L || placerId == null) return false;
|
||||
if (frequency == 0L) return false;
|
||||
|
||||
// 获取网络所有者UUID
|
||||
// placerId为null时使用公共UUID(向下兼容旧版本收发器)
|
||||
UUID ownerUUID = placerId != null
|
||||
? WirelessTeamUtil.getNetworkOwnerUUID(level, placerId)
|
||||
: PUBLIC_NETWORK_UUID;
|
||||
|
||||
// 获取网络所有者UUID(FTBTeams队伍UUID或玩家UUID)
|
||||
UUID ownerUUID = WirelessTeamUtil.getNetworkOwnerUUID(level, placerId);
|
||||
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID);
|
||||
|
||||
cleanupIfCleared(key);
|
||||
|
|
@ -44,9 +55,12 @@ public final class WirelessMasterRegistry {
|
|||
}
|
||||
|
||||
public static synchronized void unregister(ServerLevel level, long frequency, @Nullable UUID placerId, IWirelessEndpoint endpoint) {
|
||||
if (frequency == 0L || level == null || placerId == null) return;
|
||||
if (frequency == 0L || level == null) return;
|
||||
|
||||
UUID ownerUUID = placerId != null
|
||||
? WirelessTeamUtil.getNetworkOwnerUUID(level, placerId)
|
||||
: PUBLIC_NETWORK_UUID;
|
||||
|
||||
UUID ownerUUID = WirelessTeamUtil.getNetworkOwnerUUID(level, placerId);
|
||||
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID);
|
||||
|
||||
var ref = MASTERS.get(key);
|
||||
|
|
@ -59,9 +73,12 @@ public final class WirelessMasterRegistry {
|
|||
}
|
||||
|
||||
public static synchronized IWirelessEndpoint get(ServerLevel level, long frequency, @Nullable UUID placerId) {
|
||||
if (frequency == 0L || level == null || placerId == null) return null;
|
||||
if (frequency == 0L || level == null) return null;
|
||||
|
||||
UUID ownerUUID = placerId != null
|
||||
? WirelessTeamUtil.getNetworkOwnerUUID(level, placerId)
|
||||
: PUBLIC_NETWORK_UUID;
|
||||
|
||||
UUID ownerUUID = WirelessTeamUtil.getNetworkOwnerUUID(level, placerId);
|
||||
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID);
|
||||
|
||||
cleanupIfCleared(key);
|
||||
|
|
|
|||
|
|
@ -63,11 +63,12 @@ public class WirelessSlaveLink {
|
|||
return;
|
||||
}
|
||||
final ServerLevel level = host.getServerLevel();
|
||||
if (level == null || frequency == 0L || placerId == null) {
|
||||
if (level == null || frequency == 0L) {
|
||||
destroyConnection();
|
||||
return;
|
||||
}
|
||||
|
||||
// placerId可以为null(公共收发器模式)
|
||||
IWirelessEndpoint master = WirelessMasterRegistry.get(level, frequency, placerId);
|
||||
shutdown = false;
|
||||
distance = 0.0D;
|
||||
|
|
|
|||
|
|
@ -95,8 +95,8 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
|||
java.util.UUID placerId = data.getUUID("placerId");
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner", placerId.toString().substring(0, 8) + "..."));
|
||||
} else {
|
||||
// 没有所有者信息(旧版本存档)
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner.unset"));
|
||||
// 没有所有者信息(公共收发器)
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner.public"));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@
|
|||
|
||||
"extendedae_plus.tooltip.owner": "Owner: %s",
|
||||
"extendedae_plus.tooltip.owner.unset": "Owner: Unset",
|
||||
"extendedae_plus.tooltip.owner.public": "Owner: Public",
|
||||
|
||||
"group.pattern_provider.name": "Pattern Provider",
|
||||
"group.entity_ticker.name": "Entity Accelerator",
|
||||
|
|
|
|||
|
|
@ -113,6 +113,7 @@
|
|||
|
||||
"extendedae_plus.tooltip.owner": "所有者: %s",
|
||||
"extendedae_plus.tooltip.owner.unset": "所有者: 未设置",
|
||||
"extendedae_plus.tooltip.owner.public": "所有者: 公共",
|
||||
|
||||
"group.pattern_provider.name": "样板供应器",
|
||||
"group.entity_ticker.name": "实体加速器",
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user