fix: Resolve tab-completion NoClassDefFoundError, configure TAB RGB gradient/placeholders, and Paper AsyncChatEvent renderer
This commit is contained in:
@@ -2,21 +2,25 @@ 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 fr.luc.gamingcore.util.TextUtil;
|
|
||||||
import io.papermc.paper.event.player.AsyncChatEvent;
|
import io.papermc.paper.event.player.AsyncChatEvent;
|
||||||
|
import net.kyori.adventure.audience.Audience;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
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;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Écouteur gérant le chat privé de guilde.
|
* Écouteur gérant à la fois le chat privé de guilde (#message) et le formatage du chat global avec le tag de guilde.
|
||||||
* Permet aux joueurs d'écrire dans le chat de guilde en préfixant leur message par '#' (ex: # Salut la guilde !).
|
|
||||||
*/
|
*/
|
||||||
public class GuildChatListener implements Listener {
|
public class GuildChatListener implements Listener {
|
||||||
|
|
||||||
@@ -25,7 +29,7 @@ public class GuildChatListener implements Listener {
|
|||||||
private final MessageManager messageManager;
|
private final MessageManager messageManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructeur de l'écouteur de chat de guilde.
|
* Constructeur du listener de chat.
|
||||||
*
|
*
|
||||||
* @param plugin Instance principale du plugin.
|
* @param plugin Instance principale du plugin.
|
||||||
*/
|
*/
|
||||||
@@ -36,17 +40,18 @@ public class GuildChatListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Intercepte les messages de chat commençant par '#' pour les rediriger exclusivement vers la guilde du joueur.
|
* Intercepte les messages de chat pour :
|
||||||
|
* 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.
|
||||||
*
|
*
|
||||||
* @param event L'événement AsyncChatEvent de Paper.
|
* @param event L'événement AsyncChatEvent de Paper.
|
||||||
*/
|
*/
|
||||||
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onAsyncChat(AsyncChatEvent event) {
|
public void onAsyncChat(AsyncChatEvent event) {
|
||||||
String rawText = PlainTextComponentSerializer.plainText().serialize(event.message()).trim();
|
String rawText = PlainTextComponentSerializer.plainText().serialize(event.message()).trim();
|
||||||
if (!rawText.startsWith("#")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 1. Gestion du Chat de Guilde (#)
|
||||||
|
if (rawText.startsWith("#")) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Player sender = event.getPlayer();
|
Player sender = event.getPlayer();
|
||||||
|
|
||||||
@@ -62,6 +67,27 @@ public class GuildChatListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendGuildChatMessage(guild, sender, guildMsg);
|
sendGuildChatMessage(guild, sender, guildMsg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Gestion et Formatage du Chat Global Public
|
||||||
|
event.renderer(new ChatRenderer() {
|
||||||
|
@Override
|
||||||
|
public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) {
|
||||||
|
Guild guild = guildManager.getGuildByPlayer(source.getUniqueId());
|
||||||
|
if (guild != null) {
|
||||||
|
Component tagComponent = MiniMessage.miniMessage().deserialize("<color:" + guild.getColor() + ">[" + guild.getTag() + "] </color>");
|
||||||
|
return tagComponent
|
||||||
|
.append(sourceDisplayName.color(NamedTextColor.WHITE))
|
||||||
|
.append(Component.text(": ", NamedTextColor.DARK_GRAY))
|
||||||
|
.append(message.color(NamedTextColor.WHITE));
|
||||||
|
} else {
|
||||||
|
return sourceDisplayName.color(NamedTextColor.WHITE)
|
||||||
|
.append(Component.text(": ", NamedTextColor.DARK_GRAY))
|
||||||
|
.append(message.color(NamedTextColor.WHITE));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,11 +111,13 @@ public class GuildChatListener implements Listener {
|
|||||||
"{message}", message
|
"{message}", message
|
||||||
);
|
);
|
||||||
|
|
||||||
for (GuildMember m : guild.getMembers()) {
|
Component component = MiniMessage.miniMessage().deserialize(formatted);
|
||||||
if (m.getOfflinePlayer() != null && m.getOfflinePlayer().isOnline()) {
|
|
||||||
Player onlinePlayer = m.getOfflinePlayer().getPlayer();
|
for (GuildMember gm : guild.getMembers()) {
|
||||||
if (onlinePlayer != null) {
|
if (gm.getOfflinePlayer() != null && gm.getOfflinePlayer().isOnline()) {
|
||||||
TextUtil.sendMessage(onlinePlayer, formatted);
|
Player p = gm.getOfflinePlayer().getPlayer();
|
||||||
|
if (p != null) {
|
||||||
|
p.sendMessage(component);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user