兼容未设置owner的收发器

This commit is contained in:
GaLicn 2025-10-05 12:41:41 +08:00
parent 30bb52e2e9
commit 7060d78e5d
6 changed files with 34 additions and 12 deletions

View File

@ -51,7 +51,8 @@ public class WirelessMasterLink {
public boolean register() { public boolean register() {
ServerLevel level = host.getServerLevel(); 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); boolean ok = WirelessMasterRegistry.register(level, frequency, placerId, host);
this.registered = ok; this.registered = ok;
return ok; return ok;
@ -59,7 +60,8 @@ public class WirelessMasterLink {
public void unregister() { public void unregister() {
ServerLevel level = host.getServerLevel(); 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); WirelessMasterRegistry.unregister(level, frequency, placerId, host);
registered = false; registered = false;
} }

View File

@ -17,19 +17,30 @@ import java.util.UUID;
* 无线主端注册中心 维度 + 频率 + 所有者 唯一注册一个主收发器端点 * 无线主端注册中心 维度 + 频率 + 所有者 唯一注册一个主收发器端点
* 从端通过本注册中心按频率查找主端实现一对多连接 * 从端通过本注册中心按频率查找主端实现一对多连接
* 所有者隔离有FTBTeams时同队共享没有时每个玩家独立 * 所有者隔离有FTBTeams时同队共享没有时每个玩家独立
* 公共模式placerId为null时使用公共UUID所有人都能访问向下兼容旧版本
*/ */
public final class WirelessMasterRegistry { public final class WirelessMasterRegistry {
private WirelessMasterRegistry() {} private WirelessMasterRegistry() {}
private static final Map<Key, WeakReference<IWirelessEndpoint>> MASTERS = new HashMap<>(); 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) { public static synchronized boolean register(ServerLevel level, long frequency, @Nullable UUID placerId, IWirelessEndpoint endpoint) {
Objects.requireNonNull(level, "level"); Objects.requireNonNull(level, "level");
Objects.requireNonNull(endpoint, "endpoint"); 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;
// 获取网络所有者UUIDFTBTeams队伍UUID或玩家UUID
UUID ownerUUID = WirelessTeamUtil.getNetworkOwnerUUID(level, placerId);
final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID); final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID);
cleanupIfCleared(key); cleanupIfCleared(key);
@ -44,9 +55,12 @@ public final class WirelessMasterRegistry {
} }
public static synchronized void unregister(ServerLevel level, long frequency, @Nullable UUID placerId, IWirelessEndpoint endpoint) { 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); final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID);
var ref = MASTERS.get(key); 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) { 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); final Key key = new Key(useGlobal() ? null : level.dimension(), frequency, ownerUUID);
cleanupIfCleared(key); cleanupIfCleared(key);

View File

@ -63,11 +63,12 @@ public class WirelessSlaveLink {
return; return;
} }
final ServerLevel level = host.getServerLevel(); final ServerLevel level = host.getServerLevel();
if (level == null || frequency == 0L || placerId == null) { if (level == null || frequency == 0L) {
destroyConnection(); destroyConnection();
return; return;
} }
// placerId可以为null公共收发器模式
IWirelessEndpoint master = WirelessMasterRegistry.get(level, frequency, placerId); IWirelessEndpoint master = WirelessMasterRegistry.get(level, frequency, placerId);
shutdown = false; shutdown = false;
distance = 0.0D; distance = 0.0D;

View File

@ -95,8 +95,8 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
java.util.UUID placerId = data.getUUID("placerId"); java.util.UUID placerId = data.getUUID("placerId");
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner", placerId.toString().substring(0, 8) + "...")); tooltip.add(Component.translatable("extendedae_plus.tooltip.owner", placerId.toString().substring(0, 8) + "..."));
} else { } else {
// 没有所有者信息旧版本存档 // 没有所有者信息公共收发器
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner.unset")); tooltip.add(Component.translatable("extendedae_plus.tooltip.owner.public"));
} }
} }
}; };

View File

@ -112,6 +112,7 @@
"extendedae_plus.tooltip.owner": "Owner: %s", "extendedae_plus.tooltip.owner": "Owner: %s",
"extendedae_plus.tooltip.owner.unset": "Owner: Unset", "extendedae_plus.tooltip.owner.unset": "Owner: Unset",
"extendedae_plus.tooltip.owner.public": "Owner: Public",
"group.pattern_provider.name": "Pattern Provider", "group.pattern_provider.name": "Pattern Provider",
"group.entity_ticker.name": "Entity Accelerator", "group.entity_ticker.name": "Entity Accelerator",

View File

@ -113,6 +113,7 @@
"extendedae_plus.tooltip.owner": "所有者: %s", "extendedae_plus.tooltip.owner": "所有者: %s",
"extendedae_plus.tooltip.owner.unset": "所有者: 未设置", "extendedae_plus.tooltip.owner.unset": "所有者: 未设置",
"extendedae_plus.tooltip.owner.public": "所有者: 公共",
"group.pattern_provider.name": "样板供应器", "group.pattern_provider.name": "样板供应器",
"group.entity_ticker.name": "实体加速器", "group.entity_ticker.name": "实体加速器",