diff --git a/src/main/java/de/viper/survivalplus/Manager/TablistManager.java b/src/main/java/de/viper/survivalplus/Manager/TablistManager.java index 9a3d117..acdbc20 100644 --- a/src/main/java/de/viper/survivalplus/Manager/TablistManager.java +++ b/src/main/java/de/viper/survivalplus/Manager/TablistManager.java @@ -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;