2021-01-03 07:21:15 +00:00
|
|
|
package dev.plex.listener.impl;
|
2020-10-28 19:07:02 +00:00
|
|
|
|
2022-05-06 04:27:32 +00:00
|
|
|
import dev.plex.api.chat.IChatHandler;
|
2021-01-03 07:21:15 +00:00
|
|
|
import dev.plex.listener.PlexListener;
|
2022-03-20 02:04:55 +00:00
|
|
|
import dev.plex.listener.annotation.Toggleable;
|
2021-01-03 07:21:15 +00:00
|
|
|
import dev.plex.player.PlexPlayer;
|
2022-05-04 14:50:37 +00:00
|
|
|
import dev.plex.util.PlexUtils;
|
2022-05-04 16:08:35 +00:00
|
|
|
import dev.plex.util.minimessage.SafeMiniMessage;
|
2022-01-27 09:00:50 +00:00
|
|
|
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;
|
2022-01-27 09:00:50 +00:00
|
|
|
import net.kyori.adventure.audience.Audience;
|
|
|
|
import net.kyori.adventure.text.Component;
|
2022-05-02 06:04:21 +00:00
|
|
|
import net.kyori.adventure.text.TextReplacementConfig;
|
|
|
|
import net.kyori.adventure.text.event.ClickEvent;
|
2022-01-27 09:00:50 +00:00
|
|
|
import net.kyori.adventure.text.format.NamedTextColor;
|
|
|
|
import org.bukkit.entity.Player;
|
2020-10-28 19:07:02 +00:00
|
|
|
import org.bukkit.event.EventHandler;
|
2022-01-27 09:00:50 +00:00
|
|
|
import org.jetbrains.annotations.NotNull;
|
2020-10-28 19:07:02 +00:00
|
|
|
|
2022-03-20 02:04:55 +00:00
|
|
|
@Toggleable("chat.enabled")
|
2020-10-31 08:55:27 +00:00
|
|
|
public class ChatListener extends PlexListener
|
2020-10-28 19:07:02 +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-05-10 05:08:45 +00:00
|
|
|
|
2020-10-28 19:07:02 +00:00
|
|
|
@EventHandler
|
2022-01-27 09:00:50 +00:00
|
|
|
public void onChat(AsyncChatEvent event)
|
2020-10-28 19:07:02 +00:00
|
|
|
{
|
2022-05-06 04:27:32 +00:00
|
|
|
plugin.getChatHandler().doChat(event);
|
|
|
|
}
|
2022-05-04 23:23:04 +00:00
|
|
|
|
2022-05-06 04:27:32 +00:00
|
|
|
public static class ChatHandlerImpl implements IChatHandler
|
|
|
|
{
|
|
|
|
private final PlexChatRenderer renderer = new PlexChatRenderer();
|
2022-05-10 05:08:45 +00:00
|
|
|
|
2022-05-06 04:27:32 +00:00
|
|
|
@Override
|
|
|
|
public void doChat(AsyncChatEvent event)
|
2022-02-26 06:24:11 +00:00
|
|
|
{
|
2022-05-18 10:31:15 +00:00
|
|
|
PlexPlayer plexPlayer = plugin.getPlayerCache().getPlexPlayerMap().get(event.getPlayer().getUniqueId());
|
2022-05-06 04:27:32 +00:00
|
|
|
Component prefix = plugin.getRankManager().getPrefix(plexPlayer);
|
|
|
|
|
|
|
|
if (prefix != null)
|
|
|
|
{
|
|
|
|
renderer.hasPrefix = true;
|
|
|
|
renderer.prefix = prefix;
|
2022-05-10 05:08:45 +00:00
|
|
|
}
|
|
|
|
else
|
2022-05-06 04:27:32 +00:00
|
|
|
{
|
|
|
|
renderer.hasPrefix = false;
|
|
|
|
renderer.prefix = null;
|
|
|
|
}
|
2022-05-04 23:23:04 +00:00
|
|
|
|
2022-05-06 04:27:32 +00:00
|
|
|
event.renderer(renderer);
|
|
|
|
}
|
2022-01-27 09:00:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public static class PlexChatRenderer implements ChatRenderer
|
|
|
|
{
|
|
|
|
public boolean hasPrefix;
|
2022-03-18 01:18:35 +00:00
|
|
|
public Component prefix;
|
2022-05-11 05:48:47 +00:00
|
|
|
public Supplier<Component> before = null;
|
2022-01-27 09:00:50 +00:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer)
|
|
|
|
{
|
2022-08-02 02:23:08 +00:00
|
|
|
String text = PlexUtils.cleanString(PlexUtils.getTextFromComponent(message));
|
2022-05-04 15:29:25 +00:00
|
|
|
|
2022-05-04 15:08:52 +00:00
|
|
|
Component component = Component.empty();
|
2022-05-02 06:04:21 +00:00
|
|
|
|
2022-05-11 05:48:47 +00:00
|
|
|
if (before != null)
|
|
|
|
{
|
|
|
|
component = component.append(before.get());
|
|
|
|
}
|
2022-01-27 09:00:50 +00:00
|
|
|
if (hasPrefix)
|
|
|
|
{
|
2022-05-11 05:48:47 +00:00
|
|
|
component = component.append(prefix).append(Component.space());
|
2022-01-27 09:00:50 +00:00
|
|
|
}
|
2022-05-20 20:44:25 +00:00
|
|
|
return component
|
2022-08-02 00:23:57 +00:00
|
|
|
.append(Component.empty())
|
2022-08-02 04:38:18 +00:00
|
|
|
.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
|
|
|
}
|
2020-10-28 19:07:02 +00:00
|
|
|
}
|
|
|
|
}
|