diff --git a/api/src/main/java/com/alttd/chat/config/Config.java b/api/src/main/java/com/alttd/chat/config/Config.java index 8e66cc9..96564ac 100755 --- a/api/src/main/java/com/alttd/chat/config/Config.java +++ b/api/src/main/java/com/alttd/chat/config/Config.java @@ -211,8 +211,10 @@ public final class Config { // TODO prefixes need hovers, this hasn't been setup yet! public static String CHATFORMAT = " > >: "; + public static String URLFORMAT = ">"; private static void Chat() { CHATFORMAT = getString("chat.format", CHATFORMAT); + URLFORMAT = getString("chat.urlformat", URLFORMAT); } public static List GACECOMMANDALIASES = new ArrayList<>(); diff --git a/api/src/main/java/com/alttd/chat/util/Utility.java b/api/src/main/java/com/alttd/chat/util/Utility.java index 07ae6c0..01311d2 100755 --- a/api/src/main/java/com/alttd/chat/util/Utility.java +++ b/api/src/main/java/com/alttd/chat/util/Utility.java @@ -3,19 +3,30 @@ package com.alttd.chat.util; import com.alttd.chat.ChatAPI; import com.alttd.chat.config.Config; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.luckperms.api.LuckPerms; import net.luckperms.api.model.group.Group; import net.luckperms.api.model.user.User; import net.luckperms.api.node.Node; +import net.md_5.bungee.api.ChatColor; +import org.jetbrains.annotations.NotNull; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Utility { + static final Pattern DEFAULT_URL_PATTERN = Pattern.compile("(?:(https?)://)?([-\\w_.]+\\.\\w{2,})(/\\S*)?"); + static final Pattern URL_SCHEME_PATTERN = Pattern.compile("^[a-z][a-z0-9+\\-.]*:"); + public static String stringRegen = "\\{#[A-Fa-f0-9]{6}(<)?(>)?}"; public static HashMap colors; + private static LegacyComponentSerializer legacySerializer; static { // this might be in minimessage already? colors = new HashMap<>(); colors.put("&0", ""); @@ -58,7 +69,7 @@ public class Utility { .sorted(Comparator.comparingInt(o -> o.getWeight().orElse(0))) .forEach(group -> { if (Config.PREFIXGROUPS.contains(group.getName())) { - prefix.append(group.getCachedData().getMetaData().getPrefix()); + prefix.append(getGroupPrefix(group)); } }); } @@ -80,6 +91,11 @@ public class Utility { return applyColor(prefix.toString()); } + public static String getGroupPrefix(Group group) { + + return group.getCachedData().getMetaData().getPrefix(); + } + public static String getDisplayName(UUID uuid, String playerName) { if (!playerName.isBlank()) return playerName; LuckPerms luckPerms = ChatAPI.get().getLuckPerms(); @@ -176,4 +192,30 @@ public class Utility { return stringBuilder.length()==0 ? miniMessage.parse(message) : miniMessage.parse(stringBuilder.toString()); } + + public static String formatText(String message) { + /* + .match(pattern) + .replacement(url -> { + String clickUrl = url.content(); + if (!URL_SCHEME_PATTERN.matcher(clickUrl).find()) { + clickUrl = "http://" + clickUrl; + } + return (style == null ? url : url.style(style)).clickEvent(ClickEvent.openUrl(clickUrl)); + }) + .build(); + */ + Matcher matcher = DEFAULT_URL_PATTERN.matcher(message); + while (matcher.find()) { + String url = matcher.group(); + String clickUrl = url; + String urlFormat = Config.URLFORMAT; + if (!URL_SCHEME_PATTERN.matcher(clickUrl).find()) { + clickUrl = "http://" + clickUrl; + } + message = message.replace(url, urlFormat.replaceAll("", url).replaceAll("", clickUrl)); + } + return message; + } + } diff --git a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java index 1eba595..a7251bf 100755 --- a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java +++ b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java @@ -17,6 +17,7 @@ import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.Template; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -58,6 +59,8 @@ public class ChatHandler { if(updatedMessage.contains("[i]")) updatedMessage = updatedMessage.replace("[i]", "<[i]>"); + updatedMessage = Utility.formatText(updatedMessage); + List