From 742f838f097568f7b14736e6eb232f2cba15804a Mon Sep 17 00:00:00 2001 From: Phoenix616 Date: Fri, 3 Jul 2020 18:24:14 +0100 Subject: [PATCH] Add support for component bungee messages Requires at least BungeeCord commit a64c34d --- .../Acrobot/Breeze/Utils/MaterialUtil.java | 42 +++++++++---------- .../java/com/Acrobot/ChestShop/ChestShop.java | 15 +++++-- .../TransactionMessageSender.java | 7 ++-- 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java b/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java index 171fd9f..85aa09b 100644 --- a/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java +++ b/src/main/java/com/Acrobot/Breeze/Utils/MaterialUtil.java @@ -525,6 +525,18 @@ public class MaterialUtil { * @param stock The items in stock */ public static boolean sendMessage(Player player, Messages.Message message, ItemStack[] stock, Map replacementMap, String... replacements) { + return sendMessage(player, player.getName(), message, stock, replacementMap, replacements); + } + + /** + * Send a message with hover info and icons + * + * @param player The player to send the message to + * @param playerName The name of the player in case he is offline and bungee messages are enabled + * @param message The raw message + * @param stock The items in stock + */ + public static boolean sendMessage(Player player, String playerName, Messages.Message message, ItemStack[] stock, Map replacementMap, String... replacements) { if (showItem == null) { return false; } @@ -543,31 +555,19 @@ public class MaterialUtil { Map newMap = new LinkedHashMap<>(replacementMap); newMap.put("material", "item"); - BaseComponent[] components = message.getComponents(player, true, newMap, replacements); - player.spigot().sendMessage(new Replacer() + BaseComponent[] components = new Replacer() .placeholderSuffix("") .replace("item", ComponentSerializer.parse("[" + joinedItemJson + "]")) - .replaceIn(components)); - - /* - String prevColor = ""; - List parts = new ArrayList<>(); - for (String s : message.split("%item")) { - parts.add(new JSONObject(ImmutableMap.of("text", prevColor + s)).toJSONString()); - prevColor = ChatColor.getLastColors(s); + .replaceIn(message.getComponents(player, true, newMap, replacements)); + if (player != null) { + player.spigot().sendMessage(components); + return true; + } else if (playerName != null) { + ChestShop.sendBungeeMessage(playerName, components); + return true; } - String messageJsonString = String.join("," + joinedItemJson + ",", parts); - - while (messageJsonString.startsWith(",")) { - messageJsonString = messageJsonString.substring(1); - } - while (messageJsonString.endsWith(",")) { - messageJsonString = messageJsonString.substring(0, messageJsonString.length() - 1); - } - - showItem.tellRaw(player, messageJsonString); - */return true; + return true; } } } diff --git a/src/main/java/com/Acrobot/ChestShop/ChestShop.java b/src/main/java/com/Acrobot/ChestShop/ChestShop.java index 65ef7bc..e942413 100644 --- a/src/main/java/com/Acrobot/ChestShop/ChestShop.java +++ b/src/main/java/com/Acrobot/ChestShop/ChestShop.java @@ -46,6 +46,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.chat.ComponentSerializer; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Marker; @@ -519,14 +521,21 @@ public class ChestShop extends JavaPlugin { } public static void sendBungeeMessage(String playerName, Messages.Message message, Map replacementMap, String... replacements) { - // TODO: Component support for bungee messages? - sendBungeeMessage(playerName, message.getTextWithPrefix(null, replacementMap, replacements)); + sendBungeeMessage(playerName, message.getComponents(null, true, replacementMap, replacements)); } public static void sendBungeeMessage(String playerName, String message) { + sendBungeeMessage(playerName, "Message", message); + } + + public static void sendBungeeMessage(String playerName, BaseComponent[] message) { + sendBungeeMessage(playerName, "MessageRaw", ComponentSerializer.toString(message)); + } + + private static void sendBungeeMessage(String playerName, String channel, String message) { if (Properties.BUNGEECORD_MESSAGES && !Bukkit.getOnlinePlayers().isEmpty()) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("Message"); + out.writeUTF(channel); out.writeUTF(playerName); out.writeUTF(message); diff --git a/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/TransactionMessageSender.java b/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/TransactionMessageSender.java index 013d6b2..98b085a 100644 --- a/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/TransactionMessageSender.java +++ b/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/TransactionMessageSender.java @@ -70,10 +70,11 @@ public class TransactionMessageSender implements Listener { replacementMap.put(replacements[i], replacements[i + 1]); } + if (Properties.SHOWITEM_MESSAGE && MaterialUtil.Show.sendMessage(player, playerName, rawMessage, event.getStock(), replacementMap)) { + return; + } + if (player != null) { - if (Properties.SHOWITEM_MESSAGE && MaterialUtil.Show.sendMessage(player, rawMessage, event.getStock(), replacementMap)) { - return; - } replacementMap.put("item", MaterialUtil.getItemList(event.getStock())); rawMessage.sendWithPrefix(player, replacementMap); } else if (playerName != null) {