From 1c77932348291cd6a04eff8bd968ef3f2d96df37 Mon Sep 17 00:00:00 2001 From: Melledy <121644117+Melledy@users.noreply.github.com> Date: Sun, 19 May 2024 10:46:27 -0700 Subject: [PATCH] Add `/status` command --- src/main/java/emu/lunarcore/LunarCore.java | 12 ++++++-- .../command/commands/StatusCommand.java | 28 +++++++++++++++++++ .../emu/lunarcore/server/game/GameServer.java | 6 ++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/main/java/emu/lunarcore/command/commands/StatusCommand.java diff --git a/src/main/java/emu/lunarcore/LunarCore.java b/src/main/java/emu/lunarcore/LunarCore.java index 6ce604a..44f51b8 100644 --- a/src/main/java/emu/lunarcore/LunarCore.java +++ b/src/main/java/emu/lunarcore/LunarCore.java @@ -226,7 +226,7 @@ public class LunarCore { return ""; } - private static String getGitHash() { + public static String getGitHash() { // Use a string builder in case one of the build config fields are missing StringBuilder builder = new StringBuilder(); @@ -246,7 +246,7 @@ public class LunarCore { } if (builder.isEmpty()) { - return ""; + return "UNKNOWN"; } else { return builder.toString(); } @@ -274,6 +274,14 @@ public class LunarCore { timeOffset = 0; } } + + /** + * Returns the memory usage of the server, in megabytes. + */ + public static long getMemoryUsage() { + Runtime runtime = Runtime.getRuntime(); + return (runtime.totalMemory() - runtime.freeMemory()) / 1_048_576L; + } // Server console diff --git a/src/main/java/emu/lunarcore/command/commands/StatusCommand.java b/src/main/java/emu/lunarcore/command/commands/StatusCommand.java new file mode 100644 index 0000000..820ecee --- /dev/null +++ b/src/main/java/emu/lunarcore/command/commands/StatusCommand.java @@ -0,0 +1,28 @@ +package emu.lunarcore.command.commands; + +import emu.lunarcore.LunarCore; +import emu.lunarcore.command.Command; +import emu.lunarcore.command.CommandArgs; +import emu.lunarcore.command.CommandHandler; + +@Command(label = "status", aliases = {"st", "stats"}, permission = "admin.status", desc = "/status. Displays the status of the server.") +public class StatusCommand implements CommandHandler { + + @Override + public void execute(CommandArgs args) { + // Run garbage collector + if (!args.hasFlag("-nogc")) { + System.gc(); + } + + // Show status + args.sendMessage("Showing server status"); + + args.sendMessage("Git hash: " + LunarCore.getGitHash()); + args.sendMessage("Memory usage: " + LunarCore.getMemoryUsage() + " MB"); + + if (LunarCore.getGameServer() != null) { + args.sendMessage("Player count: " + LunarCore.getGameServer().getPlayerCount()); + } + } +} diff --git a/src/main/java/emu/lunarcore/server/game/GameServer.java b/src/main/java/emu/lunarcore/server/game/GameServer.java index 50ff51e..ff71f0c 100644 --- a/src/main/java/emu/lunarcore/server/game/GameServer.java +++ b/src/main/java/emu/lunarcore/server/game/GameServer.java @@ -70,6 +70,12 @@ public class GameServer extends KcpServer { public GameServerConfig getServerConfig() { return this.serverConfig; } + + public int getPlayerCount() { + synchronized (this.players) { + return this.players.size(); + } + } public void registerPlayer(Player player) { synchronized (this.players) {