From 35fe0af6471dbd4bd9af79711a2dec00de4b9763 Mon Sep 17 00:00:00 2001 From: GaLicn <3096147684@qq.com> Date: Wed, 13 Aug 2025 10:26:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9D=90=E8=B4=A8=EF=BC=8C?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC=E4=B8=BA1.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../com/extendedae_plus/config/ModConfigs.java | 8 ++++++++ .../wireless/WirelessTransceiverBlock.java | 6 +++--- .../wireless/WirelessMasterRegistry.java | 16 ++++++++++++---- .../wireless/WirelessSlaveLink.java | 11 +++++++---- .../models/block/wireless_transceiver.json | 2 +- 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/gradle.properties b/gradle.properties index 47e1b47..9965f87 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G loom.platform = forge # Mod properties -mod_version = 1.1.4 +mod_version = 1.2.0 maven_group = com.extendedae_plus archives_name = extendedae_plus diff --git a/src/main/java/com/extendedae_plus/config/ModConfigs.java b/src/main/java/com/extendedae_plus/config/ModConfigs.java index 0592099..4a1409b 100644 --- a/src/main/java/com/extendedae_plus/config/ModConfigs.java +++ b/src/main/java/com/extendedae_plus/config/ModConfigs.java @@ -6,6 +6,7 @@ public final class ModConfigs { public static final ForgeConfigSpec COMMON_SPEC; public static final ForgeConfigSpec.IntValue PAGE_MULTIPLIER; public static final ForgeConfigSpec.DoubleValue WIRELESS_MAX_RANGE; + public static final ForgeConfigSpec.BooleanValue WIRELESS_CROSS_DIM_ENABLE; static { ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); @@ -24,6 +25,13 @@ public final class ModConfigs { "无线收发器最大连接距离(单位:方块)", "从端与主端的直线距离需小于等于该值才会建立连接。") .defineInRange("wirelessMaxRange", 256.0D, 1.0D, 4096.0D); + + // 是否允许跨维度连接(忽略维度差异进行频道传输)。 + WIRELESS_CROSS_DIM_ENABLE = builder + .comment( + "是否允许无线收发器跨维度建立连接", + "开启后,从端可连接到不同维度的主端(忽略距离限制)") + .define("wirelessCrossDimEnable", true); builder.pop(); COMMON_SPEC = builder.build(); } diff --git a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java index 81e6b77..9b925ac 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java +++ b/src/main/java/com/extendedae_plus/content/wireless/WirelessTransceiverBlock.java @@ -42,7 +42,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock { f -= step; if (f < 0) f = 0; te.setFrequency(f); - player.displayClientMessage(Component.literal("Freq: " + te.getFrequency()), true); + player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true); } } super.attack(state, level, pos, player); @@ -71,10 +71,10 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock { if (f < 0) f = 0; } te.setFrequency(f); - player.displayClientMessage(Component.literal("Freq: " + te.getFrequency()), true); + player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true); } else { te.setMasterMode(!te.isMasterMode()); - player.displayClientMessage(Component.literal(te.isMasterMode() ? "Mode: MASTER" : "Mode: SLAVE"), true); + player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true); } return InteractionResult.CONSUME; } diff --git a/src/main/java/com/extendedae_plus/wireless/WirelessMasterRegistry.java b/src/main/java/com/extendedae_plus/wireless/WirelessMasterRegistry.java index 3add7b7..733a0ca 100644 --- a/src/main/java/com/extendedae_plus/wireless/WirelessMasterRegistry.java +++ b/src/main/java/com/extendedae_plus/wireless/WirelessMasterRegistry.java @@ -9,6 +9,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; +import com.extendedae_plus.config.ModConfigs; + /** * 无线主端注册中心:按 维度 + 频率 唯一注册一个主收发器端点。 * 从端通过本注册中心按频率查找主端,实现一对多连接。 @@ -22,7 +24,7 @@ public final class WirelessMasterRegistry { Objects.requireNonNull(level, "level"); Objects.requireNonNull(endpoint, "endpoint"); if (frequency == 0L) return false; - final Key key = new Key(level.dimension(), frequency); + final Key key = new Key(useGlobal() ? null : level.dimension(), frequency); cleanupIfCleared(key); var existing = MASTERS.get(key); var existingVal = existing == null ? null : existing.get(); @@ -36,7 +38,7 @@ public final class WirelessMasterRegistry { public static synchronized void unregister(ServerLevel level, long frequency, IWirelessEndpoint endpoint) { if (frequency == 0L || level == null) return; - final Key key = new Key(level.dimension(), frequency); + final Key key = new Key(useGlobal() ? null : level.dimension(), frequency); var ref = MASTERS.get(key); if (ref != null) { var cur = ref.get(); @@ -48,7 +50,7 @@ public final class WirelessMasterRegistry { public static synchronized IWirelessEndpoint get(ServerLevel level, long frequency) { if (frequency == 0L || level == null) return null; - final Key key = new Key(level.dimension(), frequency); + final Key key = new Key(useGlobal() ? null : level.dimension(), frequency); cleanupIfCleared(key); var ref = MASTERS.get(key); return ref == null ? null : ref.get(); @@ -61,7 +63,13 @@ public final class WirelessMasterRegistry { } } + private static boolean useGlobal() { + return ModConfigs.WIRELESS_CROSS_DIM_ENABLE.get(); + } + private record Key(ResourceKey dim, long freq) { - @Override public String toString() { return dim.location() + "#" + freq; } + @Override public String toString() { + return (dim == null ? "*" : dim.location().toString()) + "#" + freq; + } } } diff --git a/src/main/java/com/extendedae_plus/wireless/WirelessSlaveLink.java b/src/main/java/com/extendedae_plus/wireless/WirelessSlaveLink.java index 1cebbc6..cc8988a 100644 --- a/src/main/java/com/extendedae_plus/wireless/WirelessSlaveLink.java +++ b/src/main/java/com/extendedae_plus/wireless/WirelessSlaveLink.java @@ -64,10 +64,13 @@ public class WirelessSlaveLink { shutdown = false; distance = 0.0D; - if (master != null && !master.isEndpointRemoved() && master.getServerLevel() == level) { - distance = Math.sqrt(master.getBlockPos().distSqr(host.getBlockPos())); + boolean crossDim = ModConfigs.WIRELESS_CROSS_DIM_ENABLE.get(); + if (master != null && !master.isEndpointRemoved() && (crossDim || master.getServerLevel() == level)) { + if (!crossDim) { + distance = Math.sqrt(master.getBlockPos().distSqr(host.getBlockPos())); + } double maxRange = ModConfigs.WIRELESS_MAX_RANGE.get(); - if (distance <= maxRange) { + if (crossDim || distance <= maxRange) { // 保持/建立连接 try { var current = connection.getConnection(); @@ -97,7 +100,7 @@ public class WirelessSlaveLink { shutdown = true; // 超出范围 } } else { - shutdown = true; // 无主或主端不可用/不同维度 + shutdown = true; // 无主或主端不可用 } // 需要关闭连接 diff --git a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json index 9c23dd0..b7f5686 100644 --- a/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json +++ b/src/main/resources/assets/extendedae_plus/models/block/wireless_transceiver.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "minecraft:block/iron_block" + "all": "extendedae_plus:block/wireless_transceiver" } }