src/main/java/de/viper/survivalplus/Manager/TablistManager.java aktualisiert
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user