Plex/server/src/main/java/dev/plex/listener/impl/ChatListener.java

90 lines
3.4 KiB
Java
Raw Normal View History

2021-01-03 07:21:15 +00:00
package dev.plex.listener.impl;
2021-01-03 07:21:15 +00:00
import dev.plex.listener.PlexListener;
import dev.plex.listener.annotation.Toggleable;
2021-01-03 07:21:15 +00:00
import dev.plex.player.PlexPlayer;
import dev.plex.util.PlexUtils;
import dev.plex.util.minimessage.SafeMiniMessage;
import io.papermc.paper.chat.ChatRenderer;
import io.papermc.paper.event.player.AsyncChatEvent;
2022-05-19 18:59:16 +00:00
import java.util.function.Supplier;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.jetbrains.annotations.NotNull;
@Toggleable("chat.enabled")
public class ChatListener extends PlexListener
{
2022-08-02 12:08:52 +00:00
2022-05-20 20:44:25 +00:00
private final static TextReplacementConfig URL_REPLACEMENT_CONFIG = TextReplacementConfig
.builder()
.match("(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]")
.replacement((matchResult, builder) -> Component.empty()
.content(matchResult.group())
.clickEvent(ClickEvent.openUrl(
matchResult.group()
))).build();
2022-08-02 12:08:52 +00:00
private final PlexChatRenderer renderer = new PlexChatRenderer();
2022-05-10 05:08:45 +00:00
@EventHandler
public void onChat(AsyncChatEvent event)
{
2022-08-02 12:08:52 +00:00
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId());
Component prefix = plugin.getRankManager().getPrefix(plexPlayer);
2022-05-10 05:08:45 +00:00
2022-08-02 12:08:52 +00:00
if (prefix != null)
2022-02-26 06:24:11 +00:00
{
2022-08-02 12:08:52 +00:00
renderer.hasPrefix = true;
renderer.prefix = prefix;
2022-05-06 04:27:32 +00:00
}
2022-08-02 12:08:52 +00:00
else
{
renderer.hasPrefix = false;
renderer.prefix = null;
}
event.renderer(renderer);
}
public static class PlexChatRenderer implements ChatRenderer
{
public boolean hasPrefix;
public Component prefix;
public Supplier<Component> before = null;
@Override
public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer)
{
String text = PlexUtils.cleanString(PlexUtils.getTextFromComponent(message));
Component component = Component.empty();
if (before != null)
{
component = component.append(before.get());
}
if (hasPrefix)
{
component = component.append(prefix).append(Component.space());
}
2022-05-20 20:44:25 +00:00
return component
.append(Component.empty())
.append(
source.name().equals(sourceDisplayName) ?
SafeMiniMessage.mmDeserialize(plugin.config.getString("chat.name-color") + SafeMiniMessage.mmSerialize(sourceDisplayName))
: SafeMiniMessage.mmDeserialize(plugin.config.getString("chat.name-color")).append(sourceDisplayName)
)
2022-05-20 20:44:25 +00:00
.append(Component.space())
.append(Component.text("»").color(NamedTextColor.GRAY))
.append(Component.space())
.append(SafeMiniMessage.mmDeserializeWithoutEvents(text))
.replaceText(URL_REPLACEMENT_CONFIG);
2021-06-20 08:02:07 +00:00
}
}
}