Update from Git Manager GUI

This commit is contained in:
2026-02-21 18:41:15 +01:00
parent 7ede377c07
commit 301c0f1ce9
2 changed files with 154 additions and 7 deletions

View File

@@ -45,6 +45,7 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
case "export" -> handleExport(player, args);
case "import" -> handleImport(player, args);
case "stats" -> handleStats(player);
case "top" -> handleTop(player);
case "archive" -> handleArchive(player);
case "comment" -> handleComment(player, args);
case "blacklist" -> handleBlacklist(player, args);
@@ -543,6 +544,45 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
}
}
// ─────────────────────────── /ticket top ──────────────────────────────
/**
* Zeigt das Leaderboard der Top-5 Ticket-Ersteller.
* Basiert auf der ticket_creator_stats-Tabelle, die Werte auch nach
* dem Löschen oder Archivieren von Tickets beibehält.
* Berechtigung: ticket.create (alle Spieler)
*/
private void handleTop(Player player) {
if (!player.hasPermission("ticket.create") && !player.hasPermission("ticket.admin")) {
player.sendMessage(plugin.formatMessage("messages.no-permission"));
return;
}
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
List<String[]> top = plugin.getDatabaseManager().getTopCreators(5);
Bukkit.getScheduler().runTask(plugin, () -> {
player.sendMessage(plugin.color("&8&m "));
player.sendMessage(plugin.color("&6&lTop-5 Ticket-Ersteller"));
player.sendMessage(plugin.color("&8&m "));
if (top.isEmpty()) {
player.sendMessage(plugin.color("&7Noch keine Daten vorhanden."));
} else {
String[] medals = {"&e🥇", "&7🥈", "&6🥉", "&7#4", "&7#5"};
for (String[] entry : top) {
int rankIdx = Integer.parseInt(entry[0]) - 1;
String medal = rankIdx < medals.length ? medals[rankIdx] : "&7#" + entry[0];
String name = entry[1];
String count = entry[2];
player.sendMessage(plugin.color(
medal + " &f" + String.format("%-16s", name)
+ " &e" + count + " &7Ticket" + (Integer.parseInt(count) == 1 ? "" : "s")));
}
}
player.sendMessage(plugin.color("&8&m "));
player.sendMessage(plugin.color("&7(Zähler bleiben auch nach dem Löschen von Tickets erhalten)"));
});
});
}
// ─────────────────────────── /ticket reload ────────────────────────────
private void handleReload(Player player) {
@@ -575,6 +615,8 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
var stats = plugin.getDatabaseManager().getTicketStats();
var staffRatings = plugin.getDatabaseManager().getStaffRatings();
// Persistente Ersteller-Statistik überlebt Löschen/Archivieren
var topCreators = plugin.getDatabaseManager().getTopCreators(5);
Bukkit.getScheduler().runTask(plugin, () -> {
player.sendMessage(plugin.color("&8&m "));
player.sendMessage(plugin.color("&6Ticket Statistik"));
@@ -623,11 +665,21 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
}
player.sendMessage(plugin.color("&8&m "));
player.sendMessage(plugin.color("&6Top Ersteller:"));
stats.byPlayer.entrySet().stream()
.sorted((a, b) -> b.getValue() - a.getValue())
.limit(5)
.forEach(e -> player.sendMessage(plugin.color("&e " + e.getKey() + ": &a" + e.getValue())));
player.sendMessage(plugin.color("&6Top-5 Ticket-Ersteller &7(historisch, persistent)"));
if (topCreators.isEmpty()) {
player.sendMessage(plugin.color("&7Noch keine Daten vorhanden."));
} else {
String[] medals = {"&e🥇", "&7🥈", "&6🥉", "&7#4", "&7#5"};
for (String[] entry : topCreators) {
int rankIdx = Integer.parseInt(entry[0]) - 1;
String medal = rankIdx < medals.length ? medals[rankIdx] : "&7#" + entry[0];
String name = String.format("%-16s", entry[1]);
String count = entry[2];
player.sendMessage(plugin.color(
" " + medal + " &f" + name + " &e" + count
+ " &7Ticket" + (Integer.parseInt(count) == 1 ? "" : "s")));
}
}
player.sendMessage(plugin.color("&8&m "));
});
});
@@ -739,7 +791,7 @@ public class TicketCommand implements CommandExecutor, TabCompleter {
if (!(sender instanceof Player player)) return completions;
if (args.length == 1) {
List<String> subs = new ArrayList<>(List.of("create", "list", "comment"));
List<String> subs = new ArrayList<>(List.of("create", "list", "comment", "top"));
if (player.hasPermission("ticket.support") || player.hasPermission("ticket.admin"))
subs.addAll(List.of("claim", "close"));
if (plugin.getConfig().getBoolean("rating-enabled", true)) subs.add("rate");