Add support for component bungee messages

Requires at least BungeeCord commit a64c34d
This commit is contained in:
Phoenix616 2020-07-03 18:24:14 +01:00
parent 98985efd63
commit 742f838f09
No known key found for this signature in database
GPG Key ID: 40E2321E71738EB0
3 changed files with 37 additions and 27 deletions

View File

@ -525,6 +525,18 @@ public class MaterialUtil {
* @param stock The items in stock * @param stock The items in stock
*/ */
public static boolean sendMessage(Player player, Messages.Message message, ItemStack[] stock, Map<String, String> replacementMap, String... replacements) { public static boolean sendMessage(Player player, Messages.Message message, ItemStack[] stock, Map<String, String> 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<String, String> replacementMap, String... replacements) {
if (showItem == null) { if (showItem == null) {
return false; return false;
} }
@ -543,31 +555,19 @@ public class MaterialUtil {
Map<String, String> newMap = new LinkedHashMap<>(replacementMap); Map<String, String> newMap = new LinkedHashMap<>(replacementMap);
newMap.put("material", "item"); newMap.put("material", "item");
BaseComponent[] components = message.getComponents(player, true, newMap, replacements); BaseComponent[] components = new Replacer()
player.spigot().sendMessage(new Replacer()
.placeholderSuffix("") .placeholderSuffix("")
.replace("item", ComponentSerializer.parse("[" + joinedItemJson + "]")) .replace("item", ComponentSerializer.parse("[" + joinedItemJson + "]"))
.replaceIn(components)); .replaceIn(message.getComponents(player, true, newMap, replacements));
if (player != null) {
/* player.spigot().sendMessage(components);
String prevColor = ""; return true;
List<String> parts = new ArrayList<>(); } else if (playerName != null) {
for (String s : message.split("%item")) { ChestShop.sendBungeeMessage(playerName, components);
parts.add(new JSONObject(ImmutableMap.of("text", prevColor + s)).toJSONString()); return true;
prevColor = ChatColor.getLastColors(s);
} }
String messageJsonString = String.join("," + joinedItemJson + ",", parts); return true;
while (messageJsonString.startsWith(",")) {
messageJsonString = messageJsonString.substring(1);
}
while (messageJsonString.endsWith(",")) {
messageJsonString = messageJsonString.substring(0, messageJsonString.length() - 1);
}
showItem.tellRaw(player, messageJsonString);
*/return true;
} }
} }
} }

View File

@ -46,6 +46,8 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; 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.Level;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Marker; 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<String, String> replacementMap, String... replacements) { public static void sendBungeeMessage(String playerName, Messages.Message message, Map<String, String> replacementMap, String... replacements) {
// TODO: Component support for bungee messages? sendBungeeMessage(playerName, message.getComponents(null, true, replacementMap, replacements));
sendBungeeMessage(playerName, message.getTextWithPrefix(null, replacementMap, replacements));
} }
public static void sendBungeeMessage(String playerName, String message) { 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()) { if (Properties.BUNGEECORD_MESSAGES && !Bukkit.getOnlinePlayers().isEmpty()) {
ByteArrayDataOutput out = ByteStreams.newDataOutput(); ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("Message"); out.writeUTF(channel);
out.writeUTF(playerName); out.writeUTF(playerName);
out.writeUTF(message); out.writeUTF(message);

View File

@ -70,10 +70,11 @@ public class TransactionMessageSender implements Listener {
replacementMap.put(replacements[i], replacements[i + 1]); 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 (player != null) {
if (Properties.SHOWITEM_MESSAGE && MaterialUtil.Show.sendMessage(player, rawMessage, event.getStock(), replacementMap)) {
return;
}
replacementMap.put("item", MaterialUtil.getItemList(event.getStock())); replacementMap.put("item", MaterialUtil.getItemList(event.getStock()));
rawMessage.sendWithPrefix(player, replacementMap); rawMessage.sendWithPrefix(player, replacementMap);
} else if (playerName != null) { } else if (playerName != null) {