兼容未设置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() {
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;
}

View File

@ -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;
// 获取网络所有者UUIDFTBTeams队伍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);

View File

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

View File

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

View File

@ -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",

View File

@ -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": "实体加速器",