添加在线数信息展示行

This commit is contained in:
GaLicn 2025-12-12 14:33:45 +08:00
parent 2a865f74d5
commit 63a2f7b1b9
8 changed files with 32 additions and 9 deletions

View File

@ -103,7 +103,7 @@ public class LabelNetworkRegistry extends SavedData {
} }
/** /**
* 注销端点自动删除网络网络的移除需显式调用 removeNetwork * 注销端点自动删除网络网络的移除需显式调用 removeNetwork
*/ */
public synchronized void unregister(IWirelessEndpoint endpoint) { public synchronized void unregister(IWirelessEndpoint endpoint) {
ServerLevel level = endpoint.getServerLevel(); ServerLevel level = endpoint.getServerLevel();
@ -256,8 +256,8 @@ public class LabelNetworkRegistry extends SavedData {
this.virtualHost = new VirtualLabelNodeHost(); this.virtualHost = new VirtualLabelNodeHost();
this.managedNode = GridHelper.createManagedNode(virtualHost, NodeListener.INSTANCE); this.managedNode = GridHelper.createManagedNode(virtualHost, NodeListener.INSTANCE);
this.virtualHost.setManagedNode(this.managedNode); this.virtualHost.setManagedNode(this.managedNode);
// 虚拟节点不占用频道 // 虚拟节点不占用频道且提供致密32频道能力
this.managedNode.setFlags(); this.managedNode.setFlags(GridFlags.DENSE_CAPACITY);
this.managedNode.setIdlePowerUsage(0.0); this.managedNode.setIdlePowerUsage(0.0);
this.managedNode.setInWorldNode(false); this.managedNode.setInWorldNode(false);
this.managedNode.setVisualRepresentation(com.extendedae_plus.init.ModItems.LABELED_WIRELESS_TRANSCEIVER.get().getDefaultInstance()); this.managedNode.setVisualRepresentation(com.extendedae_plus.init.ModItems.LABELED_WIRELESS_TRANSCEIVER.get().getDefaultInstance());
@ -288,6 +288,10 @@ public class LabelNetworkRegistry extends SavedData {
endpoints.add(EndpointRef.load(list.getCompound(i))); endpoints.add(EndpointRef.load(list.getCompound(i)));
} }
} }
public int endpointCount() {
return endpoints.size();
}
} }
public record EndpointRef(@Nullable ResourceKey<Level> dim, BlockPos pos) { public record EndpointRef(@Nullable ResourceKey<Level> dim, BlockPos pos) {

View File

@ -56,6 +56,7 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen<La
private String lastSelectedLabel = ""; private String lastSelectedLabel = "";
private String currentLabel = ""; private String currentLabel = "";
private String currentOwner = ""; private String currentOwner = "";
private int onlineCount = 0;
private int usedChannels = 0; private int usedChannels = 0;
private int maxChannels = 0; private int maxChannels = 0;
@ -215,12 +216,14 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen<La
float infoScale = getInfoScale(); float infoScale = getInfoScale();
String labelLine = Component.translatable("gui.extendedae_plus.labeled_wireless.current_label").getString() + ": " + (currentLabel == null || currentLabel.isEmpty() ? "-" : currentLabel); String labelLine = Component.translatable("gui.extendedae_plus.labeled_wireless.current_label").getString() + ": " + (currentLabel == null || currentLabel.isEmpty() ? "-" : currentLabel);
String ownerLine = Component.translatable("gui.extendedae_plus.labeled_wireless.current_owner").getString() + ": " + (currentOwner == null || currentOwner.isEmpty() ? Component.translatable("extendedae_plus.jade.owner.public").getString() : currentOwner); String ownerLine = Component.translatable("gui.extendedae_plus.labeled_wireless.current_owner").getString() + ": " + (currentOwner == null || currentOwner.isEmpty() ? Component.translatable("extendedae_plus.jade.owner.public").getString() : currentOwner);
String onlineLine = Component.translatable("gui.extendedae_plus.labeled_wireless.online_count").getString() + ": " + onlineCount;
Component channelComp = maxChannels <= 0 Component channelComp = maxChannels <= 0
? Component.translatable("extendedae_plus.jade.channels", usedChannels) ? Component.translatable("extendedae_plus.jade.channels", usedChannels)
: Component.translatable("extendedae_plus.jade.channels_of", usedChannels, maxChannels); : Component.translatable("extendedae_plus.jade.channels_of", usedChannels, maxChannels);
drawInfoLine(gfx, labelLine, infoX, infoY, infoScale); drawInfoLine(gfx, labelLine, infoX, infoY, infoScale);
drawInfoLine(gfx, ownerLine, infoX, infoY + 12, infoScale); drawInfoLine(gfx, ownerLine, infoX, infoY + 12, infoScale);
drawInfoLine(gfx, channelComp.getString(), infoX, infoY + 24, infoScale); drawInfoLine(gfx, onlineLine, infoX, infoY + 24, infoScale);
drawInfoLine(gfx, channelComp.getString(), infoX, infoY + 36, infoScale);
} }
private void renderScrollBar(GuiGraphics gfx) { private void renderScrollBar(GuiGraphics gfx) {
@ -324,7 +327,7 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen<La
return ""; return "";
} }
public void updateList(List<LabelNetworkRegistry.LabelNetworkSnapshot> list, String currentLabel, String ownerName, int usedChannels, int maxChannels) { public void updateList(List<LabelNetworkRegistry.LabelNetworkSnapshot> list, String currentLabel, String ownerName, int usedChannels, int maxChannels, int onlineCount) {
String prevSelected = getSelectedLabel(); String prevSelected = getSelectedLabel();
this.entries.clear(); this.entries.clear();
for (LabelNetworkRegistry.LabelNetworkSnapshot s : list) { for (LabelNetworkRegistry.LabelNetworkSnapshot s : list) {
@ -332,8 +335,10 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen<La
} }
this.currentLabel = currentLabel == null ? "" : currentLabel; this.currentLabel = currentLabel == null ? "" : currentLabel;
this.currentOwner = ownerName == null ? "" : ownerName; this.currentOwner = ownerName == null ? "" : ownerName;
this.onlineCount = onlineCount;
this.usedChannels = usedChannels; this.usedChannels = usedChannels;
this.maxChannels = maxChannels; this.maxChannels = maxChannels;
if (prevSelected != null && !prevSelected.isEmpty()) { if (prevSelected != null && !prevSelected.isEmpty()) {
this.lastSelectedLabel = prevSelected; this.lastSelectedLabel = prevSelected;
} else if (this.currentLabel != null && !this.currentLabel.isEmpty()) { } else if (this.currentLabel != null && !this.currentLabel.isEmpty()) {

View File

@ -42,6 +42,14 @@ public class LabelNetworkListC2SPacket {
String currentLabel = te.getLabelForDisplay(); String currentLabel = te.getLabelForDisplay();
String ownerName = te.getPlacerId() != null ? WirelessTeamUtil.getNetworkOwnerName(level, te.getPlacerId()).getString() : ""; String ownerName = te.getPlacerId() != null ? WirelessTeamUtil.getNetworkOwnerName(level, te.getPlacerId()).getString() : "";
int onlineCount = 0;
if (currentLabel != null && !currentLabel.isEmpty()) {
var network = LabelNetworkRegistry.get(level).getNetwork(level, currentLabel, te.getPlacerId());
if (network != null) {
onlineCount = network.endpointCount();
}
}
// 计算频道占用信息 Jade 显示一致 // 计算频道占用信息 Jade 显示一致
int usedChannels = 0; int usedChannels = 0;
int maxChannels = 0; int maxChannels = 0;
@ -60,7 +68,7 @@ public class LabelNetworkListC2SPacket {
} }
} }
LabelNetworkListS2CPacket rsp = new LabelNetworkListS2CPacket(pkt.pos, list, currentLabel, ownerName, usedChannels, maxChannels); LabelNetworkListS2CPacket rsp = new LabelNetworkListS2CPacket(pkt.pos, list, currentLabel, ownerName, usedChannels, maxChannels, onlineCount);
com.extendedae_plus.init.ModNetwork.CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), rsp); com.extendedae_plus.init.ModNetwork.CHANNEL.send(PacketDistributor.PLAYER.with(() -> player), rsp);
}); });
ctx.get().setPacketHandled(true); ctx.get().setPacketHandled(true);

