src/main/java/me/viper/teamplugin/gui/TeamGUI.java aktualisiert

This commit is contained in:
2025-10-06 18:24:17 +00:00
parent 6aecea0489
commit 6edf8f9157

View File

@@ -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<String> ranks = cfg.getStringList("ranks");
for (int i = 0; i < ranks.size() && i < rows.length; i++) {
String rank = ranks.get(i);
List<String> 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<String> 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<String> 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<String> ranks = cfg.getStringList("ranks");
for (int i = 0; i < ranks.size() && i < rows.length; i++) {
String rank = ranks.get(i);
List<String> 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<String> 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<String> 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");
}
}