Update from Git Manager GUI

This commit is contained in:
2026-02-28 00:50:00 +01:00
parent 622f72e7f3
commit 27d6804717
8 changed files with 1004 additions and 80 deletions

View File

@@ -5,6 +5,8 @@ import de.fussball.plugin.arena.Arena;
import de.fussball.plugin.game.Ball;
import de.fussball.plugin.game.Game;
import de.fussball.plugin.game.GameState;
import de.fussball.plugin.hologram.FussballHologram;
import de.fussball.plugin.hologram.HologramManager;
import de.fussball.plugin.stats.StatsManager;
import de.fussball.plugin.utils.MessageUtil;
import org.bukkit.Bukkit;
@@ -200,6 +202,76 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
handleDebug(player, arena);
}
// ── Hologramm-Verwaltung ─────────────────────────────────────────
// /fb hologram set <id> goals|wins Hologramm erstellen
// /fb hologram remove Nächstes Hologramm (< 5 Blöcke) entfernen
// /fb hologram delete <id> Hologramm nach ID löschen
// /fb hologram reload Alle Hologramme neu spawnen
// /fb hologram list Alle Hologramme anzeigen
case "hologram", "holo" -> {
if (!sender.hasPermission("fussball.admin")) { sender.sendMessage(MessageUtil.error("Keine Berechtigung!")); return true; }
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 <id> goals|wins §7 Hologramm setzen");
player.sendMessage("§e/fb hologram remove §7 Nächstes entfernen (< 5 Blöcke)");
player.sendMessage("§e/fb hologram delete <id> §7 Nach ID 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");
player.sendMessage("§7§oRechtsklick auf Hologramm → Tore ↔ Siege wechseln");
return true;
}
switch (args[1].toLowerCase()) {
case "set" -> {
if (args.length < 4) {
player.sendMessage(MessageUtil.error("Benutze: /fb hologram set <id> goals|wins"));
return true;
}
String id = args[2];
FussballHologram.HoloType type = switch (args[3].toLowerCase()) {
case "wins", "siege" -> FussballHologram.HoloType.WINS;
default -> FussballHologram.HoloType.GOALS;
};
plugin.getHologramManager().createHologram(id, player.getLocation(), type);
String holoLabel = type == FussballHologram.HoloType.WINS ? "Top-10-Siege" : "Top-10-Tore";
player.sendMessage(MessageUtil.success("§e" + id + " §a(" + holoLabel + ") Hologramm gesetzt!"));
player.sendMessage("§7§oRechtsklick auf das Hologramm wechselt zwischen Tore und Siege.");
}
case "remove" -> {
String removed = plugin.getHologramManager().removeNearest(player.getLocation());
if (removed != null) {
player.sendMessage(MessageUtil.success("Hologramm §e" + removed + " §aentfernt!"));
} else {
player.sendMessage(MessageUtil.error("Kein Hologramm innerhalb von 5 Blöcken gefunden!"));
}
}
case "delete" -> {
if (args.length < 3) { player.sendMessage(MessageUtil.error("Benutze: /fb hologram delete <id>")); return true; }
if (plugin.getHologramManager().removeHologram(args[2])) {
player.sendMessage(MessageUtil.success("Hologramm §e" + args[2] + " §agelöscht!"));
} else {
player.sendMessage(MessageUtil.error("Kein Hologramm mit ID §e" + args[2] + "§c gefunden!"));
}
}
case "reload" -> {
plugin.getHologramManager().reload();
player.sendMessage(MessageUtil.success("Hologramme neu geladen! §7(" + plugin.getHologramManager().getCount() + " gesamt)"));
}
case "list" -> {
player.sendMessage(MessageUtil.header("Hologramme (" + plugin.getHologramManager().getCount() + ")"));
if (plugin.getHologramManager().getCount() == 0) {
player.sendMessage(MessageUtil.warn("Keine Hologramme vorhanden."));
} else {
for (String id : plugin.getHologramManager().getHologramIds()) {
player.sendMessage("§7 • §e" + id);
}
}
}
default -> player.sendMessage(MessageUtil.error("Gültig: set <id> goals|wins | remove | delete <id> | reload | list"));
}
}
default -> sendHelp(sender);
}
return true;
@@ -229,6 +301,7 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
case "bluepenaltymax" -> { arena.setBluePenaltyMax(player.getLocation()); player.sendMessage(MessageUtil.success("Blauer Strafraum Max gesetzt: "+ locStr(player.getLocation()))); }
case "redpenaltyspot" -> { arena.setRedPenaltySpot(player.getLocation()); player.sendMessage(MessageUtil.success("Roter Elfmeter-Punkt gesetzt: " + locStr(player.getLocation()))); }
case "bluepenaltyspot" -> { arena.setBluePenaltySpot(player.getLocation()); player.sendMessage(MessageUtil.success("Blauer Elfmeter-Punkt gesetzt: " + locStr(player.getLocation()))); }
case "spectatorspawn" -> { arena.setSpectatorSpawn(player.getLocation()); player.sendMessage(MessageUtil.success("Zuschauer-Spawn gesetzt: " + locStr(player.getLocation()))); }
case "minplayers" -> { if (args.length < 4) return; arena.setMinPlayers(Integer.parseInt(args[3])); player.sendMessage(MessageUtil.success("Min-Spieler: §e" + args[3])); }
case "maxplayers" -> { if (args.length < 4) return; arena.setMaxPlayers(Integer.parseInt(args[3])); player.sendMessage(MessageUtil.success("Max-Spieler: §e" + args[3])); }
case "duration" -> { if (args.length < 4) return; arena.setGameDuration(Integer.parseInt(args[3])); player.sendMessage(MessageUtil.success("Spieldauer: §e" + args[3] + "s")); }
@@ -246,7 +319,7 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
+ " §8(optional sonst auto-berechnet)");
player.sendMessage("§7 Blauer Strafraum: " + check(arena.getBluePenaltyMin(), arena.getBluePenaltyMax())
+ " §8(optional sonst auto-berechnet)");
player.sendMessage("§7 Roter Elfmeter-Punkt: " + check(arena.getRedPenaltySpot()) + " §8(optional sonst ball-spawn)");
player.sendMessage("§7 Zuschauer-Spawn: " + check(arena.getSpectatorSpawn()) + " §8(optional sonst Spielfeldrand)");
player.sendMessage("§7 Blauer Elfmeter-Punkt: " + check(arena.getBluePenaltySpot()) + " §8(optional sonst ball-spawn)");
player.sendMessage("§7 Min. Spieler: §e" + arena.getMinPlayers());
player.sendMessage("§7 Max. Spieler: §e" + arena.getMaxPlayers());
@@ -320,6 +393,7 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
s.sendMessage("§e/fb top [goals|wins] §7- Bestenliste");
if (s.hasPermission("fussball.admin")) {
s.sendMessage("§c§lAdmin: §ccreate / delete / setup / stop / debug");
s.sendMessage("§c§lAdmin: §chologram set goals|wins / remove / reload");
}
}
@@ -345,9 +419,17 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
List<String> list = new ArrayList<>();
if (args.length == 1) {
list.addAll(List.of("join", "leave", "list", "stats", "top", "spectate"));
if (sender.hasPermission("fussball.admin")) list.addAll(List.of("create", "delete", "setup", "stop", "setgk", "debug"));
if (sender.hasPermission("fussball.admin")) list.addAll(List.of("create", "delete", "setup", "stop", "setgk", "debug", "hologram"));
} else if (args.length == 2 && List.of("join","delete","setup","stop","setgk","debug","spectate").contains(args[0].toLowerCase())) {
list.addAll(plugin.getArenaManager().getArenaNames());
} 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)
} else if (args.length == 4 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("set")) {
list.addAll(List.of("goals", "wins"));
} else if (args.length == 3 && args[0].equalsIgnoreCase("hologram") && args[1].equalsIgnoreCase("delete")) {
list.addAll(plugin.getHologramManager().getHologramIds());
} else if (args.length == 3 && args[0].equalsIgnoreCase("setgk")) {
// Spielernamen aus dem aktiven Spiel vorschlagen
Game gkGame = plugin.getGameManager().getGame(args[1]);
@@ -362,7 +444,7 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
"redgoalmin","redgoalmax","bluegoalmin","bluegoalmax",
"fieldmin","fieldmax",
"redpenaltymin","redpenaltymax","bluepenaltymin","bluepenaltymax",
"redpenaltyspot","bluepenaltyspot",
"redpenaltyspot","bluepenaltyspot","spectatorspawn",
"minplayers","maxplayers","duration","info"));
} else if (args.length == 2 && args[0].equalsIgnoreCase("top")) {
list.addAll(List.of("goals", "wins"));