From 719ee85268f87b3ba933c04e4cd327b4ecfebd66 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 11 Apr 2021 20:36:13 -0500 Subject: [PATCH] Update hex color support for message remover. Does not support 1.7 at this time. --- src/config.yml | 2 - src/example_config_always_up_to_date!.yml | 2 - src/mineverse/Aust1n46/chat/ChatMessage.java | 8 ++- .../chat/command/chat/Removemessage.java | 15 ++--- .../chat/listeners/PacketListener.java | 3 +- .../Aust1n46/chat/utilities/Format.java | 57 +++++++++++++++++-- 6 files changed, 64 insertions(+), 23 deletions(-) diff --git a/src/config.yml b/src/config.yml index 8fb06fa..9edbc33 100644 --- a/src/config.yml +++ b/src/config.yml @@ -138,7 +138,6 @@ ignorechat: false # The message shown to players alerting them no one is in the channel to hear them emptychannelalert: "&6No one is listening to you." -# Known issue: hex colors do not work here! messageremoverpermissions: '&cYou need additional permissions to view this message!' messageremovertext: '&c&o' @@ -205,7 +204,6 @@ venturegui: command: '/removemessage {hash} {channel}' slot: 7 -# Known issue: Only one color code is allowed here! More than one will cause an error! guiicon: '&c [✓]' guitext: '&cOpen Moderation GUI' guirows: 1 diff --git a/src/example_config_always_up_to_date!.yml b/src/example_config_always_up_to_date!.yml index 8fb06fa..9edbc33 100644 --- a/src/example_config_always_up_to_date!.yml +++ b/src/example_config_always_up_to_date!.yml @@ -138,7 +138,6 @@ ignorechat: false # The message shown to players alerting them no one is in the channel to hear them emptychannelalert: "&6No one is listening to you." -# Known issue: hex colors do not work here! messageremoverpermissions: '&cYou need additional permissions to view this message!' messageremovertext: '&c&o' @@ -205,7 +204,6 @@ venturegui: command: '/removemessage {hash} {channel}' slot: 7 -# Known issue: Only one color code is allowed here! More than one will cause an error! guiicon: '&c [✓]' guitext: '&cOpen Moderation GUI' guirows: 1 diff --git a/src/mineverse/Aust1n46/chat/ChatMessage.java b/src/mineverse/Aust1n46/chat/ChatMessage.java index 0315cf8..89c5dd9 100644 --- a/src/mineverse/Aust1n46/chat/ChatMessage.java +++ b/src/mineverse/Aust1n46/chat/ChatMessage.java @@ -7,11 +7,13 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; public class ChatMessage { private WrappedChatComponent component; private String message; + private String coloredMessage; private int hash; - public ChatMessage(WrappedChatComponent component, String message, int hash) { + public ChatMessage(WrappedChatComponent component, String message, String coloredMessage, int hash) { this.component = component; this.message = message; + this.coloredMessage = coloredMessage; this.hash = hash; } @@ -26,6 +28,10 @@ public class ChatMessage { public String getMessage() { return this.message; } + + public String getColoredMessage() { + return this.coloredMessage; + } public int getHash() { return this.hash; diff --git a/src/mineverse/Aust1n46/chat/command/chat/Removemessage.java b/src/mineverse/Aust1n46/chat/command/chat/Removemessage.java index 03b8020..7fdf227 100644 --- a/src/mineverse/Aust1n46/chat/command/chat/Removemessage.java +++ b/src/mineverse/Aust1n46/chat/command/chat/Removemessage.java @@ -25,9 +25,9 @@ import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; public class Removemessage extends MineverseCommand { - private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}"); private MineverseChat plugin = MineverseChat.getInstance(); - private WrappedChatComponent messageDeletedComponentPlayer; + private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}"); + private WrappedChatComponent messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremovertext"))) + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions"))) + "]}}}]}");; public Removemessage(String name) { super(name); @@ -118,17 +118,10 @@ public class Removemessage extends MineverseCommand { } public WrappedChatComponent getMessageDeletedChatComponentPlayer() { - if(this.messageDeletedComponentPlayer == null) { - this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")) + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); - } return this.messageDeletedComponentPlayer; } public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { - String oMessage = message.getComponent().getJson().substring(1, message.getComponent().getJson().length() - 11); - if(message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { - oMessage = oMessage.substring(0, oMessage.length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length() - 3) + "\"}]"; - } - return WrappedChatComponent.fromJson(Format.FormatStringAll("{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")) + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"&7Message: \"," + oMessage + "}}}]}")); + return WrappedChatComponent.fromJson("[{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremovertext"))) + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\"," + message.getColoredMessage() + "}}}]}]"); } -} \ No newline at end of file +} diff --git a/src/mineverse/Aust1n46/chat/listeners/PacketListener.java b/src/mineverse/Aust1n46/chat/listeners/PacketListener.java index 7eae550..0ee83d7 100644 --- a/src/mineverse/Aust1n46/chat/listeners/PacketListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/PacketListener.java @@ -65,10 +65,11 @@ public class PacketListener extends PacketAdapter { } String message = Format.toPlainText(chat.getHandle(), chat.getHandleType()); + String coloredMessage = Format.toColoredText(chat.getHandle(), chat.getHandleType()); if(message == null) { return; } int hash = message.hashCode(); - mcp.addMessage(new ChatMessage(chat, message, hash)); + mcp.addMessage(new ChatMessage(chat, message, coloredMessage, hash)); } } \ No newline at end of file diff --git a/src/mineverse/Aust1n46/chat/utilities/Format.java b/src/mineverse/Aust1n46/chat/utilities/Format.java index fc2280d..e5b709a 100644 --- a/src/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/mineverse/Aust1n46/chat/utilities/Format.java @@ -14,6 +14,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Sound; import org.bukkit.entity.Player; +import org.json.simple.JSONObject; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; @@ -266,7 +267,7 @@ public class Format { * @param s * @return {@link String} */ - private static String convertToJsonColors(String s) { + public static String convertToJsonColors(String s) { return convertToJsonColors(s, ""); } @@ -488,6 +489,51 @@ public class Format { e.printStackTrace(); } } + + @SuppressWarnings("unchecked") + public static String toColoredText(Object o, Class c) { + if (VersionHandler.is1_7_10()) { + return "This method is not currently supported in 1.7"; + } + List finalList = new ArrayList<>(); + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append("\"extra\":["); + try { + splitComponents(finalList, o, c); + for (Object component : finalList) { + try { + String text = (String) component.getClass().getMethod("getText").invoke(component); + Object chatModifier = component.getClass().getMethod("getChatModifier").invoke(component); + String color = chatModifier.getClass().getMethod("getColor").invoke(chatModifier).toString(); + boolean bold = (boolean) chatModifier.getClass().getMethod("isBold").invoke(chatModifier); + boolean strikethrough = (boolean) chatModifier.getClass().getMethod("isStrikethrough").invoke(chatModifier); + boolean italic = (boolean) chatModifier.getClass().getMethod("isItalic").invoke(chatModifier); + boolean underlined = (boolean) chatModifier.getClass().getMethod("isUnderlined").invoke(chatModifier); + boolean obfuscated = (boolean) chatModifier.getClass().getMethod("isRandom").invoke(chatModifier); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("text", text); + jsonObject.put("color", color); + jsonObject.put("bold", bold); + jsonObject.put("strikethrough", strikethrough); + jsonObject.put("italic", italic); + jsonObject.put("underlined", underlined); + jsonObject.put("obfuscated", obfuscated); + stringbuilder.append(jsonObject.toJSONString() + ","); + } + catch(Exception e) { + return "Something went wrong. Could not access color."; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + String coloredText = stringbuilder.toString(); + if(coloredText.endsWith(",")) { + coloredText = coloredText.substring(0, coloredText.length() - 1); + } + coloredText += "]"; + return coloredText; + } public static String toPlainText(Object o, Class c) { List finalList = new ArrayList<>(); @@ -516,11 +562,10 @@ public class Format { } private static void splitComponents(List finalList, Object o, Class c) throws Exception { - // if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { - // for(Method m : c.getMethods()) { - // System.out.println(m.getName()); - // } - // } +// for(Method m : c.getMethods()) { +// System.out.println(m.getName()); +// } + if (VersionHandler.is1_7() || VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11() || VersionHandler.is1_12() || VersionHandler.is1_13() || (VersionHandler.is1_14() && !VersionHandler.is1_14_4())) {