From 6edf8f9157179a6eae1c846d754692039d4b1e3d Mon Sep 17 00:00:00 2001 From: M_Viper Date: Mon, 6 Oct 2025 18:24:17 +0000 Subject: [PATCH] src/main/java/me/viper/teamplugin/gui/TeamGUI.java aktualisiert --- .../java/me/viper/teamplugin/gui/TeamGUI.java | 249 +++++++++--------- 1 file changed, 127 insertions(+), 122 deletions(-) diff --git a/src/main/java/me/viper/teamplugin/gui/TeamGUI.java b/src/main/java/me/viper/teamplugin/gui/TeamGUI.java index c0f37da..698d7f9 100644 --- a/src/main/java/me/viper/teamplugin/gui/TeamGUI.java +++ b/src/main/java/me/viper/teamplugin/gui/TeamGUI.java @@ -1,122 +1,127 @@ -package me.viper.teamplugin.gui; - -import me.viper.teamplugin.Main; -import me.viper.teamplugin.manager.DataManager; -import me.viper.teamplugin.manager.LangManager; -import me.viper.teamplugin.util.Utils; -import org.bukkit.Bukkit; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import org.bukkit.inventory.meta.ItemMeta; - -import java.util.ArrayList; -import java.util.List; - -public class TeamGUI { - - // rows mapping: we will place ranks on rows 1..4 (slots 9-17, 18-26, 27-35, 36-44) - private static final int[] rows = {1, 2, 3, 4}; - - public static void openTeamGUI(Player player) { - FileConfiguration cfg = Main.getInstance().getConfig(); - FileConfiguration data = DataManager.getData(); - - int size = cfg.getInt("gui.size", 54); - String title = Utils.color(cfg.getString("gui.title", "&8» &bTeam Übersicht")); - Inventory inv = Bukkit.createInventory(null, size, title); - - // background filler - Material bgMat = Material.valueOf(cfg.getString("gui.background", "GRAY_STAINED_GLASS_PANE")); - ItemStack filler = new ItemStack(bgMat); - ItemMeta fm = filler.getItemMeta(); - if (fm != null) { - fm.setDisplayName(" "); - filler.setItemMeta(fm); - } - for (int i = 0; i < inv.getSize(); i++) inv.setItem(i, filler); - - List ranks = cfg.getStringList("ranks"); - for (int i = 0; i < ranks.size() && i < rows.length; i++) { - String rank = ranks.get(i); - List members = data.getStringList("Team." + rank); - if (members == null) members = new ArrayList<>(); - - int rowStart = rows[i] * 9; - int count = Math.min(members.size(), 9); - if (count == 0) { - // show placeholder in middle - ItemStack empty = createInfoItem("§7Kein/e " + rank, List.of("§7Keine Mitglieder")); - inv.setItem(rowStart + 4, empty); - continue; - } - - int startOffset = (9 - count) / 2; - for (int j = 0; j < count; j++) { - String name = members.get(j); - int slot = rowStart + startOffset + j; - if (slot >= 0 && slot < inv.getSize()) { - inv.setItem(slot, createPlayerHead(name, rank)); - } - } - } - - player.openInventory(inv); - } - - private static ItemStack createPlayerHead(String name, String rank) { - FileConfiguration cfg = Main.getInstance().getConfig(); - - ItemStack skull = new ItemStack(Material.PLAYER_HEAD); - SkullMeta meta = (SkullMeta) skull.getItemMeta(); - if (meta != null) { - OfflinePlayer off = Bukkit.getOfflinePlayer(name); - meta.setOwningPlayer(off); - - // rank display & prefix aus config - String rankDisplay = cfg.getString("rank-settings." + rank + ".display", rank); - String rankPrefix = cfg.getString("rank-settings." + rank + ".prefix", ""); - - // Anzeige-Name: optional Prefix (farbcodes erlauben) + Spielername (in blau) - String displayName = (rankPrefix == null ? "" : rankPrefix + " ") + "&b" + name; - meta.setDisplayName(Utils.color(displayName.trim())); - - List lore = new ArrayList<>(); - // Rang-Zeile (farbig, aus config display nutzen) - String rankLine = Utils.replace(LangManager.get("tooltip_rank"), "%rank%", rankDisplay); - lore.add(Utils.color(rankLine)); - - // Join-Datum falls vorhanden - String iso = DataManager.getData().getString("JoinDates." + name, ""); - String joinLine = Utils.replace(LangManager.get("tooltip_joined"), "%joindate%", Utils.prettifyIso(iso)); - lore.add(Utils.color(joinLine)); - - meta.setLore(lore); - skull.setItemMeta(meta); - } - return skull; - } - - private static ItemStack createInfoItem(String name, List lore) { - ItemStack item = new ItemStack(Material.PAPER); - ItemMeta m = item.getItemMeta(); - if (m != null) { - m.setDisplayName(Utils.color(name)); - m.setLore(lore.stream().map(Utils::color).toList()); - item.setItemMeta(m); - } - return item; - } - - /** - * Liefert den (ungefärbten) GUI-Titel aus der config (z.B. "&8» &bTeam Übersicht"). - * Listener sollte Utils.color(...) darauf anwenden bevor er mit e.getView().getTitle() vergleicht. - */ - public static String getGuiTitle() { - return Main.getInstance().getConfig().getString("gui.title", "&8» &bTeam Übersicht"); - } -} +package me.viper.teamplugin.gui; + +import me.viper.teamplugin.Main; +import me.viper.teamplugin.manager.DataManager; +import me.viper.teamplugin.manager.LangManager; +import me.viper.teamplugin.util.Utils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.util.ArrayList; +import java.util.List; + +public class TeamGUI { + + // Zeilenpositionen für Ränge + private static final int[] rows = {1, 2, 3, 4}; + + public static void openTeamGUI(Player player) { + FileConfiguration cfg = Main.getInstance().getConfig(); + FileConfiguration data = DataManager.getData(); + + int size = cfg.getInt("gui.size", 54); + String title = Utils.color(cfg.getString("gui.title", "&8» &bTeam Übersicht")); + Inventory inv = Bukkit.createInventory(null, size, title); + + // Hintergrund-Glas setzen + Material bgMat = Material.valueOf(cfg.getString("gui.background", "GRAY_STAINED_GLASS_PANE")); + ItemStack filler = new ItemStack(bgMat); + ItemMeta fm = filler.getItemMeta(); + if (fm != null) { + fm.setDisplayName(" "); + filler.setItemMeta(fm); + } + for (int i = 0; i < inv.getSize(); i++) inv.setItem(i, filler); + + List ranks = cfg.getStringList("ranks"); + for (int i = 0; i < ranks.size() && i < rows.length; i++) { + String rank = ranks.get(i); + List members = data.getStringList("Team." + rank); + if (members == null) members = new ArrayList<>(); + + int rowStart = rows[i] * 9; + int count = Math.min(members.size(), 9); + if (count == 0) { + ItemStack empty = createInfoItem("§7Kein/e " + rank, List.of("§7Keine Mitglieder")); + inv.setItem(rowStart + 4, empty); + continue; + } + + int startOffset = (9 - count) / 2; + for (int j = 0; j < count; j++) { + String name = members.get(j); + int slot = rowStart + startOffset + j; + if (slot >= 0 && slot < inv.getSize()) { + inv.setItem(slot, createPlayerHead(name, rank)); + } + } + } + + player.openInventory(inv); + } + + private static ItemStack createPlayerHead(String name, String rank) { + FileConfiguration cfg = Main.getInstance().getConfig(); + + ItemStack skull = new ItemStack(Material.PLAYER_HEAD); + SkullMeta meta = (SkullMeta) skull.getItemMeta(); + if (meta != null) { + OfflinePlayer off = Bukkit.getOfflinePlayer(name); + meta.setOwningPlayer(off); + + // Rank aus config + String rankDisplay = cfg.getString("rank-settings." + rank + ".display", rank); + String rankPrefix = cfg.getString("rank-settings." + rank + ".prefix", ""); + + // Name + Prefix + String displayName = (rankPrefix == null ? "" : rankPrefix + " ") + "&b" + name; + meta.setDisplayName(Utils.color(displayName.trim())); + + List lore = new ArrayList<>(); + + // Rang + String rankLine = Utils.replace(LangManager.get("tooltip_rank"), "%rank%", rankDisplay); + lore.add(Utils.color(rankLine)); + + // Online-/Offline-Status aus config + String statusOnline = cfg.getString("status.online", "&a🟢 Online"); + String statusOffline = cfg.getString("status.offline", "&c🔴 Offline"); + boolean isOnline = off.isOnline(); + String statusLine = isOnline ? statusOnline : statusOffline; + lore.add(Utils.color("&7Status: " + statusLine)); + + // Join-Datum, falls vorhanden + String iso = DataManager.getData().getString("JoinDates." + name, ""); + if (iso != null && !iso.isEmpty()) { + String joinLine = Utils.replace(LangManager.get("tooltip_joined"), "%joindate%", Utils.prettifyIso(iso)); + lore.add(Utils.color(joinLine)); + } + + meta.setLore(lore); + skull.setItemMeta(meta); + } + return skull; + } + + private static ItemStack createInfoItem(String name, List lore) { + ItemStack item = new ItemStack(Material.PAPER); + ItemMeta m = item.getItemMeta(); + if (m != null) { + m.setDisplayName(Utils.color(name)); + m.setLore(lore.stream().map(Utils::color).toList()); + item.setItemMeta(m); + } + return item; + } + + public static String getGuiTitle() { + return Main.getInstance().getConfig().getString("gui.title", "&8» &bTeam Übersicht"); + } +}