From d00fa703c678358eb3b960fe33a7687c54d6a8b4 Mon Sep 17 00:00:00 2001 From: FirephoenixX02 Date: Wed, 25 Mar 2026 17:59:00 +0100 Subject: [PATCH] Add leaderboard command for top 10 --- .../deathcounter/DeathCounter.java | 7 +- .../deathcounter/commands/DeathsCommand.java | 78 +++++++++++++++++++ src/main/resources/plugin.yml | 6 +- 3 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 src/main/java/me/firephoenix/deathcounter/commands/DeathsCommand.java diff --git a/src/main/java/me/firephoenix/deathcounter/DeathCounter.java b/src/main/java/me/firephoenix/deathcounter/DeathCounter.java index 04b9f57..fdb90a6 100644 --- a/src/main/java/me/firephoenix/deathcounter/DeathCounter.java +++ b/src/main/java/me/firephoenix/deathcounter/DeathCounter.java @@ -1,6 +1,7 @@ package me.firephoenix.deathcounter; import me.clip.placeholderapi.PlaceholderAPI; +import me.firephoenix.deathcounter.commands.DeathsCommand; import me.firephoenix.deathcounter.listener.DeathListener; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -33,9 +34,11 @@ public final class DeathCounter extends JavaPlugin { createSqLiteDatabase(); - if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { // - new DeathPlaceholderExpansion(this).register(); // + if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { + new DeathPlaceholderExpansion(this).register(); } + + getCommand("deaths").setExecutor(new DeathsCommand(this)); } private void createSqLiteDatabase() { diff --git a/src/main/java/me/firephoenix/deathcounter/commands/DeathsCommand.java b/src/main/java/me/firephoenix/deathcounter/commands/DeathsCommand.java new file mode 100644 index 0000000..115a909 --- /dev/null +++ b/src/main/java/me/firephoenix/deathcounter/commands/DeathsCommand.java @@ -0,0 +1,78 @@ +package me.firephoenix.deathcounter.commands; + +import me.firephoenix.deathcounter.DeathCounter; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jspecify.annotations.NonNull; + +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.UUID; +import java.util.logging.Level; + +/** + * @author NieGestorben + * Copyright© (c) 2026, All Rights Reserved. + */ +public class DeathsCommand implements CommandExecutor { + + public DeathCounter plugin; + + public DeathsCommand(DeathCounter plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String @NonNull [] args) { + if (args.length != 1) { + commandSender.sendMessage("§6Please enter in most or least deaths as an argument like so: /deaths most or /deaths least"); + return true; + } + + String order; + + if (args[0].equals("most")) { + order = "DESC"; + } else if (args[0].equals("least")) { + order = "ASC"; + } else { + return false; + } + + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try (var conn = DriverManager.getConnection(plugin.getDataBaseURL())) { + if (conn != null) { + String getFirstTenSQL = "SELECT * FROM deaths_counts ORDER BY deaths " + order + " LIMIT 10;"; + + Statement queryStatement = conn.createStatement(); + ResultSet resultSet = queryStatement.executeQuery(getFirstTenSQL); + + StringBuilder sb = new StringBuilder(); + + int place = 1; + + while (resultSet.next()) { + String uuid = resultSet.getString("uuid"); + int deaths = resultSet.getInt("deaths"); + String name = Bukkit.getOfflinePlayer(UUID.fromString(uuid)).getName(); + sb.append("§6" + place + ". " + name + ": " + deaths + " Deaths"); + sb.append("\n"); + place++; + } + + commandSender.sendMessage(sb.toString()); + } + } catch (SQLException e) { + Bukkit.getLogger().log(Level.WARNING, e.getMessage()); + commandSender.sendMessage("There was an error querying the database!"); + } + }); + return true; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2284de0..8823a79 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,4 +3,8 @@ version: '1.0' main: me.firephoenix.deathcounter.DeathCounter api-version: '1.21' description: Counts Deaths of all players via Scoreboard and Tablist -depend: ["PlaceholderAPI"] \ No newline at end of file +depend: ["PlaceholderAPI"] +commands: + deaths: + usage: /deaths + description: Shows players with the lowest death count in chat \ No newline at end of file