diff --git a/pom.xml b/pom.xml
index 8e00bcf..8706960 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,11 +83,31 @@
de.themoep
- minedown
- 1.6.1-SNAPSHOT
+ minedown-adventure
+ 1.6.2-SNAPSHOT
compile
+
+ net.kyori
+ adventure-platform-bukkit
+ 4.0.0-SNAPSHOT
+ compile
+
+
+
+ net.kyori
+ adventure-text-serializer-gson
+ 4.2.0
+ compile
+
+
+ com.google.code.gson
+ gson
+
+
+
+
org.apache.logging.log4j
@@ -312,7 +332,7 @@
de.themoep.showitem
api
- 1.2.24
+ 1.6.3
provided
@@ -375,6 +395,7 @@
de.themoep:*
de.themoep.utils:*
+ net.kyori:*
org.bstats:*
net.gravitydevelopment.updater
com.j256.ormlite
@@ -385,11 +406,15 @@
de.themoep.utils.lang
- com.Acrobot.ChestShop.Lang
+ com.Acrobot.ChestShop.Libs.Lang
- de.themoep.minedown
- com.Acrobot.ChestShop.MineDown
+ de.themoep.minedown.adventure
+ com.Acrobot.ChestShop.Libs.MineDown
+
+
+ net.kyori
+ com.Acrobot.ChestShop.Libs.Kyori
org.bstats
@@ -401,11 +426,11 @@
com.j256.ormlite
- com.Acrobot.ChestShop.ORMlite
+ com.Acrobot.ChestShop.Libs.ORMlite
javax.persistence
- com.Acrobot.ChestShop.javax.persistence
+ com.Acrobot.ChestShop.Libs.javax.persistence
@@ -506,7 +531,7 @@
com.destroystokyo.paper
paper-api
- 1.16.1-R0.1-SNAPSHOT
+ 1.16.4-R0.1-SNAPSHOT
provided
diff --git a/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java b/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java
index 827bdda..0440720 100644
--- a/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java
+++ b/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java
@@ -6,12 +6,10 @@ import com.Acrobot.ChestShop.Configuration.Messages;
import com.Acrobot.ChestShop.Configuration.Properties;
import com.Acrobot.ChestShop.Events.ItemParseEvent;
import com.Acrobot.ChestShop.Events.MaterialParseEvent;
-import com.google.common.collect.ImmutableMap;
import de.themoep.ShowItem.api.ShowItem;
-import de.themoep.minedown.Replacer;
+import de.themoep.minedown.adventure.Replacer;
import info.somethingodd.OddItem.OddItem;
-import net.md_5.bungee.api.chat.BaseComponent;
-import net.md_5.bungee.chat.ComponentSerializer;
+import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.configuration.file.YamlConstructor;
@@ -21,7 +19,6 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.Plugin;
-import org.json.simple.JSONObject;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.nodes.Tag;
@@ -35,7 +32,6 @@ import java.util.Map;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import java.util.stream.Collectors;
import static com.Acrobot.Breeze.Utils.StringUtil.getMinecraftCharWidth;
import static com.Acrobot.Breeze.Utils.StringUtil.getMinecraftStringWidth;
@@ -541,29 +537,27 @@ public class MaterialUtil {
return false;
}
- List itemJson = new ArrayList<>();
+ Component itemComponent = Component.empty();
for (ItemStack item : InventoryUtil.mergeSimilarStacks(stock)) {
try {
- itemJson.add(showItem.getItemConverter().createComponent(item, Level.FINE).toJsonString(player));
+ itemComponent.append(showItem.getItemConverter().createComponent(item, Level.FINE).toTextComponent(player));
} catch (Exception e) {
ChestShop.getPlugin().getLogger().log(Level.WARNING, "Error while trying to send message '" + message + "' to player " + player.getName() + ": " + e.getMessage());
return false;
}
}
- String joinedItemJson = itemJson.stream().collect(Collectors.joining("," + new JSONObject(ImmutableMap.of("text", " ")).toJSONString() + ", "));
-
Map newMap = new LinkedHashMap<>(replacementMap);
newMap.put("material", "item");
- BaseComponent[] components = new Replacer()
+ Component component = new Replacer()
.placeholderSuffix("")
- .replace("item", ComponentSerializer.parse("[" + joinedItemJson + "]"))
- .replaceIn(message.getComponents(player, true, newMap, replacements));
+ .replace("item",itemComponent)
+ .replaceIn(message.getComponent(player, true, newMap, replacements));
if (player != null) {
- player.spigot().sendMessage(components);
+ ChestShop.getAudiences().player(player).sendMessage(component);
return true;
} else if (playerName != null) {
- ChestShop.sendBungeeMessage(playerName, components);
+ ChestShop.sendBungeeMessage(playerName, component);
return true;
}
diff --git a/src/main/java/com/Acrobot/ChestShop/ChestShop.java b/src/main/java/com/Acrobot/ChestShop/ChestShop.java
index ace82e1..13e1c59 100644
--- a/src/main/java/com/Acrobot/ChestShop/ChestShop.java
+++ b/src/main/java/com/Acrobot/ChestShop/ChestShop.java
@@ -47,6 +47,9 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
+import net.kyori.adventure.platform.bukkit.BukkitAudiences;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.chat.ComponentSerializer;
import org.apache.logging.log4j.Level;
@@ -93,6 +96,8 @@ public class ChestShop extends JavaPlugin {
private static Server server;
private static PluginDescriptionFile description;
+ private static BukkitAudiences audiences;
+
private static File dataFolder;
private static ItemDatabase itemDatabase;
@@ -116,6 +121,7 @@ public class ChestShop extends JavaPlugin {
@Override
public void onEnable() {
+ audiences = BukkitAudiences.create(this);
turnOffDatabaseLogging();
if (!handleMigrations()) {
return;
@@ -518,6 +524,10 @@ public class ChestShop extends JavaPlugin {
return plugin;
}
+ public static BukkitAudiences getAudiences() {
+ return audiences;
+ }
+
public static void registerListener(Listener listener) {
plugin.registerEvent(listener);
}
@@ -527,7 +537,7 @@ public class ChestShop extends JavaPlugin {
}
public static void sendBungeeMessage(String playerName, Messages.Message message, Map replacementMap, String... replacements) {
- sendBungeeMessage(playerName, message.getComponents(null, true, replacementMap, replacements));
+ sendBungeeMessage(playerName, message.getComponent(null, true, replacementMap, replacements));
}
public static void sendBungeeMessage(String playerName, String message) {
@@ -538,6 +548,10 @@ public class ChestShop extends JavaPlugin {
sendBungeeMessage(playerName, "MessageRaw", ComponentSerializer.toString(message));
}
+ public static void sendBungeeMessage(String playerName, Component message) {
+ sendBungeeMessage(playerName, "MessageRaw", GsonComponentSerializer.gson().serialize(message));
+ }
+
private static void sendBungeeMessage(String playerName, String channel, String message) {
if (Properties.BUNGEECORD_MESSAGES && !Bukkit.getOnlinePlayers().isEmpty()) {
ByteArrayDataOutput out = ByteStreams.newDataOutput();
diff --git a/src/main/java/com/Acrobot/ChestShop/Configuration/Messages.java b/src/main/java/com/Acrobot/ChestShop/Configuration/Messages.java
index 612a8fa..62fe5ce 100644
--- a/src/main/java/com/Acrobot/ChestShop/Configuration/Messages.java
+++ b/src/main/java/com/Acrobot/ChestShop/Configuration/Messages.java
@@ -2,11 +2,13 @@ package com.Acrobot.ChestShop.Configuration;
import com.Acrobot.Breeze.Configuration.Configuration;
import com.Acrobot.ChestShop.ChestShop;
-import de.themoep.minedown.MineDown;
+import de.themoep.minedown.adventure.MineDown;
import de.themoep.utils.lang.bukkit.BukkitLanguageConfig;
import de.themoep.utils.lang.bukkit.LanguageManager;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.md_5.bungee.api.chat.BaseComponent;
-import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.command.CommandSender;
import java.io.File;
@@ -154,22 +156,27 @@ public class Messages {
}
public void sendWithPrefix(CommandSender sender, Map replacementMap, String... replacements) {
- sender.spigot().sendMessage(getComponents(sender, true, replacementMap, replacements));
+ ChestShop.getAudiences().sender(sender).sendMessage(getComponent(sender, true, replacementMap, replacements));
}
public void sendWithPrefix(CommandSender sender, Map replacements) {
- sender.spigot().sendMessage(getComponents(sender, true, replacements));
+ ChestShop.getAudiences().sender(sender).sendMessage(getComponent(sender, true, replacements));
}
public void sendWithPrefix(CommandSender sender, String... replacements) {
- sender.spigot().sendMessage(getComponents(sender, true, Collections.emptyMap(), replacements));
+ ChestShop.getAudiences().sender(sender).sendMessage(getComponent(sender, true, Collections.emptyMap(), replacements));
}
public void send(CommandSender sender, String... replacements) {
- sender.spigot().sendMessage(getComponents(sender, false, Collections.emptyMap(), replacements));
+ ChestShop.getAudiences().sender(sender).sendMessage(getComponent(sender, false, Collections.emptyMap(), replacements));
}
+ @Deprecated
public BaseComponent[] getComponents(CommandSender sender, boolean prefixSuffix, Map replacementMap, String... replacements) {
+ return BungeeComponentSerializer.get().serialize(getComponent(sender, prefixSuffix, replacementMap, replacements));
+ }
+
+ public Component getComponent(CommandSender sender, boolean prefixSuffix, Map replacementMap, String... replacements) {
MineDown mineDown = new MineDown("%prefix" + getLang(sender));
mineDown.placeholderSuffix("");
mineDown.replace("prefix", prefixSuffix ? prefix.getLang(sender) : "");
@@ -183,7 +190,7 @@ public class Messages {
}
public String getTextWithPrefix(CommandSender sender, Map replacementMap, String... replacements) {
- return TextComponent.toLegacyText(getComponents(sender, true, replacementMap, replacements));
+ return LegacyComponentSerializer.legacySection().serialize(getComponent(sender, true, replacementMap, replacements));
}
public String getTextWithPrefix(CommandSender sender, String... replacements) {