View File

@ -23,14 +23,16 @@ public class LabelNetworkListS2CPacket {
private final String ownerName; private final String ownerName;
private final int usedChannels; private final int usedChannels;
private final int maxChannels; private final int maxChannels;
private final int onlineCount;
public LabelNetworkListS2CPacket(BlockPos pos, List<LabelNetworkRegistry.LabelNetworkSnapshot> list, String currentLabel, String ownerName, int usedChannels, int maxChannels) { public LabelNetworkListS2CPacket(BlockPos pos, List<LabelNetworkRegistry.LabelNetworkSnapshot> list, String currentLabel, String ownerName, int usedChannels, int maxChannels, int onlineCount) {
this.pos = pos; this.pos = pos;
this.list = list; this.list = list;
this.currentLabel = currentLabel; this.currentLabel = currentLabel;
this.ownerName = ownerName; this.ownerName = ownerName;
this.usedChannels = usedChannels; this.usedChannels = usedChannels;
this.maxChannels = maxChannels; this.maxChannels = maxChannels;
this.onlineCount = onlineCount;
} }
public static void encode(LabelNetworkListS2CPacket pkt, FriendlyByteBuf buf) { public static void encode(LabelNetworkListS2CPacket pkt, FriendlyByteBuf buf) {
@ -39,6 +41,7 @@ public class LabelNetworkListS2CPacket {
buf.writeUtf(pkt.ownerName == null ? "" : pkt.ownerName, 128); buf.writeUtf(pkt.ownerName == null ? "" : pkt.ownerName, 128);
buf.writeVarInt(pkt.usedChannels); buf.writeVarInt(pkt.usedChannels);
buf.writeVarInt(pkt.maxChannels); buf.writeVarInt(pkt.maxChannels);
buf.writeVarInt(pkt.onlineCount);
buf.writeVarInt(pkt.list.size()); buf.writeVarInt(pkt.list.size());
for (LabelNetworkRegistry.LabelNetworkSnapshot s : pkt.list) { for (LabelNetworkRegistry.LabelNetworkSnapshot s : pkt.list) {
buf.writeUtf(s.label(), 128); buf.writeUtf(s.label(), 128);
@ -52,6 +55,7 @@ public class LabelNetworkListS2CPacket {
String ownerName = buf.readUtf(128); String ownerName = buf.readUtf(128);
int usedChannels = buf.readVarInt(); int usedChannels = buf.readVarInt();
int maxChannels = buf.readVarInt(); int maxChannels = buf.readVarInt();
int onlineCount = buf.readVarInt();
int size = buf.readVarInt(); int size = buf.readVarInt();
List<LabelNetworkRegistry.LabelNetworkSnapshot> list = new ArrayList<>(size); List<LabelNetworkRegistry.LabelNetworkSnapshot> list = new ArrayList<>(size);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
@ -59,7 +63,7 @@ public class LabelNetworkListS2CPacket {
long channel = buf.readLong(); long channel = buf.readLong();
list.add(new LabelNetworkRegistry.LabelNetworkSnapshot(label, channel)); list.add(new LabelNetworkRegistry.LabelNetworkSnapshot(label, channel));
} }
return new LabelNetworkListS2CPacket(pos, list, curLabel, ownerName, usedChannels, maxChannels); return new LabelNetworkListS2CPacket(pos, list, curLabel, ownerName, usedChannels, maxChannels, onlineCount);
} }
public static void handle(LabelNetworkListS2CPacket pkt, Supplier<NetworkEvent.Context> ctx) { public static void handle(LabelNetworkListS2CPacket pkt, Supplier<NetworkEvent.Context> ctx) {
@ -71,7 +75,7 @@ public class LabelNetworkListS2CPacket {
private static void handleClient(LabelNetworkListS2CPacket pkt) { private static void handleClient(LabelNetworkListS2CPacket pkt) {
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
if (mc.screen instanceof LabeledWirelessTransceiverScreen screen && screen.isFor(pkt.pos)) { if (mc.screen instanceof LabeledWirelessTransceiverScreen screen && screen.isFor(pkt.pos)) {
screen.updateList(pkt.list, pkt.currentLabel, pkt.ownerName, pkt.usedChannels, pkt.maxChannels); screen.updateList(pkt.list, pkt.currentLabel, pkt.ownerName, pkt.usedChannels, pkt.maxChannels, pkt.onlineCount);
} }
} }
} }

View File

@ -105,6 +105,7 @@
"gui.extendedae_plus.labeled_wireless.button.refresh": "Disconnect", "gui.extendedae_plus.labeled_wireless.button.refresh": "Disconnect",
"gui.extendedae_plus.labeled_wireless.current_label": "Current Label", "gui.extendedae_plus.labeled_wireless.current_label": "Current Label",
"gui.extendedae_plus.labeled_wireless.current_owner": "Owner", "gui.extendedae_plus.labeled_wireless.current_owner": "Owner",
"gui.extendedae_plus.labeled_wireless.online_count": "Online",
"extendedae_plus.screen.reload_mapping": "Reload Mapping", "extendedae_plus.screen.reload_mapping": "Reload Mapping",
"extendedae_plus.screen.reload_mapping_success": "Overloading mapping successful", "extendedae_plus.screen.reload_mapping_success": "Overloading mapping successful",

View File

@ -104,6 +104,7 @@
"gui.extendedae_plus.labeled_wireless.button.refresh": "断开连接", "gui.extendedae_plus.labeled_wireless.button.refresh": "断开连接",
"gui.extendedae_plus.labeled_wireless.current_label": "当前标签", "gui.extendedae_plus.labeled_wireless.current_label": "当前标签",
"gui.extendedae_plus.labeled_wireless.current_owner": "所有者", "gui.extendedae_plus.labeled_wireless.current_owner": "所有者",
"gui.extendedae_plus.labeled_wireless.online_count": "在线数",
"extendedae_plus.screen.reload_mapping": "重载映射", "extendedae_plus.screen.reload_mapping": "重载映射",
"extendedae_plus.screen.reload_mapping_success": "重载映射成功", "extendedae_plus.screen.reload_mapping_success": "重载映射成功",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB