From d0e242900848052198ad857b21798f883dbd03cc Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 23 May 2025 21:33:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E7=82=B9=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/loader/src/main/resources/commands.yml | 7 ++++ .../bukkit/pack/BukkitPackManager.java | 1 + .../plugin/command/BukkitCommandManager.java | 1 + .../feature/DebugHostStatusCommand.java | 39 +++++++++++++++++++ .../pack/host/impl/SelfHostHttpServer.java | 18 +++++++-- 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugHostStatusCommand.java diff --git a/bukkit/loader/src/main/resources/commands.yml b/bukkit/loader/src/main/resources/commands.yml index fdf4e1613..0a4a2616f 100644 --- a/bukkit/loader/src/main/resources/commands.yml +++ b/bukkit/loader/src/main/resources/commands.yml @@ -175,6 +175,13 @@ debug_is_section_injected: - /craftengine debug is-section-injected - /ce debug is-section-injected +debug_host_status: + enable: true + permission: ce.command.debug.host_status + usage: + - /craftengine debug host-status + - /ce debug host-status + debug_test: enable: true permission: ce.command.debug.test diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java index 918953dee..59490e1a4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java @@ -121,6 +121,7 @@ public class BukkitPackManager extends AbstractPackManager implements Listener { return; } if (!Config.sendPackOnUpload()) return; + CraftEngine.instance().logger().info("Complete uploading resource pack"); for (BukkitServerPlayer player : this.plugin.networkManager().onlineUsers()) { sendResourcePack(player); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java index c1f1c3f39..0da8fe6dd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java @@ -39,6 +39,7 @@ public class BukkitCommandManager extends AbstractCommandManager new SearchUsageAdminCommand(this, plugin), new TestCommand(this, plugin), new DebugGetBlockStateRegistryIdCommand(this, plugin), + new DebugHostStatusCommand(this, plugin), new DebugGetBlockInternalIdCommand(this, plugin), new DebugAppearanceStateUsageCommand(this, plugin), new DebugRealStateUsageCommand(this, plugin), diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugHostStatusCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugHostStatusCommand.java new file mode 100644 index 000000000..6402c8f98 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DebugHostStatusCommand.java @@ -0,0 +1,39 @@ +package net.momirealms.craftengine.bukkit.plugin.command.feature; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.md_5.bungee.chat.ComponentSerializer; +import net.momirealms.craftengine.bukkit.nms.FastNMS; +import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; +import net.momirealms.craftengine.bukkit.plugin.injector.BukkitInjector; +import net.momirealms.craftengine.core.pack.host.impl.SelfHostHttpServer; +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; +import net.momirealms.craftengine.core.plugin.command.sender.Sender; +import org.bukkit.Chunk; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.incendo.cloud.Command; + +public class DebugHostStatusCommand extends BukkitCommandFeature { + + public DebugHostStatusCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { + super(commandManager, plugin); + } + + @Override + public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { + return builder + .handler(context -> { + Sender sender = plugin().senderFactory().wrap(context.sender()); + sender.sendMessage(Component.text("Self Host status: " + (SelfHostHttpServer.instance().isAlive() ? "on" : "off"))); + byte[] pack = SelfHostHttpServer.instance().resourcePackBytes(); + sender.sendMessage(Component.text("Resource Pack Bytes: " + (pack == null ? "null" : pack.length))); + }); + } + + @Override + public String getFeatureID() { + return "debug_host_status"; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHostHttpServer.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHostHttpServer.java index 530116109..0d617ce0c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHostHttpServer.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/SelfHostHttpServer.java @@ -55,7 +55,7 @@ public class SelfHostHttpServer { private boolean denyNonMinecraft = true; private boolean useToken; - private volatile byte[] resourcePackBytes; + private byte[] resourcePackBytes; private String packHash; private UUID packUUID; @@ -93,6 +93,14 @@ public class SelfHostHttpServer { } } + public boolean isAlive() { + return this.server != null; + } + + public byte[] resourcePackBytes() { + return resourcePackBytes; + } + public static SelfHostHttpServer instance() { if (instance == null) { instance = new SelfHostHttpServer(); @@ -173,6 +181,7 @@ public class SelfHostHttpServer { this.server = null; if (this.threadPool != null) { this.threadPool.shutdownNow(); + this.threadPool = null; } } } @@ -262,8 +271,11 @@ public class SelfHostHttpServer { try (OutputStream os = exchange.getResponseBody()) { os.write(resourcePackBytes); } catch (IOException e) { - CraftEngine.instance().logger().warn("Failed to send resource pack", e); - throw e; + if (!e.getMessage().contains("abort") && !e.getMessage().contains("reset")) { + CraftEngine.instance().logger().warn("Failed to send resource pack", e); + throw e; + } + CraftEngine.instance().debug(() -> "Client aborted resource pack download: " + e.getMessage()); } }