diff --git a/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterLink.java b/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterLink.java index 98a3436..b055611 100644 --- a/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterLink.java +++ b/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterLink.java @@ -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; } diff --git a/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterRegistry.java b/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterRegistry.java index 110d2e1..d856d98 100644 --- a/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterRegistry.java +++ b/src/main/java/com/extendedae_plus/ae/wireless/WirelessMasterRegistry.java @@ -17,19 +17,30 @@ import java.util.UUID; * 无线主端注册中心:按 维度 + 频率 + 所有者 唯一注册一个主收发器端点。 * 从端通过本注册中心按频率查找主端,实现一对多连接。 * 所有者隔离:有FTBTeams时同队共享,没有时每个玩家独立。 + * 公共模式:placerId为null时使用公共UUID,所有人都能访问(向下兼容旧版本)。 */ public final class WirelessMasterRegistry { private WirelessMasterRegistry() {} private static final Map> 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); diff --git a/src/main/java/com/extendedae_plus/ae/wireless/WirelessSlaveLink.java b/src/main/java/com/extendedae_plus/ae/wireless/WirelessSlaveLink.java index da1123c..c97ab58 100644 --- a/src/main/java/com/extendedae_plus/ae/wireless/WirelessSlaveLink.java +++ b/src/main/java/com/extendedae_plus/ae/wireless/WirelessSlaveLink.java @@ -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; diff --git a/src/main/java/com/extendedae_plus/integration/jade/WirelessTransceiverJadePluginComponents.java b/src/main/java/com/extendedae_plus/integration/jade/WirelessTransceiverJadePluginComponents.java index 2c06c2b..3f8f1d4 100644 --- a/src/main/java/com/extendedae_plus/integration/jade/WirelessTransceiverJadePluginComponents.java +++ b/src/main/java/com/extendedae_plus/integration/jade/WirelessTransceiverJadePluginComponents.java @@ -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")); } } }; diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index b52e8d2..3c8e58a 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -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", diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index af35f2e..405cb16 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -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": "实体加速器",