From aa5b1a2572124978a4934a2186dcc9a77165644d Mon Sep 17 00:00:00 2001 From: M_Viper Date: Mon, 12 Jan 2026 12:26:23 +0000 Subject: [PATCH] src/main/java/net/viper/status/modules/globalchat/GlobalChatModule.java aktualisiert --- .../modules/globalchat/GlobalChatModule.java | 134 +++++++++++++++--- 1 file changed, 111 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/viper/status/modules/globalchat/GlobalChatModule.java b/src/main/java/net/viper/status/modules/globalchat/GlobalChatModule.java index b8b0ed1..d65f465 100644 --- a/src/main/java/net/viper/status/modules/globalchat/GlobalChatModule.java +++ b/src/main/java/net/viper/status/modules/globalchat/GlobalChatModule.java @@ -54,6 +54,9 @@ public class GlobalChatModule implements Module, Listener { private List welcomeMessages = new ArrayList<>(); private Map serverDisplayNames = new HashMap<>(); + + // NEU: Map für gruppen-spezifische Formate aus der verify.properties + private Map groupFormats = new HashMap<>(); @Override public String getName() { @@ -145,6 +148,9 @@ public class GlobalChatModule implements Module, Listener { isChatEnabled = Boolean.parseBoolean(props.getProperty("chat.enabled", "true")); serverDisplayNames.clear(); + // NEU: Gruppen-Formate laden + groupFormats.clear(); + for (String key : props.stringPropertyNames()) { if (key.startsWith("server.")) { String[] parts = key.split("\\."); @@ -153,9 +159,15 @@ public class GlobalChatModule implements Module, Listener { String displayName = props.getProperty(key); serverDisplayNames.put(serverName, displayName); } + } else if (key.startsWith("groupformat.")) { + // Format: groupformat.Owner = &c[Owner] || &b || &d + String groupName = key.substring("groupformat.".length()); + String format = props.getProperty(key); + groupFormats.put(groupName, format); } } plugin.getLogger().info("§eGeladene Server-Displaynames: " + serverDisplayNames.size() + " (Chat aktiv: " + isChatEnabled + ")"); + plugin.getLogger().info("§eGeladene Chat-Formate: " + groupFormats.size()); } catch (IOException e) { e.printStackTrace(); } @@ -262,24 +274,29 @@ public class GlobalChatModule implements Module, Listener { String serverName = player.getServer().getInfo().getName(); String serverDisplay = getDisplayName(serverName); + // Index 0: Prefix (Rang), Index 1: Suffix, Index 2: Spielername Farbe, Index 3: Chat Farbe String[] ps = getPrefixSuffix(player); - String prefix = ps[0] == null ? "" : ps[0].trim(); - String suffix = ps[1] == null ? "" : ps[1].trim(); + String prefix = ps[0]; + String playerColor = ps[2]; + String chatColor = ps[3]; String displayTag = ""; if (!prefix.isEmpty()) { displayTag = prefix; - } else if (!suffix.isEmpty()) { - displayTag = suffix; + } else if (!ps[1].isEmpty()) { + displayTag = ps[1]; } if (!displayTag.isEmpty() && !displayTag.endsWith(" ")) displayTag = displayTag + " "; StringBuilder out = new StringBuilder(); - out.append("§7[").append(serverDisplay).append("] "); + out.append("§7[").append(serverDisplay).append("§r§7] "); // FIX: Reset vor der Klammer if (!displayTag.isEmpty()) out.append(displayTag); - out.append(player.getName()); - out.append("§f: ").append(censoredMsg); + + // Spielername mit eigener Farbe + out.append(playerColor).append(player.getName()); + + out.append("§f: ").append(chatColor).append(censoredMsg); // Chatnachricht mit eigener Farbe String chatOut = out.toString(); @@ -357,9 +374,10 @@ public class GlobalChatModule implements Module, Listener { String toName = to.getName(); String toDisplay = getDisplayName(toName); + // Hier nutzen wir nur das Prefix (Index 0), nicht die Chatfarbe oder Spielerfarbe String[] ps = getPrefixSuffix(player); - String prefix = ps[0] == null ? "" : ps[0].trim(); - String suffix = ps[1] == null ? "" : ps[1].trim(); + String prefix = ps[0]; + String suffix = ps[1]; String displayTag = ""; if (!prefix.isEmpty()) displayTag = prefix; @@ -368,9 +386,12 @@ public class GlobalChatModule implements Module, Listener { if (!displayTag.isEmpty() && !displayTag.endsWith(" ")) displayTag = displayTag + " "; StringBuilder msg = new StringBuilder(); - msg.append("§7[").append(toDisplay).append("] "); + msg.append("§7[").append(toDisplay).append("§r§7] "); // FIX: Reset vor der Klammer if (!displayTag.isEmpty()) msg.append(displayTag); + + // Switch Nachricht: Spielername weiß oder Standard msg.append(player.getName()); + msg.append(" §7hat den Server gewechselt: §e") .append(fromDisplay).append(" §7→ §e").append(toDisplay).append("§7."); @@ -414,45 +435,112 @@ public class GlobalChatModule implements Module, Listener { } // =========================== - // Prefix/Suffix via LuckPerms + // Prefix/Suffix via LuckPerms & Properties (ROBUST + CHAT COLOR + PLAYER COLOR) // =========================== private String[] getPrefixSuffix(ProxiedPlayer player) { String prefix = ""; String suffix = ""; + String playerColor = "§f"; // Standard Weiß für Spielername + String chatColor = "§f"; // Standard Weiß für Chat + // Standard Gruppe falls nichts gefunden wird + String groupName = "Spieler"; + + // 1. Versuch: Gruppe von LuckPerms holen try { LuckPerms lp = LuckPermsProvider.get(); if (lp != null) { User user = lp.getUserManager().getUser(player.getUniqueId()); - if (user == null) { try { + // User synchron laden user = lp.getUserManager().loadUser(player.getUniqueId()).join(); - } catch (Exception ignored) { - user = null; + } catch (Exception ignored) {} + } + if (user != null) { + String lpGroup = user.getPrimaryGroup(); + if (lpGroup != null && !lpGroup.isEmpty() && !lpGroup.equalsIgnoreCase("default")) { + groupName = lpGroup; } } + } + } catch (Throwable ignored) {} + // 2. FALLBACK: Permission-Check (Funktioniert auch OHNE LuckPerms Datenbank) + if (groupName == null || groupName.equalsIgnoreCase("default") || groupName.equalsIgnoreCase("Spieler")) { + if (player.hasPermission("group.owner")) groupName = "Owner"; + else if (player.hasPermission("group.admin")) groupName = "Admin"; + else if (player.hasPermission("group.developer")) groupName = "Developer"; + else if (player.hasPermission("group.premium")) groupName = "Premium"; + else if (player.hasPermission("group.spieler")) groupName = "Spieler"; + else groupName = "Spieler"; + } + + // 3. Farben aus verify.properties anwenden (Höchste Priorität) + if (groupName != null && groupFormats.containsKey(groupName)) { + String rawFormat = groupFormats.get(groupName); + + // NEU: Check auf " || " für Spielername Farbe UND Chat Farbe + if (rawFormat.contains(" || ")) { + String[] parts = rawFormat.split(" \\|\\| "); + // Syntax: Prefix || PlayerColor || ChatColor + + // Teil 1: Prefix (Rang) + prefix = ChatColor.translateAlternateColorCodes('&', parts[0]); + + // Teil 2: Spieler Name Farbe + playerColor = ChatColor.translateAlternateColorCodes('&', parts[1]); + + // Teil 3: Chat Farbe + chatColor = ChatColor.translateAlternateColorCodes('&', parts[2]); + + suffix = ""; + } + // ALTER FALLBACK (Kompatibilität): Check auf ": " + else if (rawFormat.contains(": ")) { + String[] parts = rawFormat.split(": ", 2); + // Teil 1: Prefix + prefix = ChatColor.translateAlternateColorCodes('&', parts[0]); + // Teil 2: Chat Farbe + chatColor = ChatColor.translateAlternateColorCodes('&', parts[1]); + // Spielername bleibt Standard Weiß + playerColor = "§f"; + suffix = ""; + } else { + // Kein Separator gefunden -> Nur Prefix + prefix = ChatColor.translateAlternateColorCodes('&', rawFormat); + suffix = ""; + playerColor = "§f"; + chatColor = "§f"; + } + + return new String[]{prefix, suffix, playerColor, chatColor}; + } + + // 4. Wenn nichts in Properties gefunden wurde, Fallback auf LuckPerms Meta + try { + LuckPerms lp = LuckPermsProvider.get(); + if (lp != null) { + User user = lp.getUserManager().getUser(player.getUniqueId()); + if (user == null) { + try { user = lp.getUserManager().loadUser(player.getUniqueId()).join(); } catch (Exception ignored) {} + } if (user != null) { CachedMetaData meta = user.getCachedData().getMetaData(); if (meta != null) { String p = meta.getPrefix(); String s = meta.getSuffix(); - if (p != null) prefix = p; - if (s != null) suffix = s; + if (p != null) prefix = ChatColor.translateAlternateColorCodes('&', p); + if (s != null) suffix = ChatColor.translateAlternateColorCodes('&', s); } } } - } catch (Throwable ignored) { - } - - if (prefix != null && !prefix.isEmpty()) prefix = ChatColor.translateAlternateColorCodes('&', prefix); - if (suffix != null && !suffix.isEmpty()) suffix = ChatColor.translateAlternateColorCodes('&', suffix); + } catch (Throwable ignored) {} if (prefix == null) prefix = ""; if (suffix == null) suffix = ""; - - return new String[]{prefix, suffix}; + + return new String[]{prefix, suffix, playerColor, chatColor}; } private String stripColor(String s) {