From 266268bd0b567754714ef592076ba46585ff93fc Mon Sep 17 00:00:00 2001 From: M_Viper Date: Tue, 17 Mar 2026 15:20:20 +0100 Subject: [PATCH] Update from Git Manager GUI --- .../plugin/commands/FussballCommand.java | 84 ++++++++++++++----- .../plugin/hologram/HologramManager.java | 6 +- src/main/resources/plugin.yml | 2 +- 3 files changed, 69 insertions(+), 23 deletions(-) diff --git a/src/main/java/de/fussball/plugin/commands/FussballCommand.java b/src/main/java/de/fussball/plugin/commands/FussballCommand.java index 7a451f0..eafe58f 100644 --- a/src/main/java/de/fussball/plugin/commands/FussballCommand.java +++ b/src/main/java/de/fussball/plugin/commands/FussballCommand.java @@ -281,9 +281,9 @@ public class FussballCommand implements CommandExecutor, TabCompleter { } // ── Hologramm-Verwaltung ───────────────────────────────────────── - // /fb hologram set goals|wins|match – Hologramm erstellen + // /fb hologram set goals|wins|match – Hologramm erstellen/verschieben // /fb hologram remove – Nächstes Hologramm (< 5 Blöcke) entfernen - // /fb hologram delete – Hologramm nach ID löschen + // /fb hologram delete goals|wins|match – Hologramm gezielt löschen // /fb hologram reload – Alle Hologramme neu spawnen // /fb hologram list – Alle Hologramme anzeigen case "hologram", "holo" -> { @@ -291,9 +291,9 @@ public class FussballCommand implements CommandExecutor, TabCompleter { if (!(sender instanceof Player player)) { sender.sendMessage("Nur für Spieler!"); return true; } if (args.length < 2) { player.sendMessage(MessageUtil.header("Hologramm-Befehle")); - player.sendMessage("§e/fb hologram set goals|wins|match §7– Hologramm setzen"); + player.sendMessage("§e/fb hologram set 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 §7– Nach ID löschen"); + player.sendMessage("§e/fb hologram delete goals|wins|match §7– Gezielt löschen"); 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"); @@ -303,22 +303,26 @@ public class FussballCommand implements CommandExecutor, TabCompleter { switch (args[1].toLowerCase()) { case "set" -> { if (args.length < 4) { - player.sendMessage(MessageUtil.error("Benutze: /fb hologram set goals|wins|match")); + player.sendMessage(MessageUtil.error("Benutze: /fb hologram set 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; } - String id = args[2]; FussballHologram.HoloType type = switch (args[3].toLowerCase()) { case "wins", "siege" -> FussballHologram.HoloType.WINS; case "match", "live", "game" -> FussballHologram.HoloType.MATCH; default -> FussballHologram.HoloType.GOALS; }; - plugin.getHologramManager().createHologram(id, player.getLocation(), type); - String holoLabel = switch (type) { - case WINS -> "Top-10-Siege"; - case MATCH -> "Live-Match"; - default -> "Top-10-Tore"; - }; - player.sendMessage(MessageUtil.success("§e" + id + " §a(" + holoLabel + ") Hologramm gesetzt!")); + String id = buildHologramId(arena.getName(), type); + plugin.getHologramManager().removeHologram(id); + if (!plugin.getHologramManager().createHologram(id, player.getLocation(), type)) { + player.sendMessage(MessageUtil.error("Konnte das Hologramm für Arena §e" + arena.getName() + " §cund Typ §e" + hologramTypeName(type) + " §cnicht setzen.")); + return true; + } + player.sendMessage(MessageUtil.success("Hologramm §e" + hologramTypeName(type) + " §afür Arena §e" + arena.getName() + " §agesetzt!")); if (type == FussballHologram.HoloType.MATCH) { player.sendMessage("§7§oLive-Match-Hologramm aktualisiert sich automatisch bei Toren und Nachspielzeit."); } else { @@ -334,9 +338,28 @@ public class FussballCommand implements CommandExecutor, TabCompleter { } } case "delete" -> { - if (args.length < 3) { player.sendMessage(MessageUtil.error("Benutze: /fb hologram delete ")); return true; } + if (args.length >= 4) { + 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 = switch (args[3].toLowerCase()) { + case "wins", "siege" -> FussballHologram.HoloType.WINS; + case "match", "live", "game" -> FussballHologram.HoloType.MATCH; + default -> FussballHologram.HoloType.GOALS; + }; + String id = buildHologramId(arena.getName(), type); + if (plugin.getHologramManager().removeHologram(id)) { + player.sendMessage(MessageUtil.success("Hologramm §e" + hologramTypeName(type) + " §ader Arena §e" + arena.getName() + " §agelöscht!")); + } else { + player.sendMessage(MessageUtil.error("Kein Hologramm vom Typ §e" + hologramTypeName(type) + " §cfür Arena §e" + arena.getName() + " §cgefunden!")); + } + return true; + } + if (args.length < 3) { player.sendMessage(MessageUtil.error("Benutze: /fb hologram delete goals|wins|match")); return true; } if (plugin.getHologramManager().removeHologram(args[2])) { - player.sendMessage(MessageUtil.success("Hologramm §e" + args[2] + " §agelöscht!")); + player.sendMessage(MessageUtil.success("Legacy-Hologramm §e" + args[2] + " §agelöscht!")); } else { player.sendMessage(MessageUtil.error("Kein Hologramm mit ID §e" + args[2] + "§c gefunden!")); } @@ -351,11 +374,11 @@ public class FussballCommand implements CommandExecutor, TabCompleter { player.sendMessage(MessageUtil.warn("Keine Hologramme vorhanden.")); } else { for (String id : plugin.getHologramManager().getHologramIds()) { - player.sendMessage("§7 • §e" + id); + player.sendMessage("§7 • §e" + formatHologramDisplay(id)); } } } - default -> player.sendMessage(MessageUtil.error("Gültig: set goals|wins|match | remove | delete | reload | list")); + default -> player.sendMessage(MessageUtil.error("Gültig: set goals|wins|match | remove | delete goals|wins|match | reload | list")); } } @@ -494,7 +517,7 @@ 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 goals|wins|match / remove / reload"); + s.sendMessage("§c§lAdmin: §chologram set goals|wins|match / remove / reload"); } } @@ -512,6 +535,25 @@ public class FussballCommand implements CommandExecutor, TabCompleter { private String yn(boolean b) { return b ? "§aJA" : "§cNEIN"; } 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 hologramTypeName(FussballHologram.HoloType type) { + return switch (type) { + case WINS -> "wins"; + case MATCH -> "match"; + default -> "goals"; + }; + } + private String formatHologramDisplay(String id) { + int split = id.lastIndexOf('_'); + if (split > 0 && split < id.length() - 1) { + String arena = id.substring(0, split); + String type = id.substring(split + 1); + if (type.equals("goals") || type.equals("wins") || type.equals("match")) { + return arena + " §7→ §e" + type; + } + } + return id; + } // ── Tab-Completion ─────────────────────────────────────────────────────── @@ -526,11 +568,13 @@ public class FussballCommand implements CommandExecutor, TabCompleter { } 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(plugin.getArenaManager().getArenaNames()); // id-Vorschläge (frei wählbar, aber arena-namen passen) + 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.getHologramManager().getHologramIds()); + list.addAll(plugin.getArenaManager().getArenaNames()); + } else if (args.length == 4 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("delete")) { + list.addAll(List.of("goals", "wins", "match")); } else if (args.length == 3 && args[0].equalsIgnoreCase("setgk")) { // Spielernamen aus dem aktiven Spiel vorschlagen Game gkGame = plugin.getGameManager().getGame(args[1]); diff --git a/src/main/java/de/fussball/plugin/hologram/HologramManager.java b/src/main/java/de/fussball/plugin/hologram/HologramManager.java index abef536..8d029b2 100644 --- a/src/main/java/de/fussball/plugin/hologram/HologramManager.java +++ b/src/main/java/de/fussball/plugin/hologram/HologramManager.java @@ -123,10 +123,12 @@ public class HologramManager implements Listener { /** * Erstellt ein neues Hologramm und speichert es in holograms.yml. - * Falls die ID bereits existiert, wird das alte sauber entfernt. + * Falls die ID bereits existiert, wird kein Hologramm ersetzt. */ public boolean createHologram(String id, Location loc, FussballHologram.HoloType type) { - if (holograms.containsKey(id)) removeHologram(id); + if (holograms.containsKey(id)) { + return false; + } String path = "holograms." + id; holoConfig.set(path + ".world", loc.getWorld().getName()); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 834e60d..8c49736 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: Fussball -version: 1.0.1 +version: 1.0.2 main: de.fussball.plugin.Fussball api-version: 1.21 author: M_Viper