Update from Git Manager GUI
This commit is contained in:
@@ -5,8 +5,10 @@ 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.game.Team;
|
||||
import de.fussball.plugin.hologram.FussballHologram;
|
||||
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.Bukkit;
|
||||
@@ -202,6 +204,82 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
|
||||
handleDebug(player, arena);
|
||||
}
|
||||
|
||||
// ── Teamwahl ─────────────────────────────────────────────────────
|
||||
case "team" -> {
|
||||
if (!(sender instanceof Player player)) { sender.sendMessage("Nur für Spieler!"); return true; }
|
||||
if (args.length < 2) {
|
||||
player.sendMessage(MessageUtil.error("Benutze: /fb team rot|blau"));
|
||||
return true;
|
||||
}
|
||||
Game game = plugin.getGameManager().getPlayerGame(player);
|
||||
if (game == null) {
|
||||
// Noch nicht im Spiel – Wunsch für nächstes Beitreten speichern
|
||||
// (Spiel muss noch gesucht werden – Wunsch für alle Spiele gilt nicht;
|
||||
// Spieler muss zuerst beitreten)
|
||||
player.sendMessage(MessageUtil.warn("Du bist in keinem Spiel. Tritt zuerst mit /fb join <arena> bei."));
|
||||
return true;
|
||||
}
|
||||
if (game.getState() != GameState.WAITING && game.getState() != GameState.STARTING) {
|
||||
player.sendMessage(MessageUtil.error("Teamwahl ist nur vor Spielstart möglich!"));
|
||||
return true;
|
||||
}
|
||||
Team desired = switch (args[1].toLowerCase()) {
|
||||
case "rot", "red", "r" -> Team.RED;
|
||||
case "blau", "blue", "b" -> Team.BLUE;
|
||||
default -> null;
|
||||
};
|
||||
if (desired == null) {
|
||||
player.sendMessage(MessageUtil.error("Ungültiges Team! Benutze: rot oder blau"));
|
||||
return true;
|
||||
}
|
||||
game.requestTeam(player, desired);
|
||||
}
|
||||
|
||||
// ── Match-History ────────────────────────────────────────────────
|
||||
case "history" -> {
|
||||
int count = 5;
|
||||
if (args.length >= 2) { try { count = Integer.parseInt(args[1]); } catch (NumberFormatException ignored) {} }
|
||||
count = Math.max(1, Math.min(count, 20));
|
||||
List<Map<?, ?>> matches = plugin.getMatchHistory().getMatches(count);
|
||||
sender.sendMessage(MessageUtil.header("📋 Match-History (" + matches.size() + " Einträge)"));
|
||||
if (matches.isEmpty()) {
|
||||
sender.sendMessage(MessageUtil.warn("Noch keine Spiele gespeichert."));
|
||||
return true;
|
||||
}
|
||||
for (int i = 0; i < matches.size(); i++) {
|
||||
Map<?, ?> raw = matches.get(i);
|
||||
// Sicher auslesen über Object → String/Number-Cast
|
||||
String date = raw.get("date") instanceof String s ? s : "?";
|
||||
String arena = raw.get("arena") instanceof String s ? s : "?";
|
||||
String winner = raw.get("winner") instanceof String s ? s : "Unentschieden";
|
||||
int rs = raw.get("redScore") instanceof Number n ? n.intValue() : 0;
|
||||
int bs = raw.get("blueScore") instanceof Number n ? n.intValue() : 0;
|
||||
int rp = raw.get("redPoss") instanceof Number n ? n.intValue() : 50;
|
||||
int bp = raw.get("bluePoss") instanceof Number n ? n.intValue() : 50;
|
||||
int pr = raw.get("penaltyRed") instanceof Number n ? n.intValue() : 0;
|
||||
int pb = raw.get("penaltyBlue") instanceof Number n ? n.intValue() : 0;
|
||||
String penStr = (pr + pb > 0) ? " §8(Elfm. §c" + pr + "§8:§9" + pb + "§8)" : "";
|
||||
|
||||
String winColor = winner.equals("Rot") ? "§c" : winner.equals("Blau") ? "§9" : "§7";
|
||||
sender.sendMessage("§e#" + (i+1) + " §8[" + date + "] §7" + arena
|
||||
+ " §c" + rs + "§7:§9" + bs + penStr
|
||||
+ " §8│ " + winColor + winner
|
||||
+ " §8│ §7Besitz §c" + rp + "% §7/ §9" + bp + "%");
|
||||
}
|
||||
}
|
||||
|
||||
// ── Drop Ball (Admin) ─────────────────────────────────────────────
|
||||
case "dropball" -> {
|
||||
if (!sender.hasPermission("fussball.admin")) { sender.sendMessage(MessageUtil.error("Keine Berechtigung!")); return true; }
|
||||
if (args.length < 2) { sender.sendMessage(MessageUtil.error("Benutze: /fb dropball <arena>")); return true; }
|
||||
Game dropGame = plugin.getGameManager().getGame(args[1]);
|
||||
if (dropGame == null) { sender.sendMessage(MessageUtil.error("Kein aktives Spiel in §e" + args[1] + "§c!")); return true; }
|
||||
Location dropLoc = null;
|
||||
if (sender instanceof Player p) dropLoc = p.getLocation();
|
||||
dropGame.dropBall(dropLoc);
|
||||
sender.sendMessage(MessageUtil.success("Schiedsrichterball ausgeführt!"));
|
||||
}
|
||||
|
||||
// ── Hologramm-Verwaltung ─────────────────────────────────────────
|
||||
// /fb hologram set <id> goals|wins – Hologramm erstellen
|
||||
// /fb hologram remove – Nächstes Hologramm (< 5 Blöcke) entfernen
|
||||
@@ -302,9 +380,21 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
|
||||
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")); }
|
||||
case "minplayers" -> {
|
||||
if (args.length < 4) return;
|
||||
try { arena.setMinPlayers(Integer.parseInt(args[3])); player.sendMessage(MessageUtil.success("Min-Spieler: §e" + args[3])); }
|
||||
catch (NumberFormatException ex) { player.sendMessage(MessageUtil.error("§e" + args[3] + " §cist keine gültige Zahl!")); }
|
||||
}
|
||||
case "maxplayers" -> {
|
||||
if (args.length < 4) return;
|
||||
try { arena.setMaxPlayers(Integer.parseInt(args[3])); player.sendMessage(MessageUtil.success("Max-Spieler: §e" + args[3])); }
|
||||
catch (NumberFormatException ex) { player.sendMessage(MessageUtil.error("§e" + args[3] + " §cist keine gültige Zahl!")); }
|
||||
}
|
||||
case "duration" -> {
|
||||
if (args.length < 4) return;
|
||||
try { arena.setGameDuration(Integer.parseInt(args[3])); player.sendMessage(MessageUtil.success("Spieldauer: §e" + args[3] + "s")); }
|
||||
catch (NumberFormatException ex) { player.sendMessage(MessageUtil.error("§e" + args[3] + " §cist keine gültige Zahl!")); }
|
||||
}
|
||||
case "info" -> {
|
||||
player.sendMessage(MessageUtil.header("Arena: " + arena.getName()));
|
||||
player.sendMessage("§7 Lobby: " + check(arena.getLobby()));
|
||||
@@ -388,11 +478,13 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
|
||||
s.sendMessage("§e/fb join <arena> §7- Spiel beitreten");
|
||||
s.sendMessage("§e/fb leave §7- Spiel / Zuschauer verlassen");
|
||||
s.sendMessage("§e/fb spectate <arena> §7- Spiel zuschauen");
|
||||
s.sendMessage("§e/fb team rot|blau §7- Teamwahl (vor Spielstart)");
|
||||
s.sendMessage("§e/fb list §7- Arenen anzeigen");
|
||||
s.sendMessage("§e/fb stats [spieler] §7- Statistiken anzeigen");
|
||||
s.sendMessage("§e/fb top [goals|wins] §7- Bestenliste");
|
||||
s.sendMessage("§e/fb history [n] §7- Letzte Spiele anzeigen");
|
||||
if (s.hasPermission("fussball.admin")) {
|
||||
s.sendMessage("§c§lAdmin: §ccreate / delete / setup / stop / debug");
|
||||
s.sendMessage("§c§lAdmin: §ccreate / delete / setup / stop / debug / dropball");
|
||||
s.sendMessage("§c§lAdmin: §chologram set goals|wins / remove / reload");
|
||||
}
|
||||
}
|
||||
@@ -418,9 +510,9 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
|
||||
public List<String> onTabComplete(CommandSender sender, Command cmd, String alias, String[] args) {
|
||||
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", "hologram"));
|
||||
} else if (args.length == 2 && List.of("join","delete","setup","stop","setgk","debug","spectate").contains(args[0].toLowerCase())) {
|
||||
list.addAll(List.of("join", "leave", "list", "stats", "top", "spectate", "team", "history"));
|
||||
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("hologram")) {
|
||||
list.addAll(List.of("set", "remove", "delete", "reload", "list"));
|
||||
@@ -448,6 +540,8 @@ public class FussballCommand implements CommandExecutor, TabCompleter {
|
||||
"minplayers","maxplayers","duration","info"));
|
||||
} else if (args.length == 2 && args[0].equalsIgnoreCase("top")) {
|
||||
list.addAll(List.of("goals", "wins"));
|
||||
} else if (args.length == 2 && args[0].equalsIgnoreCase("team")) {
|
||||
list.addAll(List.of("rot", "blau"));
|
||||
}
|
||||
String input = args[args.length - 1].toLowerCase();
|
||||
list.removeIf(s -> !s.toLowerCase().startsWith(input));
|
||||
|
||||
Reference in New Issue
Block a user