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