aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2024-02-20 05:50:21 +0100
committerLeonardo Bishop <13875753+LMBishop@users.noreply.github.com>2024-02-22 16:31:48 +0000
commitd2b5759d7eb09bc997222288c45ccd0429160f1c (patch)
tree9a8bde8d25eb1ecb9db102d054ef9edbc2f9e266 /bukkit
parent2c81c6cecca916dbe603153e00fc55d5b4a89b54 (diff)
Fix CraftBukkit hex color adapter compatibility
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/build.gradle7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/Chat.java58
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/CodedColorAdapter.java14
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/ColorAdapter.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/HexColorAdapter.java32
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/chat/MiniMessageParser.java5
6 files changed, 77 insertions, 46 deletions
diff --git a/bukkit/build.gradle b/bukkit/build.gradle
index c9c2abe9..3c927341 100644
--- a/bukkit/build.gradle
+++ b/bukkit/build.gradle
@@ -58,10 +58,12 @@ dependencies {
// Paper
compileOnly('io.papermc.paper:paper-api:1.20.2-R0.1-SNAPSHOT') {
exclude(group: 'it.unimi.dsi', module: 'fastutil') // exclude fastutil just to don't use it (for 1.8 support)
+ exclude(group: 'net.md-5', module: 'bungeecord-chat')
}
// Folia
compileOnly('dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT') {
exclude(group: 'it.unimi.dsi', module: 'fastutil') // exclude fastutil just to don't use it (for 1.8 support)
+ exclude(group: 'net.md-5', module: 'bungeecord-chat')
}
// ASkyBlock
compileOnly('com.wasteofplastic:askyblock:3.0.9.4') { transitive = false }
@@ -132,6 +134,8 @@ dependencies {
implementation 'org.slf4j:slf4j-nop:1.7.36'
// hppc
implementation 'com.carrotsearch:hppc:0.9.1'
+ // bungeecord-chat
+ implementation('net.md-5:bungeecord-chat:1.20-R0.2') { transitive = false }
}
tasks.build {
@@ -139,10 +143,13 @@ tasks.build {
}
shadowJar {
+ exclude('mojang-translations/*')
+
relocate 'org.bstats', 'com.leonardobishop.quests.libs.bstats'
relocate 'com.zaxxer.hikari', 'com.leonardobishop.quests.libs.hikari'
relocate 'org.slf4j', 'com.leonardobishop.quests.libs.slf4j'
relocate 'com.carrotsearch.hppc', 'com.leonardobishop.quests.libs.hppc'
+ relocate 'net.md_5.bungee', 'com.leonardobishop.quests.libs.bungee'
minimize {
exclude(dependency('org.bstats:.*:.*'))
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);
}
-
}