diff options
| author | Krakenied <Krakenied1@gmail.com> | 2024-02-20 05:50:21 +0100 |
|---|---|---|
| committer | Leonardo Bishop <13875753+LMBishop@users.noreply.github.com> | 2024-02-22 16:31:48 +0000 |
| commit | d2b5759d7eb09bc997222288c45ccd0429160f1c (patch) | |
| tree | 9a8bde8d25eb1ecb9db102d054ef9edbc2f9e266 /bukkit/src | |
| parent | 2c81c6cecca916dbe603153e00fc55d5b4a89b54 (diff) | |
Fix CraftBukkit hex color adapter compatibility
Diffstat (limited to 'bukkit/src')
5 files changed, 70 insertions, 46 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java index 1a9b0709..050e5747 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java @@ -10,33 +10,47 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.regex.Pattern; -public class Chat { +public final class Chat { private static final ColorAdapter legacyColorAdapter; private static final Pattern legacyPattern; private static MiniMessageParser miniMessageParser; static { - String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];; - if (version.startsWith("v1_7") || version.startsWith("v1_8") || version.startsWith("v1_9") - || version.startsWith("v1_10") || version.startsWith("v1_11") || version.startsWith("v1_12") - || version.startsWith("v1_13") || version.startsWith("v1_14") || version.startsWith("v1_15")) { + String[] versionPartStrings = Bukkit.getBukkitVersion().split("-", 2)[0].split("\\.", 3); + int versionPartCount = versionPartStrings.length; + + int[] versionParts = new int[versionPartCount]; + for (int i = 0; i < versionPartCount; i++) { + try { + versionParts[i] = Integer.parseInt(versionPartStrings[i]); + } catch (NumberFormatException ignored) { + versionParts[i] = 0; + } + } + + if (versionParts[0] <= 1 && versionParts[1] <= 15) { legacyColorAdapter = new CodedColorAdapter(); } else { legacyColorAdapter = new HexColorAdapter(); } - Quests questsPlugin = (Quests) Bukkit.getPluginManager().getPlugin("Quests"); + + legacyPattern = Pattern.compile("(?i)[&§][0-9A-FK-ORX#]"); + + Quests plugin = (Quests) Bukkit.getPluginManager().getPlugin("Quests"); + Objects.requireNonNull(plugin); + try { Class.forName("net.kyori.adventure.Adventure", false, Bukkit.class.getClassLoader()); + miniMessageParser = new MiniMessageParser(); - questsPlugin.getQuestsLogger().debug("Modern chat is available."); - } catch (Throwable e) { - questsPlugin.getQuestsLogger().debug("Modern chat is not available, resorting to legacy chat."); - miniMessageParser = null; + plugin.getQuestsLogger().debug("Modern chat is available."); + } catch (ClassNotFoundException ignored) { + plugin.getQuestsLogger().debug("Modern chat is not available, using legacy chat instead."); } - legacyPattern = Pattern.compile("(&|§)(?:\\d|#|[a-f]|[k-o]|r)"); } @Contract("null -> null") @@ -47,14 +61,18 @@ public class Chat { @Contract("null -> null") @Deprecated // use send instead - public static List<String> legacyColor(@Nullable List<String> s) { - if (s == null || s.size() == 0) return s; + public static List<String> legacyColor(@Nullable List<String> list) { + if (list == null || list.isEmpty()) { + return list; + } - List<String> colored = new ArrayList<>(); - for (String line : s) { - colored.add(legacyColorAdapter.color(line)); + List<String> coloredList = new ArrayList<>(); + for (String s : list) { + String colored = legacyColorAdapter.color(s); + coloredList.add(colored); } - return colored; + + return coloredList; } @Contract("null -> null") @@ -70,6 +88,7 @@ public class Chat { return miniMessageParser != null; } + @SuppressWarnings("deprecation") public static ChatColor matchConfigProblemToColor(ConfigProblem.ConfigProblemType configProblem) { return switch (configProblem) { case ERROR -> ChatColor.RED; @@ -105,8 +124,8 @@ public class Chat { } String substitutedMessage = message; - for (int i = 0; i < substitutions.length ; i += 2) { - substitutedMessage = substitutedMessage.replace(substitutions[i], substitutions[i+1]); + for (int i = 0; i < substitutions.length; i += 2) { + substitutedMessage = substitutedMessage.replace(substitutions[i], substitutions[i + 1]); } if (miniMessageParser == null || (allowLegacy && usesLegacy(message))) { @@ -126,5 +145,4 @@ public class Chat { public static void send(CommandSender who, String message, String... substitutions) { send(who, message, false, substitutions); } - } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/CodedColorAdapter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/CodedColorAdapter.java index 877a79e0..4ac4a042 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/CodedColorAdapter.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/CodedColorAdapter.java @@ -3,18 +3,24 @@ package com.leonardobishop.quests.bukkit.util.chat; import org.bukkit.ChatColor; import org.jetbrains.annotations.Nullable; -public class CodedColorAdapter implements ColorAdapter { +@SuppressWarnings("deprecation") +public final class CodedColorAdapter implements ColorAdapter { @Override public String color(@Nullable String s) { - if (s == null) return null; + if (s == null) { + return null; + } + return ChatColor.translateAlternateColorCodes('&', s); } @Override public String strip(@Nullable String s) { - if (s == null) return null; + if (s == null) { + return null; + } + return ChatColor.stripColor(s); } - } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/ColorAdapter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/ColorAdapter.java index b443c8b4..8ee223ad 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/ColorAdapter.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/ColorAdapter.java @@ -5,8 +5,9 @@ import org.jetbrains.annotations.Nullable; public interface ColorAdapter { - @Contract("null -> null") String color(@Nullable String s); - - @Contract("null -> null") String strip(@Nullable String s); + @Contract("null -> null") + String color(@Nullable String s); + @Contract("null -> null") + String strip(@Nullable String s); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/HexColorAdapter.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/HexColorAdapter.java index 25fbd697..1e7756fa 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/HexColorAdapter.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/HexColorAdapter.java @@ -1,37 +1,37 @@ package com.leonardobishop.quests.bukkit.util.chat; import net.md_5.bungee.api.ChatColor; +import org.jetbrains.annotations.Nullable; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class HexColorAdapter implements ColorAdapter { +public final class HexColorAdapter implements ColorAdapter { - private static final Pattern HEX_PATTERN = Pattern.compile("&#([A-Fa-f0-9]{6})"); + private static final Pattern HEX_PATTERN = Pattern.compile("&#[a-fA-F0-9]{6}"); @Override - public String color(String s) { - if (s == null) return null; + public String color(@Nullable String s) { + if (s == null) { + return null; + } + Matcher matcher = HEX_PATTERN.matcher(s); while (matcher.find()) { - final ChatColor hexColor; - try { - hexColor = ChatColor.of(matcher.group().substring(1)); - } catch (IllegalArgumentException ex) { - continue; - } - final String before = s.substring(0, matcher.start()); - final String after = s.substring(matcher.end()); - s = before + hexColor + after; + String hexCode = matcher.group().substring(1); + s = s.substring(0, matcher.start()) + ChatColor.of(hexCode) + s.substring(matcher.end()); matcher = HEX_PATTERN.matcher(s); } + return ChatColor.translateAlternateColorCodes('&', s); } @Override - public String strip(String s) { - if (s == null) return null; + public String strip(@Nullable String s) { + if (s == null) { + return null; + } + return ChatColor.stripColor(s); } - } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java index 09a2cc3c..71412b7c 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java @@ -4,17 +4,16 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.command.CommandSender; -public class MiniMessageParser { +public final class MiniMessageParser { private final MiniMessage miniMessage; public MiniMessageParser() { - miniMessage = MiniMessage.miniMessage(); + this.miniMessage = MiniMessage.miniMessage(); } public void send(CommandSender who, String message) { Component component = miniMessage.deserialize(message); who.sendMessage(component); } - } |
