diff --git a/pom.xml b/pom.xml
index 45416419..f0abed64 100644
--- a/pom.xml
+++ b/pom.xml
@@ -463,6 +463,18 @@
com.alessiodp.libby
fr.xephi.authme.libs.com.alessiodp.libby
+
+ net.kyori.adventure
+ fr.xephi.authme.libs.net.kyori.adventure
+
+
+ net.kyori.examination
+ fr.xephi.authme.libs.net.kyori.examination
+
+
+ net.kyori.option
+ fr.xephi.authme.libs.net.kyori.option
+
@@ -539,6 +551,12 @@
https://repo.opencollab.dev/maven-snapshots/
+
+
+ sonatype-oss-snapshots1
+ https://s01.oss.sonatype.org/content/repositories/snapshots/
+
+
apache-snapshots
@@ -807,14 +825,14 @@
junit
junit
-
- bungeecord-chat
- net.md-5
-
com.googlecode.json-simple
json-simple
+
+ bungeecord-chat
+ net.md-5
+
@@ -882,6 +900,23 @@
+
+
+ net.kyori
+ adventure-text-minimessage
+ 4.17.0
+
+
+ net.kyori
+ adventure-platform-bukkit
+ 4.3.2
+
+
+ net.kyori
+ adventure-text-serializer-gson
+ 4.17.0
+
+
net.luckperms
diff --git a/src/main/java/fr/xephi/authme/listener/PlayerListener.java b/src/main/java/fr/xephi/authme/listener/PlayerListener.java
index 2af84523..41277d79 100644
--- a/src/main/java/fr/xephi/authme/listener/PlayerListener.java
+++ b/src/main/java/fr/xephi/authme/listener/PlayerListener.java
@@ -21,6 +21,7 @@ import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.TeleportUtils;
+import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.HumanEntity;
@@ -220,7 +221,7 @@ public class PlayerListener implements Listener{
String customJoinMessage = settings.getProperty(RegistrationSettings.CUSTOM_JOIN_MESSAGE);
if (!customJoinMessage.isEmpty()) {
- customJoinMessage = ChatColor.translateAlternateColorCodes('&', customJoinMessage);
+ customJoinMessage = ChatColor.translateAlternateColorCodes('&', MiniMessageUtils.parseMiniMessageToLegacy(customJoinMessage));
event.setJoinMessage(customJoinMessage
.replace("{PLAYERNAME}", player.getName())
.replace("{DISPLAYNAME}", player.getDisplayName())
diff --git a/src/main/java/fr/xephi/authme/message/Messages.java b/src/main/java/fr/xephi/authme/message/Messages.java
index 1989fddd..8a5b65bb 100644
--- a/src/main/java/fr/xephi/authme/message/Messages.java
+++ b/src/main/java/fr/xephi/authme/message/Messages.java
@@ -5,6 +5,7 @@ import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.mail.EmailService;
import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.util.expiring.Duration;
+import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -126,7 +127,7 @@ public class Messages {
displayName = ((Player) sender).getDisplayName();
}
- return ChatColor.translateAlternateColorCodes('&', message)
+ return ChatColor.translateAlternateColorCodes('&', MiniMessageUtils.parseMiniMessageToLegacy(message))
.replace(NEWLINE_TAG, "\n")
.replace(USERNAME_TAG, sender.getName())
.replace(DISPLAYNAME_TAG, displayName);
@@ -142,7 +143,7 @@ public class Messages {
private String retrieveMessage(MessageKey key, String name) {
String message = messagesFileHandler.getMessage(key.getKey());
- return ChatColor.translateAlternateColorCodes('&', message)
+ return ChatColor.translateAlternateColorCodes('&', MiniMessageUtils.parseMiniMessageToLegacy(message))
.replace(NEWLINE_TAG, "\n")
.replace(USERNAME_TAG, name)
.replace(DISPLAYNAME_TAG, name);
diff --git a/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java b/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java
new file mode 100644
index 00000000..c8f59afd
--- /dev/null
+++ b/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java
@@ -0,0 +1,23 @@
+package fr.xephi.authme.util.message;
+
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+
+public class MiniMessageUtils {
+ private static final MiniMessage miniMessage = MiniMessage.miniMessage();
+
+ /**
+ * Parse a MiniMessage string into a legacy string.
+ *
+ * @param message The message to parse.
+ * @return The parsed message.
+ */
+ public static String parseMiniMessageToLegacy(String message) {
+ Component component = miniMessage.deserialize(message);
+ return LegacyComponentSerializer.legacyAmpersand().serialize(component);
+ }
+
+ private MiniMessageUtils() {
+ }
+}