diff --git a/src/main/kotlin/org/server_info/server_info/Server_info.kt b/src/main/kotlin/org/server_info/server_info/Server_info.kt index 93b7082..d7f50f7 100644 --- a/src/main/kotlin/org/server_info/server_info/Server_info.kt +++ b/src/main/kotlin/org/server_info/server_info/Server_info.kt @@ -1,10 +1,12 @@ package org.server_info.server_info import net.kyori.adventure.text.Component +import net.kyori.adventure.text.format.NamedTextColor import org.bukkit.Bukkit import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender +import org.bukkit.command.TabCompleter import org.bukkit.entity.Player import org.bukkit.plugin.java.JavaPlugin import org.bukkit.scheduler.BukkitRunnable @@ -19,9 +21,22 @@ class Server_info : JavaPlugin() { private var tps = 20.0 private val df = DecimalFormat("#.##") + // Server title that appears at the top + private var serverTitle = "Paper" + override fun onEnable() { + // Save default config if it doesn't exist + saveDefaultConfig() + + // Load configuration + loadConfiguration() + // Register command - getCommand("serverinfo")?.setExecutor(ServerInfoCommand(this)) + getCommand("serverinfo")?.let { command -> + val commandExecutor = ServerInfoCommand(this) + command.setExecutor(commandExecutor) + command.tabCompleter = commandExecutor + } // Start server info collectors startTPSCalculation() @@ -32,6 +47,27 @@ class Server_info : JavaPlugin() { override fun onDisable() { logger.info("ServerInfo plugin has been disabled!") + // Save configuration + saveConfig() + } + + private fun loadConfiguration() { + // Load server title from config, default to "Paper" if not set + serverTitle = config.getString("server-title") ?: "Paper" + + // Create config options if they don't exist + if (!config.contains("server-title")) { + config.set("server-title", serverTitle) + saveConfig() + } + } + + fun setServerTitle(title: String) { + serverTitle = title + config.set("server-title", title) + saveConfig() + // Update tablist immediately to reflect the change + updateTabList() } private fun startTPSCalculation() { @@ -86,8 +122,7 @@ class Server_info : JavaPlugin() { } private fun getTabListHeader(): Component { - val serverName = server.name - return Component.text("§6§l$serverName\n§r§7Online players: §f${server.onlinePlayers.size}/${server.maxPlayers}") + return Component.text("§6§l$serverTitle\n§r§7Online players: §f${server.onlinePlayers.size}/${server.maxPlayers}") } private fun getTabListFooter(): Component { @@ -137,9 +172,10 @@ class Server_info : JavaPlugin() { // Format server info using string templates info.append("§6===== SERVER INFO =====\n") + info.append("§6Title: §f$serverTitle\n") info.append("§aRAM Usage: §f${usedMemory}MB / ${allocatedMemory}MB\n") info.append("§aMax RAM: §f${maxMemory}MB\n") - info.append("§aCPU Load: §f${df.format(cpuLoad)}%\n") // Added % sign + info.append("§aCPU Load: §f${df.format(cpuLoad)}%\n") info.append("§aTPS: ${formatTPS(tps)}\n") return info.toString() @@ -165,12 +201,48 @@ class Server_info : JavaPlugin() { } } - // Command executor inner class - private inner class ServerInfoCommand(private val plugin: Server_info) : CommandExecutor { + // Command executor inner class with tab completion + private inner class ServerInfoCommand(private val plugin: Server_info) : CommandExecutor, TabCompleter { override fun onCommand(sender: CommandSender, cmd: Command, label: String, args: Array): Boolean { if (cmd.name.equals("serverinfo", ignoreCase = true)) { - // Send server info + // If there are arguments, handle them + if (args.isNotEmpty()) { + when (args[0].lowercase()) { + "title", "settitle" -> { + // Check permission + if (!sender.hasPermission("serverinfo.admin")) { + sender.sendMessage("§cYou don't have permission to change the server title.") + return true + } + + if (args.size < 2) { + sender.sendMessage("§cUsage: /serverinfo settitle ") + return true + } + + // Join remaining args as the title + val newTitle = args.copyOfRange(1, args.size).joinToString(" ") + plugin.setServerTitle(newTitle) + sender.sendMessage("§aServer title changed to: §f$newTitle") + return true + } + "reload" -> { + // Check permission + if (!sender.hasPermission("serverinfo.admin")) { + sender.sendMessage("§cYou don't have permission to reload the plugin.") + return true + } + + plugin.reloadConfig() + plugin.loadConfiguration() + sender.sendMessage("§aServerInfo plugin configuration reloaded.") + return true + } + } + } + + // Default behavior - show server info sender.sendMessage(plugin.getServerInfo()) // If the sender is a player, show their ping @@ -183,5 +255,24 @@ class Server_info : JavaPlugin() { } return false } + + override fun onTabComplete( + sender: CommandSender, + command: Command, + alias: String, + args: Array<out String> + ): List<String>? { + if (command.name.equals("serverinfo", ignoreCase = true)) { + if (args.size == 1) { + val completions = mutableListOf<String>() + if (sender.hasPermission("serverinfo.admin")) { + completions.add("settitle") + completions.add("reload") + } + return completions.filter { it.startsWith(args[0].lowercase()) } + } + } + return null + } } } \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..8cfcb01 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,4 @@ +# ServerInfo Plugin Configuration + +# The title displayed at the top of the server info +server-title: "Paper" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index b765b72..2459f6b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,10 +6,16 @@ description: Displays server performance metrics commands: serverinfo: description: Shows server performance metrics - usage: /<command> + usage: | + /<command> - Shows server information + /<command> settitle <title> - Sets the server title + /<command> reload - Reloads the configuration aliases: [sinfo, si] permission: serverinfo.use permissions: serverinfo.use: description: Allows using the serverinfo command - default: true \ No newline at end of file + default: true + serverinfo.admin: + description: Allows changing server settings + default: op \ No newline at end of file diff --git a/target/classes/org/server_info/server_info/Server_info$ServerInfoCommand.class b/target/classes/org/server_info/server_info/Server_info$ServerInfoCommand.class index e6b4530..f862099 100644 Binary files a/target/classes/org/server_info/server_info/Server_info$ServerInfoCommand.class and b/target/classes/org/server_info/server_info/Server_info$ServerInfoCommand.class differ diff --git a/target/classes/org/server_info/server_info/Server_info$startTPSCalculation$1.class b/target/classes/org/server_info/server_info/Server_info$startTPSCalculation$1.class index 1302502..555ef8b 100644 Binary files a/target/classes/org/server_info/server_info/Server_info$startTPSCalculation$1.class and b/target/classes/org/server_info/server_info/Server_info$startTPSCalculation$1.class differ diff --git a/target/classes/org/server_info/server_info/Server_info$startTabListUpdater$1.class b/target/classes/org/server_info/server_info/Server_info$startTabListUpdater$1.class index c6ed5ec..4dd44db 100644 Binary files a/target/classes/org/server_info/server_info/Server_info$startTabListUpdater$1.class and b/target/classes/org/server_info/server_info/Server_info$startTabListUpdater$1.class differ diff --git a/target/classes/org/server_info/server_info/Server_info.class b/target/classes/org/server_info/server_info/Server_info.class index e2b1750..3419cbd 100644 Binary files a/target/classes/org/server_info/server_info/Server_info.class and b/target/classes/org/server_info/server_info/Server_info.class differ diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index b765b72..2459f6b 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -6,10 +6,16 @@ description: Displays server performance metrics commands: serverinfo: description: Shows server performance metrics - usage: /<command> + usage: | + /<command> - Shows server information + /<command> settitle <title> - Sets the server title + /<command> reload - Reloads the configuration aliases: [sinfo, si] permission: serverinfo.use permissions: serverinfo.use: description: Allows using the serverinfo command - default: true \ No newline at end of file + default: true + serverinfo.admin: + description: Allows changing server settings + default: op \ No newline at end of file diff --git a/target/original-server_info-1.0-SNAPSHOT.jar b/target/original-server_info-1.0-SNAPSHOT.jar index b44c033..2f83d93 100644 Binary files a/target/original-server_info-1.0-SNAPSHOT.jar and b/target/original-server_info-1.0-SNAPSHOT.jar differ diff --git a/target/server_info-1.0-SNAPSHOT.jar b/target/server_info-1.0-SNAPSHOT.jar index 3a12142..de475b4 100644 Binary files a/target/server_info-1.0-SNAPSHOT.jar and b/target/server_info-1.0-SNAPSHOT.jar differ