diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java index 1f4ef76..02ddae4 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/ChatUtils.java @@ -14,12 +14,9 @@ import net.minecraft.Util; import net.minecraft.client.Minecraft; import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; -import net.minecraft.data.registries.VanillaRegistries; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; -import java.util.function.Consumer; - public class ChatUtils { private static final GsonComponentSerializer adventureSerializer = GsonComponentSerializer.builder().options( @@ -70,7 +67,7 @@ public class ChatUtils { public static String resolve(net.kyori.adventure.text.Component component, boolean formatted) { Component c = adventureToMojang(component); - String returnVal = ChatFormatting.stripFormatting(c.getString()); + String returnVal = ChatFormatting.stripFormatting(DiscordMarkdownStripper.stripMarkdown(c.getString())); if (formatted) { returnVal = DiscordSerializer.INSTANCE.serialize(safeCopy(c).copy()); diff --git a/Common/src/main/java/com/hypherionmc/craterlib/utils/DiscordMarkdownStripper.java b/Common/src/main/java/com/hypherionmc/craterlib/utils/DiscordMarkdownStripper.java new file mode 100644 index 0000000..0175b4f --- /dev/null +++ b/Common/src/main/java/com/hypherionmc/craterlib/utils/DiscordMarkdownStripper.java @@ -0,0 +1,35 @@ +package com.hypherionmc.craterlib.utils; + +import org.jetbrains.annotations.NotNull; + +import java.util.regex.Pattern; + +public class DiscordMarkdownStripper { + + // Patterns for different markdown syntaxes + private static final Pattern BOLD = Pattern.compile("\\*\\*(.*?)\\*\\*"); + private static final Pattern ITALIC_UNDERSCORE = Pattern.compile("_(.*?)_"); + private static final Pattern ITALIC_ASTERISK = Pattern.compile("\\*(.*?)\\*"); + private static final Pattern UNDERLINE = Pattern.compile("__(.*?)__"); + private static final Pattern STRIKETHROUGH = Pattern.compile("~~(.*?)~~"); + private static final Pattern CODE_BLOCK = Pattern.compile("```(.+?)```", Pattern.DOTALL); + private static final Pattern INLINE_CODE = Pattern.compile("`([^`]*)`"); + private static final Pattern BLOCKQUOTE = Pattern.compile("^> (.*?$)", Pattern.MULTILINE); + private static final Pattern MARKDOWN_LINK = Pattern.compile("\\[(.*?)\\]\\((.*?)\\)"); + private static final Pattern PLAIN_URL = Pattern.compile("\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); + + public static String stripMarkdown(@NotNull String text) { + text = BOLD.matcher(text).replaceAll("$1"); + text = ITALIC_UNDERSCORE.matcher(text).replaceAll("$1"); + text = ITALIC_ASTERISK.matcher(text).replaceAll("$1"); + text = UNDERLINE.matcher(text).replaceAll("$1"); + text = STRIKETHROUGH.matcher(text).replaceAll("$1"); + text = CODE_BLOCK.matcher(text).replaceAll("$1"); + text = INLINE_CODE.matcher(text).replaceAll("$1"); + text = BLOCKQUOTE.matcher(text).replaceAll("$1"); + text = MARKDOWN_LINK.matcher(text).replaceAll("$1"); + text = PLAIN_URL.matcher(text).replaceAll("<$0>"); + + return text; + } +} diff --git a/gradle.properties b/gradle.properties index 8ebc76c..e21b12c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ version_major=2 version_minor=0 version_patch=2 -version_build=1 +version_build=0 #Mod mod_author=HypherionSA