From d5b7c09ac96c38e0c4a25a9a04a4a4b5f769144f Mon Sep 17 00:00:00 2001 From: GaLicn <133291877+GaLicn@users.noreply.github.com> Date: Fri, 12 Dec 2025 14:22:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=97=A0=E7=BA=BF=E6=94=B6?= =?UTF-8?q?=E5=8F=91=E5=99=A8=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LabeledWirelessTransceiverScreen.java | 117 ++++-------------- .../LabeledWirelessTransceiverBlock.java | 18 ++- ...LabeledWirelessTransceiverBlockEntity.java | 11 ++ .../extendedae_plus/init/ModCapabilities.java | 6 + .../LabeledWirelessTransceiverComponents.java | 65 ++++++++++ .../network/LabelNetworkActionC2SPacket.java | 5 +- .../network/LabelNetworkListC2SPacket.java | 5 +- 7 files changed, 124 insertions(+), 103 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java 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 b6681c3..8ae0e12 100644 --- a/src/main/java/com/extendedae_plus/client/screen/LabeledWirelessTransceiverScreen.java +++ b/src/main/java/com/extendedae_plus/client/screen/LabeledWirelessTransceiverScreen.java @@ -9,8 +9,8 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.neoforged.neoforge.network.PacketDistributor; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; -import net.minecraft.client.gui.components.ImageButton; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; @@ -42,10 +42,10 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen entries = new ArrayList<>(); @@ -90,14 +90,14 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen sendSet(searchBox.getValue()), Component.translatable("gui.extendedae_plus.labeled_wireless.button.new")); - this.deleteBtn = new StateImageButton(secondColX, startY, BTN_W, BTN_H, BTN_U, BTN_V, 2, 177, 2, 195, TEX, TEX_W, TEX_H, - b -> sendDelete(), Component.translatable("gui.extendedae_plus.labeled_wireless.button.delete")); - this.setBtn = new StateImageButton(startX, secondRowY, BTN_W, BTN_H, BTN_U, BTN_V, 2, 177, 2, 195, TEX, TEX_W, TEX_H, - b -> sendSet(getSelectedLabel()), Component.translatable("gui.extendedae_plus.labeled_wireless.button.set")); - this.disconnectBtn = new StateImageButton(secondColX, secondRowY, BTN_W, BTN_H, BTN_U, BTN_V, 2, 177, 2, 195, TEX, TEX_W, TEX_H, - b -> sendDisconnect(), Component.translatable("gui.extendedae_plus.labeled_wireless.button.refresh")); + this.newBtn = Button.builder(Component.translatable("gui.extendedae_plus.labeled_wireless.button.new"), b -> sendSet(searchBox.getValue())) + .bounds(startX, startY, BTN_W, BTN_H).build(); + this.deleteBtn = Button.builder(Component.translatable("gui.extendedae_plus.labeled_wireless.button.delete"), b -> sendDelete()) + .bounds(secondColX, startY, BTN_W, BTN_H).build(); + this.setBtn = Button.builder(Component.translatable("gui.extendedae_plus.labeled_wireless.button.set"), b -> sendSet(getSelectedLabel())) + .bounds(startX, secondRowY, BTN_W, BTN_H).build(); + this.disconnectBtn = Button.builder(Component.translatable("gui.extendedae_plus.labeled_wireless.button.refresh"), b -> sendDisconnect()) + .bounds(secondColX, secondRowY, BTN_W, BTN_H).build(); this.addRenderableWidget(this.newBtn); this.addRenderableWidget(this.deleteBtn); @@ -109,6 +109,7 @@ public class LabeledWirelessTransceiverScreen extends AbstractContainerScreen (IInWorldGridNodeHost) be ); + // 标签无线收发器 + event.registerBlockEntity( + AECapabilities.IN_WORLD_GRID_NODE_HOST, + ModBlockEntities.LABELED_WIRELESS_TRANSCEIVER_BE.get(), + (be, ctx) -> (IInWorldGridNodeHost) be + ); // 供应器状态控制器(实现了 IInWorldGridNodeHost) event.registerBlockEntity( diff --git a/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java b/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java new file mode 100644 index 0000000..f3bc496 --- /dev/null +++ b/src/main/java/com/extendedae_plus/integration/jade/LabeledWirelessTransceiverComponents.java @@ -0,0 +1,65 @@ +package com.extendedae_plus.integration.jade; + +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import snownee.jade.api.BlockAccessor; +import snownee.jade.api.IBlockComponentProvider; +import snownee.jade.api.ITooltip; +import snownee.jade.api.config.IPluginConfig; + +public enum LabeledWirelessTransceiverComponents implements IBlockComponentProvider { + LABEL_AND_CHANNEL("labeled_wireless_component") { + @Override + protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, net.minecraft.nbt.CompoundTag data) { + String label = data.contains("label") ? data.getString("label") : ""; + tooltip.add(Component.translatable("extendedae_plus.jade.label", label.isEmpty() ? "-" : label)); + + // 所有者 + 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")); + } + } + }; + + private final ResourceLocation uid; + + LabeledWirelessTransceiverComponents(String name) { + this.uid = ResourceLocation.fromNamespaceAndPath("extendedae_plus", name); + } + + @Override + public ResourceLocation getUid() { + return uid; + } + + @Override + public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfig config) { + if (accessor.getServerData() != null) { + add(accessor, tooltip, config, accessor.getServerData()); + } + } + + protected abstract void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, net.minecraft.nbt.CompoundTag data); +} diff --git a/src/main/java/com/extendedae_plus/network/LabelNetworkActionC2SPacket.java b/src/main/java/com/extendedae_plus/network/LabelNetworkActionC2SPacket.java index a0ab478..15e2b83 100644 --- a/src/main/java/com/extendedae_plus/network/LabelNetworkActionC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/LabelNetworkActionC2SPacket.java @@ -34,9 +34,8 @@ public record LabelNetworkActionC2SPacket(BlockPos pos, String label, Action act public static void handle(LabelNetworkActionC2SPacket packet, IPayloadContext ctx) { ctx.enqueueWork(() -> { - var player = ctx.player(); - if (player == null) return; - var level = (net.minecraft.server.level.ServerLevel) player.level(); + if (!(ctx.player() instanceof net.minecraft.server.level.ServerPlayer player)) return; + var level = player.serverLevel(); if (!level.hasChunkAt(packet.pos)) return; var be = level.getBlockEntity(packet.pos); if (!(be instanceof LabeledWirelessTransceiverBlockEntity te)) return; diff --git a/src/main/java/com/extendedae_plus/network/LabelNetworkListC2SPacket.java b/src/main/java/com/extendedae_plus/network/LabelNetworkListC2SPacket.java index 6b59616..1305e97 100644 --- a/src/main/java/com/extendedae_plus/network/LabelNetworkListC2SPacket.java +++ b/src/main/java/com/extendedae_plus/network/LabelNetworkListC2SPacket.java @@ -31,9 +31,8 @@ public record LabelNetworkListC2SPacket(BlockPos pos) implements CustomPacketPay public static void handle(LabelNetworkListC2SPacket pkt, IPayloadContext ctx) { ctx.enqueueWork(() -> { - var player = ctx.player(); - if (player == null) return; - var level = (net.minecraft.server.level.ServerLevel) player.level(); + if (!(ctx.player() instanceof net.minecraft.server.level.ServerPlayer player)) return; + var level = player.serverLevel(); if (!level.hasChunkAt(pkt.pos)) return; var be = level.getBlockEntity(pkt.pos); if (!(be instanceof LabeledWirelessTransceiverBlockEntity te)) return;