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.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;
|
||||||
@@ -311,7 +319,7 @@ public class TablistManager {
|
|||||||
try {
|
try {
|
||||||
Method m = current.getMethod(name, paramTypes);
|
Method m = current.getMethod(name, paramTypes);
|
||||||
if (m != null) return m;
|
if (m != null) return m;
|
||||||
} catch (NoSuchMethodException ignored) { }
|
} catch (NoSuchMethodException ignored) {}
|
||||||
current = current.getSuperclass();
|
current = current.getSuperclass();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
Reference in New Issue
Block a user