src/main/java/de/viper/survivalplus/Manager/TablistManager.java aktualisiert

This commit is contained in:
2025-08-24 23:59:55 +00:00
parent efeeac9f66
commit 03dc23cb50

View File

@@ -15,7 +15,6 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
public class TablistManager {
@@ -34,13 +33,18 @@ public class TablistManager {
private String staffPermission;
private String separatorLine;
private LuckPerms luckPerms;
private boolean hasPlaceholderAPI;
public TablistManager(SurvivalPlus plugin) {
this.plugin = plugin;
// Resource sicherstellen, Config laden
try { plugin.saveResource("tablist.yml", false); } catch (Exception ignored) {}
try { plugin.reloadTablistConfig(); } catch (Throwable ignored) {}
try {
plugin.saveResource("tablist.yml", false);
} catch (Exception ignored) {}
try {
plugin.reloadTablistConfig();
} catch (Exception ignored) {}
FileConfiguration config = plugin.getTablistConfig();
// Konfigurationswerte laden
@@ -57,14 +61,12 @@ public class TablistManager {
// LuckPerms API initialisieren
try {
this.luckPerms = LuckPermsProvider.get();
} catch (IllegalStateException e) {
plugin.getLogger().warning("LuckPerms nicht gefunden! Versuche Fallback auf PlaceholderAPI.");
} catch (Throwable e) { // Fängt NoClassDefFoundError und andere Fehler
luckPerms = null; // Keine Konsolenausgabe
}
// Prüfen, ob PlaceholderAPI verfügbar ist
if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
plugin.getLogger().warning("PlaceholderAPI nicht gefunden! Verwende Standard-Prefix als Fallback.");
}
this.hasPlaceholderAPI = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
if (!enabled) {
plugin.getLogger().info("Tablist ist deaktiviert (tablist.yml -> enabled: false)");
@@ -112,12 +114,19 @@ public class TablistManager {
for (Player player : Bukkit.getOnlinePlayers()) {
try {
// Spieler-Prefix abrufen (LuckPerms primär, PlaceholderAPI als Fallback)
String prefix = getPlayerPrefix(player);
int ping = getPlayerPing(player);
// Korrigierte Formatierung: Gesamten String durch color-Methode leiten
String prefixedName = color(prefix + player.getName() + "&8 | &e" + ping + "ms");
player.setPlayerListName(prefixedName);
// Spielername für die Tablist setzen
String playerListName;
if (luckPerms == null && !hasPlaceholderAPI) {
// Fallback: Nur Spielername, ohne Prefix oder Ping
playerListName = player.getName();
} else {
// Spieler-Prefix abrufen (LuckPerms primär, PlaceholderAPI als Fallback)
String prefix = getPlayerPrefix(player);
int ping = getPlayerPing(player);
// Korrigierte Formatierung: Gesamten String durch color-Methode leiten
playerListName = color(prefix + player.getName() + "&8 | &e" + ping + "ms");
}
player.setPlayerListName(playerListName);
// Header mit Spielername und Statistiken
String headerRaw = headerAnim.get(headerIndex)
@@ -131,7 +140,7 @@ public class TablistManager {
StringBuilder footerBuilder = new StringBuilder();
footerBuilder.append("\n"); // Extra Abstand
footerBuilder.append(color(footerRaw)).append("\n");
footerBuilder.append(color(separatorLine)).append("\n");
if (showTeamspeak || showDiscord) {
StringBuilder socialLine = new StringBuilder();
@@ -161,12 +170,9 @@ public class TablistManager {
done = tryStringMethod(player, header, footer);
}
// 3) Wenn alles fehlschlägt -> Log
if (!done) {
plugin.getLogger().warning("Tablist: Keine geeignete Methode gefunden für Spieler " + player.getName());
}
} catch (Throwable t) {
plugin.getLogger().log(Level.FINE, "Fehler beim Setzen der Tablist für Spieler " + player.getName(), t);
// 3) Keine Warnung bei Fehlschlag, da dies normal sein kann
} catch (Exception ignored) {
// Keine Konsolenausgabe für Fehler bei der Tablist
}
}
@@ -186,19 +192,23 @@ public class TablistManager {
User user = luckPerms.getPlayerAdapter(Player.class).getUser(player);
String prefix = user.getCachedData().getMetaData().getPrefix();
return (prefix == null || prefix.isEmpty()) ? "&7[Spieler] " : prefix + " ";
} catch (Exception e) {
plugin.getLogger().log(Level.FINE, "Fehler beim Abrufen des Prefix aus LuckPerms für Spieler " + player.getName(), e);
} catch (Exception ignored) {
// Keine Konsolenausgabe für LuckPerms-Fehler
}
}
// Fallback auf PlaceholderAPI
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
String prefix = PlaceholderAPI.setPlaceholders(player, "%luckperms_prefix%");
return (prefix == null || prefix.isEmpty()) ? "&7[Spieler] " : prefix + " ";
if (hasPlaceholderAPI) {
try {
String prefix = PlaceholderAPI.setPlaceholders(player, "%luckperms_prefix%");
return (prefix == null || prefix.isEmpty()) ? "&7[Spieler] " : prefix + " ";
} catch (Exception ignored) {
// Keine Konsolenausgabe für PlaceholderAPI-Fehler
}
}
// Letzter Fallback: Standard-Prefix
return "&7[Spieler] ";
// Letzter Fallback: Kein Prefix, da nur Spielername gewünscht
return "";
}
/**
@@ -209,8 +219,8 @@ public class TablistManager {
Method getHandle = player.getClass().getMethod("getHandle");
Object entityPlayer = getHandle.invoke(player);
return entityPlayer.getClass().getField("ping").getInt(entityPlayer);
} catch (Exception e) {
plugin.getLogger().log(Level.FINE, "Fehler beim Abrufen des Pings für Spieler " + player.getName(), e);
} catch (Exception ignored) {
// Keine Konsolenausgabe für Ping-Fehler
return -1;
}
}
@@ -225,7 +235,9 @@ public class TablistManager {
try {
textMethod = compClass.getMethod("text", CharSequence.class);
} catch (NoSuchMethodException ignored) {
try { textMethod = compClass.getMethod("text", String.class); } catch (NoSuchMethodException ignored2) {}
try {
textMethod = compClass.getMethod("text", String.class);
} catch (NoSuchMethodException ignored2) {}
}
Object headerComp = null;
@@ -243,8 +255,8 @@ public class TablistManager {
Method deserialize = miniMsgClass.getMethod("deserialize", String.class);
headerComp = deserialize.invoke(miniMsg, headerRaw);
footerComp = deserialize.invoke(miniMsg, footerRaw);
} catch (Throwable t) {
// kein MiniMessage
} catch (Exception ignored) {
// Kein MiniMessage
}
}
@@ -265,10 +277,7 @@ public class TablistManager {
return true;
}
}
} catch (ClassNotFoundException cnf) {
return false;
} catch (Throwable t) {
plugin.getLogger().log(Level.FINER, "Adventure-Variante fehlgeschlagen: " + t.getMessage());
} catch (Exception ignored) {
return false;
}
return false;
@@ -295,8 +304,7 @@ public class TablistManager {
mf.invoke(player, footer);
return true;
}
} catch (Throwable t) {
plugin.getLogger().log(Level.FINER, "String-Variante fehlgeschlagen: " + t.getMessage());
} catch (Exception ignored) {
return false;
}
return false;
@@ -311,7 +319,7 @@ public class TablistManager {
try {
Method m = current.getMethod(name, paramTypes);
if (m != null) return m;
} catch (NoSuchMethodException ignored) { }
} catch (NoSuchMethodException ignored) {}
current = current.getSuperclass();
}
return null;