Update from Git Manager GUI

This commit is contained in:
2026-03-17 16:15:01 +01:00
parent 22c5837455
commit a6d17f4d64
6 changed files with 483 additions and 40 deletions

View File

@@ -11,6 +11,7 @@ import de.fussball.plugin.hologram.HologramManager;
import de.fussball.plugin.stats.MatchHistory;
import de.fussball.plugin.stats.StatsManager;
import de.fussball.plugin.utils.MessageUtil;
import org.bukkit.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.*;
@@ -81,6 +82,36 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
}
case "stats" -> {
if (args.length >= 2 && args[1].equalsIgnoreCase("reset")) {
if (!sender.hasPermission("fussball.admin")) { sender.sendMessage(MessageUtil.error("Keine Berechtigung!")); return true; }
if (args.length < 3) { sender.sendMessage(MessageUtil.error("Benutze: /fb stats reset <spieler|all>")); return true; }
if (args[2].equalsIgnoreCase("all") || args[2].equalsIgnoreCase("*")) {
int removed = plugin.getStatsManager().resetAllStats();
plugin.getHologramManager().refreshAll();
sender.sendMessage(MessageUtil.success("Alle Statistiken zurückgesetzt! §7(" + removed + " Einträge)"));
return true;
}
Player onlineTarget = Bukkit.getPlayerExact(args[2]);
UUID targetUuid = onlineTarget != null
? onlineTarget.getUniqueId()
: plugin.getStatsManager().findPlayerUuidByName(args[2]);
if (targetUuid == null) {
sender.sendMessage(MessageUtil.error("Keine gespeicherten Statistiken für §e" + args[2] + " §cgefunden!"));
return true;
}
if (!plugin.getStatsManager().resetStats(targetUuid)) {
sender.sendMessage(MessageUtil.error("Statistiken von §e" + args[2] + " §ckonnten nicht zurückgesetzt werden."));
return true;
}
plugin.getHologramManager().refreshAll();
sender.sendMessage(MessageUtil.success("Statistiken von §e" + args[2] + " §azurückgesetzt!"));
return true;
}
if (!(sender instanceof Player player)) { sender.sendMessage("Nur für Spieler!"); return true; }
Player target = args.length >= 2 ? Bukkit.getPlayer(args[1]) : player;
if (target == null) { player.sendMessage(MessageUtil.error("Spieler §e" + args[1] + " §cnicht gefunden!")); return true; }
@@ -294,6 +325,9 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
player.sendMessage("§e/fb hologram set <arena> goals|wins|match §7 Hologramm setzen");
player.sendMessage("§e/fb hologram remove §7 Nächstes entfernen (< 5 Blöcke)");
player.sendMessage("§e/fb hologram delete <arena> goals|wins|match §7 Gezielt löschen");
player.sendMessage("§e/fb hologram text <arena> goals|wins|match <zeile> <text> §7 Textzeile anpassen");
player.sendMessage("§e/fb hologram textpreview <arena> goals|wins|match §7 Aktuelles Textlayout ansehen");
player.sendMessage("§e/fb hologram textreset <arena> goals|wins|match §7 Standardtext wiederherstellen");
player.sendMessage("§e/fb hologram reload §7 Alle neu laden");
player.sendMessage("§e/fb hologram list §7 Alle anzeigen");
player.sendMessage("§7Gesamt: §e" + plugin.getHologramManager().getCount() + " §7Hologramme");
@@ -364,6 +398,98 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
player.sendMessage(MessageUtil.error("Kein Hologramm mit ID §e" + args[2] + "§c gefunden!"));
}
}
case "text" -> {
if (args.length < 6) {
player.sendMessage(MessageUtil.error("Benutze: /fb hologram text <arena> goals|wins|match <zeile> <text>"));
return true;
}
Arena arena = plugin.getArenaManager().getArena(args[2]);
if (arena == null) {
player.sendMessage(MessageUtil.error("Arena §e" + args[2] + " §cnicht gefunden!"));
return true;
}
FussballHologram.HoloType type = parseHologramType(args[3]);
int line;
try {
line = Integer.parseInt(args[4]);
} catch (NumberFormatException ex) {
player.sendMessage(MessageUtil.error("§e" + args[4] + " §cist keine gültige Zeilennummer!"));
return true;
}
if (line < 1) {
player.sendMessage(MessageUtil.error("Zeilennummer muss mindestens §e1 §csein!"));
return true;
}
String id = buildHologramId(arena.getName(), type);
HologramManager hologramManager = plugin.getHologramManager();
if (hologramManager.getHologram(id) == null) {
player.sendMessage(MessageUtil.error("Hologramm §e" + hologramTypeName(type) + " §cfür Arena §e" + arena.getName() + " §cexistiert nicht!"));
return true;
}
List<String> lines = new ArrayList<>(getEditableHologramTemplate(hologramManager, id, type));
while (lines.size() < line) {
lines.add(" ");
}
lines.set(line - 1, ChatColor.translateAlternateColorCodes('&', joinArgs(args, 5)));
if (!hologramManager.setCustomText(id, type, lines)) {
player.sendMessage(MessageUtil.error("Konnte den Hologramm-Text nicht speichern!"));
return true;
}
player.sendMessage(MessageUtil.success("Hologramm-Text für §e" + arena.getName() + " §a(" + hologramTypeName(type) + ") aktualisiert."));
player.sendMessage("§7Zeile §e" + line + "§7: " + lines.get(line - 1));
}
case "textpreview" -> {
if (args.length < 4) {
player.sendMessage(MessageUtil.error("Benutze: /fb hologram textpreview <arena> goals|wins|match"));
return true;
}
Arena arena = plugin.getArenaManager().getArena(args[2]);
if (arena == null) {
player.sendMessage(MessageUtil.error("Arena §e" + args[2] + " §cnicht gefunden!"));
return true;
}
FussballHologram.HoloType type = parseHologramType(args[3]);
String id = buildHologramId(arena.getName(), type);
HologramManager hologramManager = plugin.getHologramManager();
if (hologramManager.getHologram(id) == null) {
player.sendMessage(MessageUtil.error("Hologramm §e" + hologramTypeName(type) + " §cfür Arena §e" + arena.getName() + " §cexistiert nicht!"));
return true;
}
List<String> lines = getEditableHologramTemplate(hologramManager, id, type);
player.sendMessage(MessageUtil.header("Holo-Text: " + arena.getName() + " / " + hologramTypeName(type)));
for (int i = 0; i < lines.size(); i++) {
player.sendMessage("§e" + (i + 1) + "§7: " + lines.get(i));
}
if (type == FussballHologram.HoloType.MATCH) {
player.sendMessage("§8Platzhalter: §7{header} {separator} {phase} {score} {time}");
} else {
player.sendMessage("§8Platzhalter: §7{title} {separator} {entries} {toggle}");
}
}
case "textreset" -> {
if (args.length < 4) {
player.sendMessage(MessageUtil.error("Benutze: /fb hologram textreset <arena> goals|wins|match"));
return true;
}
Arena arena = plugin.getArenaManager().getArena(args[2]);
if (arena == null) {
player.sendMessage(MessageUtil.error("Arena §e" + args[2] + " §cnicht gefunden!"));
return true;
}
FussballHologram.HoloType type = parseHologramType(args[3]);
String id = buildHologramId(arena.getName(), type);
HologramManager hologramManager = plugin.getHologramManager();
if (hologramManager.getHologram(id) == null) {
player.sendMessage(MessageUtil.error("Hologramm §e" + hologramTypeName(type) + " §cfür Arena §e" + arena.getName() + " §cexistiert nicht!"));
return true;
}
hologramManager.resetCustomText(id, type);
player.sendMessage(MessageUtil.success("Standardtext für §e" + arena.getName() + " §a(" + hologramTypeName(type) + ") wiederhergestellt."));
}
case "reload" -> {
plugin.getHologramManager().reload();
player.sendMessage(MessageUtil.success("Hologramme neu geladen! §7(" + plugin.getHologramManager().getCount() + " gesamt)"));
@@ -378,7 +504,7 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
}
}
}
default -> player.sendMessage(MessageUtil.error("Gültig: set <arena> goals|wins|match | remove | delete <arena> goals|wins|match | reload | list"));
default -> player.sendMessage(MessageUtil.error("Gültig: set | remove | delete | text | textpreview | textreset | reload | list"));
}
}
@@ -517,7 +643,8 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
s.sendMessage("§e/fb history [n] §7- Letzte Spiele anzeigen");
if (s.hasPermission("fussball.admin")) {
s.sendMessage("§c§lAdmin: §ccreate / delete / setup / stop / debug / dropball");
s.sendMessage("§c§lAdmin: §chologram set <arena> goals|wins|match / remove / reload");
s.sendMessage("§c§lAdmin: §cstats reset <spieler|all>");
s.sendMessage("§c§lAdmin: §chologram set|delete|text|textpreview|textreset <arena> <typ>");
}
}
@@ -536,6 +663,24 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
private String locStr(Location l) { return fmt(l.getX()) + " / " + fmt(l.getY()) + " / " + fmt(l.getZ()); }
private String fmt(double d) { return String.format("%.1f", d); }
private String buildHologramId(String arenaName, FussballHologram.HoloType type) { return arenaName.toLowerCase() + "_" + hologramTypeName(type); }
private String joinArgs(String[] args, int start) { return String.join(" ", Arrays.copyOfRange(args, start, args.length)); }
private List<String> getEditableHologramTemplate(HologramManager hologramManager, String id, FussballHologram.HoloType type) {
List<String> custom = hologramManager.getCustomText(id, type);
return custom.isEmpty() ? getDefaultHologramTemplate(type) : custom;
}
private List<String> getDefaultHologramTemplate(FussballHologram.HoloType type) {
if (type == FussballHologram.HoloType.MATCH) {
return List.of("{header}", "{separator}", "{phase}", "{score}", "{time}");
}
return List.of("{title}", "{separator}", "{entries}", "{separator}", "{toggle}");
}
private FussballHologram.HoloType parseHologramType(String rawType) {
return switch (rawType.toLowerCase()) {
case "wins", "siege" -> FussballHologram.HoloType.WINS;
case "match", "live", "game" -> FussballHologram.HoloType.MATCH;
default -> FussballHologram.HoloType.GOALS;
};
}
private String hologramTypeName(FussballHologram.HoloType type) {
return switch (type) {
case WINS -> "wins";
@@ -565,16 +710,21 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
if (sender.hasPermission("fussball.admin")) list.addAll(List.of("create", "delete", "setup", "stop", "setgk", "debug", "hologram", "dropball"));
} else if (args.length == 2 && List.of("join","delete","setup","stop","setgk","debug","spectate","dropball").contains(args[0].toLowerCase())) {
list.addAll(plugin.getArenaManager().getArenaNames());
} else if (args.length == 2 && args[0].equalsIgnoreCase("stats") && sender.hasPermission("fussball.admin")) {
list.addAll(List.of("reset"));
} else if (args.length == 3 && args[0].equalsIgnoreCase("stats") && args[1].equalsIgnoreCase("reset") && sender.hasPermission("fussball.admin")) {
list.add("all");
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
list.add(onlinePlayer.getName());
}
} else if (args.length == 2 && args[0].equalsIgnoreCase("hologram")) {
list.addAll(List.of("set", "remove", "delete", "reload", "list"));
} else if (args.length == 3 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("set")) {
list.addAll(List.of("set", "remove", "delete", "text", "textpreview", "textreset", "reload", "list"));
} else if (args.length == 3 && args[0].equalsIgnoreCase("hologram") && List.of("set", "delete", "text", "textpreview", "textreset").contains(args[1].toLowerCase())) {
list.addAll(plugin.getArenaManager().getArenaNames());
} else if (args.length == 4 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("set")) {
list.addAll(List.of("goals", "wins", "match"));
} else if (args.length == 3 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("delete")) {
list.addAll(plugin.getArenaManager().getArenaNames());
} else if (args.length == 4 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("delete")) {
} else if (args.length == 4 && args[0].equalsIgnoreCase("hologram") && List.of("set", "delete", "text", "textpreview", "textreset").contains(args[1].toLowerCase())) {
list.addAll(List.of("goals", "wins", "match"));
} else if (args.length == 5 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("text")) {
list.addAll(List.of("1", "2", "3", "4", "5"));
} else if (args.length == 3 && args[0].equalsIgnoreCase("setgk")) {
// Spielernamen aus dem aktiven Spiel vorschlagen
Game gkGame = plugin.getGameManager().getGame(args[1]);