From 63e3b7d7b99fd785209e4514496a0e4fba18d296 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Mon, 5 Feb 2024 03:56:42 -0600 Subject: [PATCH] Fix message remover tested against 1.20.4 --- pom.xml | 8 +++- .../mineverse/Aust1n46/chat/ChatMessage.java | 4 +- .../Aust1n46/chat/MineverseChat.java | 9 +++- .../chat/api/MineverseChatPlayer.java | 11 ++--- .../chat/command/chat/VentureChatGui.java | 36 +++++++--------- .../chat/gui/ModerationGuiInventory.java | 24 +++++++++++ .../chat/listeners/CommandListener.java | 37 +++++++++-------- .../listeners/PacketListenerLegacyChat.java | 3 +- .../listeners/PacketListenerSystemChat.java | 41 +++++++++++++++++++ .../Aust1n46/chat/utilities/Format.java | 8 +++- 10 files changed, 128 insertions(+), 53 deletions(-) create mode 100644 src/main/java/mineverse/Aust1n46/chat/gui/ModerationGuiInventory.java create mode 100644 src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerSystemChat.java diff --git a/pom.xml b/pom.xml index 615a6ea..b29eaff 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 mineverse.Aust1n46.chat VentureChat - 3.7.1 + 3.7.2 https://bitbucket.org/Aust1n46/venturechat/src/master https://bitbucket.org/Aust1n46/venturechat/src/master @@ -221,6 +221,12 @@ 1.20-R0.1-SNAPSHOT provided + + org.projectlombok + lombok + 1.18.22 + provided + junit junit diff --git a/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java b/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java index 7e388a9..d5dbc2f 100644 --- a/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java +++ b/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java @@ -10,11 +10,11 @@ public class ChatMessage { private String coloredMessage; private int hash; - public ChatMessage(WrappedChatComponent component, String message, String coloredMessage, int hash) { + public ChatMessage(WrappedChatComponent component, String message, String coloredMessage) { this.component = component; this.message = message; this.coloredMessage = coloredMessage; - this.hash = hash; + this.hash = message.hashCode(); } public WrappedChatComponent getComponent() { diff --git a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java index 685d9c5..bc132cc 100644 --- a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java @@ -23,6 +23,7 @@ import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.scheduler.BukkitScheduler; import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketContainer; import me.clip.placeholderapi.PlaceholderAPI; @@ -43,6 +44,7 @@ import mineverse.Aust1n46.chat.listeners.ChatListener; import mineverse.Aust1n46.chat.listeners.CommandListener; import mineverse.Aust1n46.chat.listeners.LoginListener; import mineverse.Aust1n46.chat.listeners.PacketListenerLegacyChat; +import mineverse.Aust1n46.chat.listeners.PacketListenerSystemChat; import mineverse.Aust1n46.chat.listeners.SignListener; import mineverse.Aust1n46.chat.localization.Localization; import mineverse.Aust1n46.chat.localization.LocalizedMessage; @@ -212,14 +214,17 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } private void registerListeners() { - PluginManager pluginManager = getServer().getPluginManager(); + final PluginManager pluginManager = getServer().getPluginManager(); pluginManager.registerEvents(new Channel(), this); pluginManager.registerEvents(new ChatListener(), this); pluginManager.registerEvents(new SignListener(), this); pluginManager.registerEvents(new CommandListener(), this); pluginManager.registerEvents(new LoginListener(), this); + final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); if (VersionHandler.isUnder_1_19()) { - ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListenerLegacyChat()); + protocolManager.addPacketListener(new PacketListenerLegacyChat()); + } else { + protocolManager.addPacketListener(new PacketListenerSystemChat()); } } diff --git a/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java b/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java index 2a3a5d7..0ea13d3 100644 --- a/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java +++ b/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.UUID; @@ -46,7 +47,7 @@ public class MineverseChatPlayer { private boolean partyChat; private HashMap> spam; private boolean modified; - private List messages; + private LinkedList messages; private String jsonFormat; private boolean editing; private int editHash; @@ -83,7 +84,7 @@ public class MineverseChatPlayer { this.replyPlayer = null; this.partyChat = false; this.modified = false; - this.messages = new ArrayList(); + this.messages = new LinkedList(); this.jsonFormat = jsonFormat; this.cooldowns = new HashMap(); this.spam = new HashMap>(); @@ -116,7 +117,7 @@ public class MineverseChatPlayer { this.replyPlayer = null; this.partyChat = false; this.modified = false; - this.messages = new ArrayList(); + this.messages = new LinkedList(); this.jsonFormat = "Default"; this.cooldowns = new HashMap(); this.spam = new HashMap>(); @@ -522,9 +523,9 @@ public class MineverseChatPlayer { public void addMessage(ChatMessage message) { if(this.messages.size() >= 100) { - this.messages.remove(0); + this.messages.removeFirst(); } - this.messages.add(message); + this.messages.addLast(message); } public void clearMessages() { diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java b/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java index 3e06ccb..a754a01 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java +++ b/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java @@ -3,7 +3,6 @@ package mineverse.Aust1n46.chat.command.chat; import java.util.ArrayList; import java.util.List; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.Command; @@ -20,6 +19,7 @@ import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.channel.ChatChannel; import mineverse.Aust1n46.chat.gui.GuiSlot; +import mineverse.Aust1n46.chat.gui.ModerationGuiInventory; import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.versions.VersionHandler; @@ -34,7 +34,7 @@ public class VentureChatGui extends Command { @Override public boolean execute(CommandSender sender, String command, String[] args) { if (!(sender instanceof Player)) { - Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); + plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return true; } if (args.length < 3) { @@ -73,40 +73,33 @@ public class VentureChatGui extends Command { @SuppressWarnings("deprecation") private void openInventory(MineverseChatPlayer mcp, MineverseChatPlayer target, ChatChannel channel, int hash) { - Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI"); - ItemStack close = null; - ItemStack skull = null; + final Inventory inv = plugin.getServer().createInventory(new ModerationGuiInventory(mcp, channel, hash), this.getSlots(), "VentureChat: " + target.getName() + " GUI"); + final ItemStack close; if (VersionHandler.is1_7()) { close = new ItemStack(Material.BEDROCK); } else { close = new ItemStack(Material.BARRIER); } + ItemMeta closeMeta = close.getItemMeta(); + closeMeta.setDisplayName(ChatColor.RED + "" + ChatColor.ITALIC + "Close GUI"); + close.setItemMeta(closeMeta); + final ItemStack skull; if (VersionHandler.is1_7() || VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11() || VersionHandler.is1_12()) { skull = new ItemStack(Material.getMaterial("SKULL_ITEM")); } else { skull = new ItemStack(Material.PLAYER_HEAD); } - - ItemMeta closeMeta = close.getItemMeta(); - closeMeta.setDisplayName(ChatColor.RED + "" + ChatColor.ITALIC + "Close GUI"); - close.setItemMeta(closeMeta); - SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); - skullMeta.setOwner(target.getName()); + skullMeta.setOwningPlayer(plugin.getServer().getOfflinePlayer(target.getUUID())); skullMeta.setDisplayName(ChatColor.AQUA + target.getName()); - List skullLore = new ArrayList(); - skullLore.add(ChatColor.GRAY + "Channel: " + channel.getColor() + channel.getName()); - skullLore.add(ChatColor.GRAY + "Hash: " + channel.getColor() + hash); - skullMeta.setLore(skullLore); skull.setItemMeta(skullMeta); skull.setDurability((short) 3); - inv.setItem(0, skull); - - for (GuiSlot g : GuiSlot.getGuiSlots()) { + + for (final GuiSlot g : GuiSlot.getGuiSlots()) { if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) { if (this.checkSlot(g.getSlot())) { - MineverseChat.getInstance().getServer().getConsoleSender() + plugin.getServer().getConsoleSender() .sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); continue; } @@ -125,13 +118,14 @@ public class VentureChatGui extends Command { } } + inv.setItem(0, skull); inv.setItem(8, close); mcp.getPlayer().openInventory(inv); } @SuppressWarnings("deprecation") private void openInventoryDiscord(MineverseChatPlayer mcp, ChatChannel channel, int hash) { - Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: Discord_Message GUI"); + Inventory inv = plugin.getServer().createInventory(null, this.getSlots(), "VentureChat: Discord_Message GUI"); ItemStack close = null; ItemStack skull = null; if (VersionHandler.is1_7()) { @@ -164,7 +158,7 @@ public class VentureChatGui extends Command { for (GuiSlot g : GuiSlot.getGuiSlots()) { if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) { if (this.checkSlot(g.getSlot())) { - MineverseChat.getInstance().getServer().getConsoleSender() + plugin.getServer().getConsoleSender() .sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); continue; } diff --git a/src/main/java/mineverse/Aust1n46/chat/gui/ModerationGuiInventory.java b/src/main/java/mineverse/Aust1n46/chat/gui/ModerationGuiInventory.java new file mode 100644 index 0000000..4d2f170 --- /dev/null +++ b/src/main/java/mineverse/Aust1n46/chat/gui/ModerationGuiInventory.java @@ -0,0 +1,24 @@ +package mineverse.Aust1n46.chat.gui; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import mineverse.Aust1n46.chat.api.MineverseChatPlayer; +import mineverse.Aust1n46.chat.channel.ChatChannel; + +@Getter +@Setter +@AllArgsConstructor +public class ModerationGuiInventory implements InventoryHolder { + private MineverseChatPlayer targetMcp; + private ChatChannel channel; + private int hash; + + @Override + public Inventory getInventory() { + return null; + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java b/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java index 697c384..6505a5f 100644 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java @@ -13,10 +13,10 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.server.ServerCommandEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.SkullMeta; -import me.clip.placeholderapi.PlaceholderAPI; import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.alias.Alias; import mineverse.Aust1n46.chat.api.MineverseChatAPI; @@ -24,6 +24,7 @@ import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.channel.ChatChannel; import mineverse.Aust1n46.chat.database.Database; import mineverse.Aust1n46.chat.gui.GuiSlot; +import mineverse.Aust1n46.chat.gui.ModerationGuiInventory; import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.versions.VersionHandler; @@ -137,19 +138,22 @@ public class CommandListener implements Listener { @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.LOW) - public void InventoryClick(InventoryClickEvent e) { - ItemStack item = e.getCurrentItem(); - if (item == null || !e.getView().getTitle().contains("VentureChat")) { + public void InventoryClick(final InventoryClickEvent event) { + final Inventory inventory = event.getInventory(); + final InventoryHolder inventoryHolder = inventory.getHolder(false); + if (!(inventoryHolder instanceof ModerationGuiInventory)) { + return; + } + event.setCancelled(true); + final ModerationGuiInventory moderationGuiInventory = (ModerationGuiInventory) inventoryHolder; + final MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) event.getWhoClicked()); + final MineverseChatPlayer target = moderationGuiInventory.getTargetMcp(); + final ChatChannel channel = moderationGuiInventory.getChannel(); + final int hash = moderationGuiInventory.getHash(); + final ItemStack item = event.getCurrentItem(); + if (item == null) { return; } - e.setCancelled(true); - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) e.getWhoClicked()); - String playerName = e.getView().getTitle().replace(" GUI", "").replace("VentureChat: ", ""); - MineverseChatPlayer target = MineverseChatAPI.getMineverseChatPlayer(playerName); - ItemStack skull = e.getInventory().getItem(0); - SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); - ChatChannel channel = ChatChannel.getChannel(ChatColor.stripColor(skullMeta.getLore().get(0)).replace("Channel: ", "")); - int hash = Integer.parseInt(ChatColor.stripColor(skullMeta.getLore().get(1).replace("Hash: ", ""))); if (VersionHandler.is1_7()) { if (item.getType() == Material.BEDROCK) { mcp.getPlayer().closeInventory(); @@ -159,14 +163,11 @@ public class CommandListener implements Listener { mcp.getPlayer().closeInventory(); } } - for (GuiSlot g : GuiSlot.getGuiSlots()) { - if (g.getIcon() == item.getType() && g.getDurability() == item.getDurability() && g.getSlot() == e.getSlot()) { + for (final GuiSlot g : GuiSlot.getGuiSlots()) { + if (g.getIcon() == item.getType() && g.getDurability() == item.getDurability() && g.getSlot() == event.getSlot()) { String command = g.getCommand().replace("{channel}", channel.getName()).replace("{hash}", hash + ""); if (target != null) { command = command.replace("{player_name}", target.getName()); - if (target.isOnline()) { - command = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command)); - } } else { command = command.replace("{player_name}", "Discord_Message"); } diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerLegacyChat.java b/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerLegacyChat.java index ec0dab9..f692ba1 100644 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerLegacyChat.java +++ b/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerLegacyChat.java @@ -62,7 +62,6 @@ public class PacketListenerLegacyChat extends PacketAdapter { if(message == null) { return; } - int hash = message.hashCode(); - mcp.addMessage(new ChatMessage(chat, message, coloredMessage, hash)); + mcp.addMessage(new ChatMessage(chat, message, coloredMessage)); } } diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerSystemChat.java b/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerSystemChat.java new file mode 100644 index 0000000..11379d2 --- /dev/null +++ b/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListenerSystemChat.java @@ -0,0 +1,41 @@ +package mineverse.Aust1n46.chat.listeners; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.WrappedChatComponent; + +import mineverse.Aust1n46.chat.ChatMessage; +import mineverse.Aust1n46.chat.MineverseChat; +import mineverse.Aust1n46.chat.api.MineverseChatAPI; +import mineverse.Aust1n46.chat.api.MineverseChatPlayer; +import mineverse.Aust1n46.chat.utilities.Format; + +public class PacketListenerSystemChat extends PacketAdapter { + public PacketListenerSystemChat() { + super(MineverseChat.getInstance(), ListenerPriority.MONITOR, PacketType.Play.Server.SYSTEM_CHAT); + } + + @Override + public void onPacketSending(final PacketEvent event) { + if (event.isCancelled()) { + return; + } + final MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); + if (mcp == null) { + return; + } + + final WrappedChatComponent chat = event.getPacket().getChatComponents().read(0); + if (chat == null) { + return; + } + final String message = Format.toPlainText(chat.getHandle(), chat.getHandleType()); + final String coloredMessage = Format.toColoredText(chat.getHandle(), chat.getHandleType()); + if (message == null) { + return; + } + mcp.addMessage(new ChatMessage(chat, message, coloredMessage)); + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java b/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java index 6e365f5..7d19096 100644 --- a/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java @@ -523,6 +523,9 @@ public class Format { public static String toColoredText(Object o, Class c) { if (VersionHandler.is1_7()) { return "\"extra\":[{\"text\":\"Hover to see original message is not currently supported in 1.7\",\"color\":\"red\"}]"; + } + if (VersionHandler.isAbove_1_19()) { + return "\"extra\":[{\"text\":\"Hover to see original message is not currently supported in 1.19+\",\"color\":\"red\"}]"; } List finalList = new ArrayList<>(); StringBuilder stringbuilder = new StringBuilder(); @@ -636,8 +639,7 @@ public class Format { finalList.add(component); } } - } - else { + } else if (VersionHandler.is1_18() || VersionHandler.is1_19()){ ArrayList list = (ArrayList) c.getMethod("b").invoke(o, new Object[0]); for (Object component : list) { ArrayList innerList = (ArrayList) c.getMethod("b").invoke(component, new Object[0]); @@ -647,6 +649,8 @@ public class Format { finalList.add(component); } } + } else { + ((List) c.getMethod("h").invoke(o)).forEach(finalList::add); } }