refactor: use the built-in adventure LegacyComponentSerializer extractUrls in the serializer builder
still does not fix `&d` leaking and breaking the click event and shit
This commit is contained in:
@@ -6,12 +6,11 @@ import me.chayapak1.chomens_bot.command.CommandContext;
|
||||
import me.chayapak1.chomens_bot.command.CommandException;
|
||||
import me.chayapak1.chomens_bot.command.TrustLevel;
|
||||
import me.chayapak1.chomens_bot.data.chat.ChatPacketType;
|
||||
import me.chayapak1.chomens_bot.util.ComponentUtilities;
|
||||
import me.chayapak1.chomens_bot.util.ChatMessageUtilities;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -53,9 +52,7 @@ public class NetMessageCommand extends Command {
|
||||
|
||||
final String rawMessage = context.getString(true, true);
|
||||
|
||||
final Component stylizedMessage = LegacyComponentSerializer.legacyAmpersand()
|
||||
.deserialize(rawMessage)
|
||||
.replaceText(ComponentUtilities.URL_REPLACEMENT_CONFIG);
|
||||
final Component stylizedMessage = ChatMessageUtilities.applyChatMessageStyling(rawMessage);
|
||||
|
||||
final Component component = Component.translatable(
|
||||
"[%s]%s%s%s› %s",
|
||||
|
||||
@@ -5,7 +5,7 @@ import me.chayapak1.chomens_bot.Configuration;
|
||||
import me.chayapak1.chomens_bot.Main;
|
||||
import me.chayapak1.chomens_bot.command.Command;
|
||||
import me.chayapak1.chomens_bot.command.contexts.ConsoleCommandContext;
|
||||
import me.chayapak1.chomens_bot.util.ComponentUtilities;
|
||||
import me.chayapak1.chomens_bot.util.ChatMessageUtilities;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.ComponentBuilder;
|
||||
import net.kyori.adventure.text.SelectorComponent;
|
||||
@@ -14,7 +14,6 @@ import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
|
||||
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jline.reader.*;
|
||||
|
||||
@@ -23,7 +22,6 @@ import java.util.Map;
|
||||
|
||||
public class ConsolePlugin implements Completer {
|
||||
private static final ConsoleFormatRenderer RENDERER = new ConsoleFormatRenderer();
|
||||
private static final LegacyComponentSerializer LEGACY = LegacyComponentSerializer.legacyAmpersand();
|
||||
|
||||
private final List<Bot> allBots;
|
||||
|
||||
@@ -104,9 +102,7 @@ public class ConsolePlugin implements Completer {
|
||||
|
||||
if (!bot.loggedIn) continue;
|
||||
|
||||
final Component stylizedMessage = LEGACY
|
||||
.deserialize(line)
|
||||
.replaceText(ComponentUtilities.URL_REPLACEMENT_CONFIG);
|
||||
final Component stylizedMessage = ChatMessageUtilities.applyChatMessageStyling(line);
|
||||
|
||||
final Component rendered = RENDERER.render(
|
||||
format,
|
||||
|
||||
@@ -4,6 +4,7 @@ import me.chayapak1.chomens_bot.Bot;
|
||||
import me.chayapak1.chomens_bot.Configuration;
|
||||
import me.chayapak1.chomens_bot.Main;
|
||||
import me.chayapak1.chomens_bot.command.contexts.DiscordCommandContext;
|
||||
import me.chayapak1.chomens_bot.util.ChatMessageUtilities;
|
||||
import me.chayapak1.chomens_bot.util.CodeBlockUtilities;
|
||||
import me.chayapak1.chomens_bot.util.ComponentUtilities;
|
||||
import me.chayapak1.chomens_bot.util.LoggerUtilities;
|
||||
@@ -24,7 +25,6 @@ import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent;
|
||||
import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -327,10 +327,7 @@ public class DiscordPlugin extends ListenerAdapter {
|
||||
|
||||
final String replacedMessageContent = replaceMessageContent(message.getContentDisplay());
|
||||
|
||||
Component actualMessage = LegacyComponentSerializer
|
||||
.legacyAmpersand()
|
||||
.deserialize(replacedMessageContent)
|
||||
.replaceText(ComponentUtilities.URL_REPLACEMENT_CONFIG);
|
||||
Component actualMessage = ChatMessageUtilities.applyChatMessageStyling(replacedMessageContent);
|
||||
|
||||
if (!extraComponents.isEmpty()) {
|
||||
if (!replacedMessageContent.isBlank()) actualMessage = actualMessage.append(Component.space());
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package me.chayapak1.chomens_bot.util;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextDecoration;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
|
||||
public class ChatMessageUtilities {
|
||||
private static final LegacyComponentSerializer SERIALIZER = LegacyComponentSerializer.legacyAmpersand()
|
||||
.toBuilder()
|
||||
|
||||
.extractUrls(
|
||||
Style.style(
|
||||
NamedTextColor.BLUE,
|
||||
TextDecoration.UNDERLINED,
|
||||
HoverEvent.showText(
|
||||
Component
|
||||
.text("Click here to open the URL")
|
||||
.color(NamedTextColor.BLUE)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
// > `this.useTerriblyStupidHexFormat = true`
|
||||
// i know it is stupid indeed,
|
||||
// but i also want the compatibility to the kaboom chat
|
||||
.useUnusualXRepeatedCharacterHexFormat() // &x&1&2&3&4&5&6abc
|
||||
|
||||
.build();
|
||||
|
||||
public static Component applyChatMessageStyling (final String message) {
|
||||
return SERIALIZER.deserialize(message);
|
||||
}
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import net.kyori.adventure.text.*;
|
||||
import net.kyori.adventure.text.event.ClickEvent;
|
||||
import net.kyori.adventure.text.event.HoverEvent;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import net.kyori.adventure.text.format.Style;
|
||||
import net.kyori.adventure.text.format.TextColor;
|
||||
@@ -20,49 +18,6 @@ import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class ComponentUtilities {
|
||||
// https://github.com/kaboomserver/extras/blob/master/src/main/java/pw/kaboom/extras/modules/player/PlayerChat.java#L49C9-L81C26
|
||||
// with the hover event added
|
||||
public static final TextReplacementConfig URL_REPLACEMENT_CONFIG =
|
||||
TextReplacementConfig
|
||||
.builder()
|
||||
.match(Pattern
|
||||
.compile("((https?://(ww(w|\\d)\\.)?|ww(w|\\d))[-a-zA-Z0-9@:%._+~#=]{1,256}"
|
||||
+ "\\.[a-zA-Z0-9]{1,63}\\b([-a-zA-Z0-9@:%_+.~#?&/=]*))"))
|
||||
.replacement((b, c) -> {
|
||||
if (c == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (b.groupCount() < 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final String content = b.group(1);
|
||||
final String url;
|
||||
|
||||
/*
|
||||
Minecraft doesn't accept "www.google.com" as a URL
|
||||
in click events
|
||||
*/
|
||||
if (content.contains("://")) {
|
||||
url = content;
|
||||
} else {
|
||||
url = "https://" + content;
|
||||
}
|
||||
|
||||
return Component.text(content, NamedTextColor.BLUE)
|
||||
.decorate(TextDecoration.UNDERLINED)
|
||||
.clickEvent(ClickEvent.openUrl(url))
|
||||
.hoverEvent(
|
||||
HoverEvent.showText(
|
||||
Component
|
||||
.text("Click here to open the URL")
|
||||
.color(NamedTextColor.BLUE)
|
||||
)
|
||||
);
|
||||
})
|
||||
.build();
|
||||
|
||||
// component parsing
|
||||
// rewritten from chipmunkbot, a lot of stuff has changed, and also ANSI and section signs support, etc...
|
||||
public static final Map<String, String> LANGUAGE = loadJsonStringMap("language.json");
|
||||
|
||||
Reference in New Issue
Block a user