feat: Configure LuckPerms ranks with gradients and display grades before guild tags in Chat and TAB

This commit is contained in:
2026-08-20 22:13:28 +02:00
parent 0dd8802bee
commit 1645618e25
@@ -2,17 +2,19 @@ package fr.luc.gamingcore.listener;
import fr.luc.gamingcore.Main; import fr.luc.gamingcore.Main;
import fr.luc.gamingcore.manager.GuildManager; import fr.luc.gamingcore.manager.GuildManager;
import fr.luc.gamingcore.util.MessageManager;
import fr.luc.gamingcore.model.Guild; import fr.luc.gamingcore.model.Guild;
import fr.luc.gamingcore.model.GuildMember; import fr.luc.gamingcore.model.GuildMember;
import fr.luc.gamingcore.model.GuildRank; import fr.luc.gamingcore.model.GuildRank;
import fr.luc.gamingcore.util.MessageManager;
import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.chat.ChatRenderer;
import io.papermc.paper.event.player.AsyncChatEvent; import io.papermc.paper.event.player.AsyncChatEvent;
import net.kyori.adventure.audience.Audience; import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
@@ -20,7 +22,8 @@ import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
/** /**
* Écouteur gérant à la fois le chat privé de guilde (#message) et le formatage du chat global avec le tag de guilde. * Écouteur gérant à la fois le chat privé de guilde (#message) et le formatage du chat global avec :
* [Grade] [TagGuilde] Pseudo: Message.
*/ */
public class GuildChatListener implements Listener { public class GuildChatListener implements Listener {
@@ -42,7 +45,7 @@ public class GuildChatListener implements Listener {
/** /**
* Intercepte les messages de chat pour : * Intercepte les messages de chat pour :
* 1. Rediriger les messages commençant par '#' vers le chat privé de guilde. * 1. Rediriger les messages commençant par '#' vers le chat privé de guilde.
* 2. Formater le chat global public avec le tag coloré [TAG] Pseudo: Message. * 2. Formater le chat global public dans l'ordre : [Grade] [TagGuilde] Pseudo: Message.
* *
* @param event L'événement AsyncChatEvent de Paper. * @param event L'événement AsyncChatEvent de Paper.
*/ */
@@ -70,22 +73,37 @@ public class GuildChatListener implements Listener {
return; return;
} }
// 2. Gestion et Formatage du Chat Global Public // 2. Gestion et Formatage du Chat Global Public ([Grade] [TagGuilde] Pseudo: Message)
event.renderer(new ChatRenderer() { event.renderer(new ChatRenderer() {
@Override @Override
public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) { public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) {
// A. Préfixe de Grade (LuckPerms via PlaceholderAPI)
Component prefixComponent = Component.empty();
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
String lpPrefix = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(source, "%luckperms_prefix%");
if (lpPrefix != null && !lpPrefix.isEmpty()) {
prefixComponent = LegacyComponentSerializer.legacyAmpersand().deserialize(lpPrefix);
}
}
// B. Tag de Guilde (GamingCore avec support Dégradé MiniMessage)
Component tagComponent = Component.empty();
Guild guild = guildManager.getGuildByPlayer(source.getUniqueId()); Guild guild = guildManager.getGuildByPlayer(source.getUniqueId());
if (guild != null) { if (guild != null) {
Component tagComponent = MiniMessage.miniMessage().deserialize("<color:" + guild.getColor() + ">[" + guild.getTag() + "] </color>"); String c = guild.getColor();
return tagComponent if (c.contains(":")) {
.append(sourceDisplayName.color(NamedTextColor.WHITE)) tagComponent = MiniMessage.miniMessage().deserialize("<gradient:" + c + ">[" + guild.getTag() + "]</gradient> ");
.append(Component.text(": ", NamedTextColor.DARK_GRAY)) } else {
.append(message.color(NamedTextColor.WHITE)); tagComponent = MiniMessage.miniMessage().deserialize("<color:" + c + ">[" + guild.getTag() + "]</color> ");
} else { }
return sourceDisplayName.color(NamedTextColor.WHITE)
.append(Component.text(": ", NamedTextColor.DARK_GRAY))
.append(message.color(NamedTextColor.WHITE));
} }
// Assemblage final : [Grade] [TagGuilde] Pseudo: Message
return prefixComponent
.append(tagComponent)
.append(sourceDisplayName.color(NamedTextColor.WHITE))
.append(Component.text(": ", NamedTextColor.DARK_GRAY))
.append(message.color(NamedTextColor.WHITE));
} }
}); });
} }