From 63fcd3a2b146550f5bf78f88e0c4b6ee47e6c753 Mon Sep 17 00:00:00 2001 From: Business Goose Date: Mon, 2 May 2022 07:04:21 +0100 Subject: [PATCH] Use replaceText to replace URLs with correct components for them (closes #34) --- .../java/dev/plex/listener/impl/ChatListener.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/server/src/main/java/dev/plex/listener/impl/ChatListener.java b/server/src/main/java/dev/plex/listener/impl/ChatListener.java index eabc1aa..a65a4ca 100644 --- a/server/src/main/java/dev/plex/listener/impl/ChatListener.java +++ b/server/src/main/java/dev/plex/listener/impl/ChatListener.java @@ -4,14 +4,18 @@ import dev.plex.cache.PlayerCache; import dev.plex.listener.PlexListener; import dev.plex.listener.annotation.Toggleable; import dev.plex.player.PlexPlayer; +import dev.plex.util.PlexLog; import io.papermc.paper.chat.ChatRenderer; import io.papermc.paper.event.player.AsyncChatEvent; 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 net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import net.kyori.adventure.text.minimessage.tag.standard.StandardTags; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; @@ -19,6 +23,14 @@ import org.jetbrains.annotations.NotNull; @Toggleable("chat.enabled") public class ChatListener extends PlexListener { + 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(); private final PlexChatRenderer renderer = new PlexChatRenderer(); @EventHandler @@ -48,6 +60,8 @@ public class ChatListener extends PlexListener @Override public @NotNull Component render(@NotNull Player source, @NotNull Component sourceDisplayName, @NotNull Component message, @NotNull Audience viewer) { + message = message.replaceText(URL_REPLACEMENT_CONFIG); + if (hasPrefix) { return Component.empty()