diff --git a/src/main/java/com/extendedae_plus/client/screen/LabeledWirelessTransceiverScreen.java b/src/main/java/com/extendedae_plus/client/screen/LabeledWirelessTransceiverScreen.java index 4ab11c5..2578442 100644 --- a/src/main/java/com/extendedae_plus/client/screen/LabeledWirelessTransceiverScreen.java +++ b/src/main/java/com/extendedae_plus/client/screen/LabeledWirelessTransceiverScreen.java @@ -56,7 +56,9 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen list, String currentLabel, long currentChannel) { + public void updateList(List list, String currentLabel, String ownerName, int usedChannels, int maxChannels) { String prevSelected = getSelectedLabel(); this.entries.clear(); for (LabelNetworkRegistry.LabelNetworkSnapshot s : list) { this.entries.add(new LabelEntry(s.label(), s.channel())); } this.currentLabel = currentLabel == null ? "" : currentLabel; - this.currentChannel = currentChannel; + this.currentOwner = ownerName == null ? "" : ownerName; + this.usedChannels = usedChannels; + this.maxChannels = maxChannels; if (prevSelected != null && !prevSelected.isEmpty()) { this.lastSelectedLabel = prevSelected; } else if (this.currentLabel != null && !this.currentLabel.isEmpty()) { diff --git a/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlock.java b/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlock.java index 4b10d9c..55de1cf 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlock.java +++ b/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlock.java @@ -79,18 +79,6 @@ public class LabeledWirelessTransceiverBlock extends Block implements EntityBloc super.onRemove(state, level, pos, newState, isMoving); } - @Override - public float getDestroyProgress(BlockState state, Player player, BlockGetter level, BlockPos pos) { - // 与旧收发器保持一致:锁定时降低挖掘速度 - float baseProgress = super.getDestroyProgress(state, player, level, pos); - if (level.getBlockEntity(pos) instanceof LabeledWirelessTransceiverBlockEntity te) { - if (te.isLocked()) { - return baseProgress * 0.1f; - } - } - return baseProgress; - } - @Override public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { if (level.isClientSide) return null; diff --git a/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java b/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java index e4a1026..0c1a43e 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java +++ b/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java @@ -44,7 +44,6 @@ public class LabeledWirelessTransceiverBlockEntity extends AEBaseBlockEntity imp private long frequency = 0L; @Nullable private String labelForDisplay; - private boolean locked = false; private boolean beingRemoved = false; @Nullable @@ -131,16 +130,6 @@ public class LabeledWirelessTransceiverBlockEntity extends AEBaseBlockEntity imp return labelForDisplay; } - public boolean isLocked() { - return locked; - } - - public void setLocked(boolean locked) { - if (this.locked == locked) return; - this.locked = locked; - setChanged(); - } - /** * 应用/切换标签。空或非法标签将清空并断开。 */ @@ -290,7 +279,6 @@ public class LabeledWirelessTransceiverBlockEntity extends AEBaseBlockEntity imp public void saveAdditional(CompoundTag tag) { super.saveAdditional(tag); tag.putLong("frequency", frequency); - tag.putBoolean("locked", locked); if (labelForDisplay != null) { tag.putString("label", labelForDisplay); } @@ -309,7 +297,6 @@ public class LabeledWirelessTransceiverBlockEntity extends AEBaseBlockEntity imp public void loadTag(CompoundTag tag) { super.loadTag(tag); this.frequency = tag.getLong("frequency"); - this.locked = tag.getBoolean("locked"); if (tag.contains("label")) { this.labelForDisplay = tag.getString("label"); } else { diff --git a/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java b/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java index dbb667b..ed2c394 100644 --- a/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java +++ b/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java @@ -12,10 +12,30 @@ public enum LabeledWirelessTransceiverComponents implements IBlockComponentProvi @Override protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, net.minecraft.nbt.CompoundTag data) { String label = data.contains("label") ? data.getString("label") : ""; - long channel = data.contains("channel") ? data.getLong("channel") : 0L; tooltip.add(Component.translatable("extendedae_plus.jade.label", label.isEmpty() ? "-" : label)); - tooltip.add(Component.translatable("extendedae_plus.jade.frequency", channel)); + // 所有者 + if (data.contains("ownerName")) { + tooltip.add(Component.translatable("extendedae_plus.jade.owner", data.getString("ownerName"))); + } else if (data.contains("placerId")) { + java.util.UUID placerId = data.getUUID("placerId"); + tooltip.add(Component.translatable("extendedae_plus.jade.owner", placerId.toString().substring(0, 8) + "...")); + } else { + tooltip.add(Component.translatable("extendedae_plus.jade.owner.public")); + } + + // 频道占用 + if (data.contains("usedChannels") && data.contains("maxChannels")) { + int used = data.getInt("usedChannels"); + int max = data.getInt("maxChannels"); + if (max <= 0) { + tooltip.add(Component.translatable("extendedae_plus.jade.channels", used)); + } else { + tooltip.add(Component.translatable("extendedae_plus.jade.channels_of", used, max)); + } + } + + // 网络在线 if (data.contains("networkUsable")) { boolean online = data.getBoolean("networkUsable"); tooltip.add(Component.translatable(online ? "extendedae_plus.jade.online" : "extendedae_plus.jade.offline")); diff --git a/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverProvider.java b/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverProvider.java index dd58fef..de496f7 100644 --- a/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverProvider.java +++ b/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverProvider.java @@ -3,14 +3,14 @@ package com.extendedae_plus.integration.jade; import appeng.api.networking.IGrid; import appeng.api.networking.IGridNode; import com.extendedae_plus.content.wireless.LabeledWirelessTransceiverBlockEntity; +import com.extendedae_plus.util.wireless.WirelessTeamUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import snownee.jade.api.BlockAccessor; import snownee.jade.api.IServerDataProvider; /** - * 标签无线收发器:服务端数据同步。 - * 仅包含标签名、频道、网络在线状态。 + * 标签无线收发器:服务端数据同步(无主从)。 */ public enum LabeledWirelessTransceiverProvider implements IServerDataProvider { INSTANCE; @@ -29,11 +29,31 @@ public enum LabeledWirelessTransceiverProvider implements IServerDataProvider player), rsp); }); ctx.get().setPacketHandled(true); diff --git a/src/main/java/com/extendedae_plus/network/LabelNetworkListS2CPacket.java b/src/main/java/com/extendedae_plus/network/LabelNetworkListS2CPacket.java index 28ead66..3c5714e 100644 --- a/src/main/java/com/extendedae_plus/network/LabelNetworkListS2CPacket.java +++ b/src/main/java/com/extendedae_plus/network/LabelNetworkListS2CPacket.java @@ -20,19 +20,25 @@ public class LabelNetworkListS2CPacket { private final BlockPos pos; private final List list; private final String currentLabel; - private final long currentChannel; + private final String ownerName; + private final int usedChannels; + private final int maxChannels; - public LabelNetworkListS2CPacket(BlockPos pos, List list, String currentLabel, long currentChannel) { + public LabelNetworkListS2CPacket(BlockPos pos, List list, String currentLabel, String ownerName, int usedChannels, int maxChannels) { this.pos = pos; this.list = list; this.currentLabel = currentLabel; - this.currentChannel = currentChannel; + this.ownerName = ownerName; + this.usedChannels = usedChannels; + this.maxChannels = maxChannels; } public static void encode(LabelNetworkListS2CPacket pkt, FriendlyByteBuf buf) { buf.writeBlockPos(pkt.pos); buf.writeUtf(pkt.currentLabel == null ? "" : pkt.currentLabel, 128); - buf.writeLong(pkt.currentChannel); + buf.writeUtf(pkt.ownerName == null ? "" : pkt.ownerName, 128); + buf.writeVarInt(pkt.usedChannels); + buf.writeVarInt(pkt.maxChannels); buf.writeVarInt(pkt.list.size()); for (LabelNetworkRegistry.LabelNetworkSnapshot s : pkt.list) { buf.writeUtf(s.label(), 128); @@ -43,7 +49,9 @@ public class LabelNetworkListS2CPacket { public static LabelNetworkListS2CPacket decode(FriendlyByteBuf buf) { BlockPos pos = buf.readBlockPos(); String curLabel = buf.readUtf(128); - long curChannel = buf.readLong(); + String ownerName = buf.readUtf(128); + int usedChannels = buf.readVarInt(); + int maxChannels = buf.readVarInt(); int size = buf.readVarInt(); List list = new ArrayList<>(size); for (int i = 0; i < size; i++) { @@ -51,7 +59,7 @@ public class LabelNetworkListS2CPacket { long channel = buf.readLong(); list.add(new LabelNetworkRegistry.LabelNetworkSnapshot(label, channel)); } - return new LabelNetworkListS2CPacket(pos, list, curLabel, curChannel); + return new LabelNetworkListS2CPacket(pos, list, curLabel, ownerName, usedChannels, maxChannels); } public static void handle(LabelNetworkListS2CPacket pkt, Supplier ctx) { @@ -63,7 +71,7 @@ public class LabelNetworkListS2CPacket { private static void handleClient(LabelNetworkListS2CPacket pkt) { Minecraft mc = Minecraft.getInstance(); if (mc.screen instanceof LabeledWirelessTransceiverScreen screen && screen.isFor(pkt.pos)) { - screen.updateList(pkt.list, pkt.currentLabel, pkt.currentChannel); + screen.updateList(pkt.list, pkt.currentLabel, pkt.ownerName, pkt.usedChannels, pkt.maxChannels); } } } 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 72c6c3e..b0ad989 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -104,7 +104,7 @@ "gui.extendedae_plus.labeled_wireless.button.set": "Set Current", "gui.extendedae_plus.labeled_wireless.button.refresh": "Disconnect", "gui.extendedae_plus.labeled_wireless.current_label": "Current Label", - "gui.extendedae_plus.labeled_wireless.current_channel": "Current Channel", + "gui.extendedae_plus.labeled_wireless.current_owner": "Owner", "extendedae_plus.screen.reload_mapping": "Reload Mapping", "extendedae_plus.screen.reload_mapping_success": "Overloading mapping successful", 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 ac5e5a1..1eea61d 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -103,7 +103,7 @@ "gui.extendedae_plus.labeled_wireless.button.set": "设为当前", "gui.extendedae_plus.labeled_wireless.button.refresh": "断开连接", "gui.extendedae_plus.labeled_wireless.current_label": "当前标签", - "gui.extendedae_plus.labeled_wireless.current_channel": "当前频道", + "gui.extendedae_plus.labeled_wireless.current_owner": "所有者", "extendedae_plus.screen.reload_mapping": "重载映射", "extendedae_plus.screen.reload_mapping_success": "重载映射成功", diff --git a/src/main/resources/assets/extendedae_plus/textures/gui/lable_wireless_transceiver_gui.png b/src/main/resources/assets/extendedae_plus/textures/gui/lable_wireless_transceiver_gui.png index 641d1e1..6fb7716 100644 Binary files a/src/main/resources/assets/extendedae_plus/textures/gui/lable_wireless_transceiver_gui.png and b/src/main/resources/assets/extendedae_plus/textures/gui/lable_wireless_transceiver_gui.png differ