Fix message remover tested against 1.20.4

This commit is contained in:
Aust1n46 2024-02-05 03:56:42 -06:00
parent 05762e0bc7
commit 63e3b7d7b9
10 changed files with 128 additions and 53 deletions

View File

@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>mineverse.Aust1n46.chat</groupId> <groupId>mineverse.Aust1n46.chat</groupId>
<artifactId>VentureChat</artifactId> <artifactId>VentureChat</artifactId>
<version>3.7.1</version> <version>3.7.2</version>
<url>https://bitbucket.org/Aust1n46/venturechat/src/master</url> <url>https://bitbucket.org/Aust1n46/venturechat/src/master</url>
<scm> <scm>
<url>https://bitbucket.org/Aust1n46/venturechat/src/master</url> <url>https://bitbucket.org/Aust1n46/venturechat/src/master</url>
@ -221,6 +221,12 @@
<version>1.20-R0.1-SNAPSHOT</version> <version>1.20-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>

View File

@ -10,11 +10,11 @@ public class ChatMessage {
private String coloredMessage; private String coloredMessage;
private int hash; 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.component = component;
this.message = message; this.message = message;
this.coloredMessage = coloredMessage; this.coloredMessage = coloredMessage;
this.hash = hash; this.hash = message.hashCode();
} }
public WrappedChatComponent getComponent() { public WrappedChatComponent getComponent() {

View File

@ -23,6 +23,7 @@ import org.bukkit.plugin.messaging.PluginMessageListener;
import org.bukkit.scheduler.BukkitScheduler; import org.bukkit.scheduler.BukkitScheduler;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import me.clip.placeholderapi.PlaceholderAPI; 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.CommandListener;
import mineverse.Aust1n46.chat.listeners.LoginListener; import mineverse.Aust1n46.chat.listeners.LoginListener;
import mineverse.Aust1n46.chat.listeners.PacketListenerLegacyChat; import mineverse.Aust1n46.chat.listeners.PacketListenerLegacyChat;
import mineverse.Aust1n46.chat.listeners.PacketListenerSystemChat;
import mineverse.Aust1n46.chat.listeners.SignListener; import mineverse.Aust1n46.chat.listeners.SignListener;
import mineverse.Aust1n46.chat.localization.Localization; import mineverse.Aust1n46.chat.localization.Localization;
import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.localization.LocalizedMessage;
@ -212,14 +214,17 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
} }
private void registerListeners() { private void registerListeners() {
PluginManager pluginManager = getServer().getPluginManager(); final PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(new Channel(), this); pluginManager.registerEvents(new Channel(), this);
pluginManager.registerEvents(new ChatListener(), this); pluginManager.registerEvents(new ChatListener(), this);
pluginManager.registerEvents(new SignListener(), this); pluginManager.registerEvents(new SignListener(), this);
pluginManager.registerEvents(new CommandListener(), this); pluginManager.registerEvents(new CommandListener(), this);
pluginManager.registerEvents(new LoginListener(), this); pluginManager.registerEvents(new LoginListener(), this);
final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
if (VersionHandler.isUnder_1_19()) { if (VersionHandler.isUnder_1_19()) {
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListenerLegacyChat()); protocolManager.addPacketListener(new PacketListenerLegacyChat());
} else {
protocolManager.addPacketListener(new PacketListenerSystemChat());
} }
} }

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -46,7 +47,7 @@ public class MineverseChatPlayer {
private boolean partyChat; private boolean partyChat;
private HashMap<ChatChannel, List<Long>> spam; private HashMap<ChatChannel, List<Long>> spam;
private boolean modified; private boolean modified;
private List<ChatMessage> messages; private LinkedList<ChatMessage> messages;
private String jsonFormat; private String jsonFormat;
private boolean editing; private boolean editing;
private int editHash; private int editHash;
@ -83,7 +84,7 @@ public class MineverseChatPlayer {
this.replyPlayer = null; this.replyPlayer = null;
this.partyChat = false; this.partyChat = false;
this.modified = false; this.modified = false;
this.messages = new ArrayList<ChatMessage>(); this.messages = new LinkedList<ChatMessage>();
this.jsonFormat = jsonFormat; this.jsonFormat = jsonFormat;
this.cooldowns = new HashMap<ChatChannel, Long>(); this.cooldowns = new HashMap<ChatChannel, Long>();
this.spam = new HashMap<ChatChannel, List<Long>>(); this.spam = new HashMap<ChatChannel, List<Long>>();
@ -116,7 +117,7 @@ public class MineverseChatPlayer {
this.replyPlayer = null; this.replyPlayer = null;
this.partyChat = false; this.partyChat = false;
this.modified = false; this.modified = false;
this.messages = new ArrayList<ChatMessage>(); this.messages = new LinkedList<ChatMessage>();
this.jsonFormat = "Default"; this.jsonFormat = "Default";
this.cooldowns = new HashMap<ChatChannel, Long>(); this.cooldowns = new HashMap<ChatChannel, Long>();
this.spam = new HashMap<ChatChannel, List<Long>>(); this.spam = new HashMap<ChatChannel, List<Long>>();
@ -522,9 +523,9 @@ public class MineverseChatPlayer {
public void addMessage(ChatMessage message) { public void addMessage(ChatMessage message) {
if(this.messages.size() >= 100) { if(this.messages.size() >= 100) {
this.messages.remove(0); this.messages.removeFirst();
} }
this.messages.add(message); this.messages.addLast(message);
} }
public void clearMessages() { public void clearMessages() {

View File

@ -3,7 +3,6 @@ package mineverse.Aust1n46.chat.command.chat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; 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.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.channel.ChatChannel; import mineverse.Aust1n46.chat.channel.ChatChannel;
import mineverse.Aust1n46.chat.gui.GuiSlot; import mineverse.Aust1n46.chat.gui.GuiSlot;
import mineverse.Aust1n46.chat.gui.ModerationGuiInventory;
import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.localization.LocalizedMessage;
import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler; import mineverse.Aust1n46.chat.versions.VersionHandler;
@ -34,7 +34,7 @@ public class VentureChatGui extends Command {
@Override @Override
public boolean execute(CommandSender sender, String command, String[] args) { public boolean execute(CommandSender sender, String command, String[] args) {
if (!(sender instanceof Player)) { 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; return true;
} }
if (args.length < 3) { if (args.length < 3) {
@ -73,40 +73,33 @@ public class VentureChatGui extends Command {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private void openInventory(MineverseChatPlayer mcp, MineverseChatPlayer target, ChatChannel channel, int hash) { private void openInventory(MineverseChatPlayer mcp, MineverseChatPlayer target, ChatChannel channel, int hash) {
Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI"); final Inventory inv = plugin.getServer().createInventory(new ModerationGuiInventory(mcp, channel, hash), this.getSlots(), "VentureChat: " + target.getName() + " GUI");
ItemStack close = null; final ItemStack close;
ItemStack skull = null;
if (VersionHandler.is1_7()) { if (VersionHandler.is1_7()) {
close = new ItemStack(Material.BEDROCK); close = new ItemStack(Material.BEDROCK);
} else { } else {
close = new ItemStack(Material.BARRIER); 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()) { 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")); skull = new ItemStack(Material.getMaterial("SKULL_ITEM"));
} else { } else {
skull = new ItemStack(Material.PLAYER_HEAD); 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 skullMeta = (SkullMeta) skull.getItemMeta();
skullMeta.setOwner(target.getName()); skullMeta.setOwningPlayer(plugin.getServer().getOfflinePlayer(target.getUUID()));
skullMeta.setDisplayName(ChatColor.AQUA + target.getName()); skullMeta.setDisplayName(ChatColor.AQUA + target.getName());
List<String> skullLore = new ArrayList<String>();
skullLore.add(ChatColor.GRAY + "Channel: " + channel.getColor() + channel.getName());
skullLore.add(ChatColor.GRAY + "Hash: " + channel.getColor() + hash);
skullMeta.setLore(skullLore);
skull.setItemMeta(skullMeta); skull.setItemMeta(skullMeta);
skull.setDurability((short) 3); skull.setDurability((short) 3);
inv.setItem(0, skull);
for (final GuiSlot g : GuiSlot.getGuiSlots()) {
for (GuiSlot g : GuiSlot.getGuiSlots()) {
if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) { if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) {
if (this.checkSlot(g.getSlot())) { if (this.checkSlot(g.getSlot())) {
MineverseChat.getInstance().getServer().getConsoleSender() plugin.getServer().getConsoleSender()
.sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); .sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!"));
continue; continue;
} }
@ -125,13 +118,14 @@ public class VentureChatGui extends Command {
} }
} }
inv.setItem(0, skull);
inv.setItem(8, close); inv.setItem(8, close);
mcp.getPlayer().openInventory(inv); mcp.getPlayer().openInventory(inv);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private void openInventoryDiscord(MineverseChatPlayer mcp, ChatChannel channel, int hash) { 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 close = null;
ItemStack skull = null; ItemStack skull = null;
if (VersionHandler.is1_7()) { if (VersionHandler.is1_7()) {
@ -164,7 +158,7 @@ public class VentureChatGui extends Command {
for (GuiSlot g : GuiSlot.getGuiSlots()) { for (GuiSlot g : GuiSlot.getGuiSlots()) {
if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) { if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) {
if (this.checkSlot(g.getSlot())) { if (this.checkSlot(g.getSlot())) {
MineverseChat.getInstance().getServer().getConsoleSender() plugin.getServer().getConsoleSender()
.sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); .sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!"));
continue; continue;
} }

View File

@ -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;
}
}

View File

@ -13,10 +13,10 @@ import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.server.ServerCommandEvent; 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.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import me.clip.placeholderapi.PlaceholderAPI;
import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.alias.Alias; import mineverse.Aust1n46.chat.alias.Alias;
import mineverse.Aust1n46.chat.api.MineverseChatAPI; 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.channel.ChatChannel;
import mineverse.Aust1n46.chat.database.Database; import mineverse.Aust1n46.chat.database.Database;
import mineverse.Aust1n46.chat.gui.GuiSlot; import mineverse.Aust1n46.chat.gui.GuiSlot;
import mineverse.Aust1n46.chat.gui.ModerationGuiInventory;
import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.localization.LocalizedMessage;
import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler; import mineverse.Aust1n46.chat.versions.VersionHandler;
@ -137,19 +138,22 @@ public class CommandListener implements Listener {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void InventoryClick(InventoryClickEvent e) { public void InventoryClick(final InventoryClickEvent event) {
ItemStack item = e.getCurrentItem(); final Inventory inventory = event.getInventory();
if (item == null || !e.getView().getTitle().contains("VentureChat")) { 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; 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 (VersionHandler.is1_7()) {
if (item.getType() == Material.BEDROCK) { if (item.getType() == Material.BEDROCK) {
mcp.getPlayer().closeInventory(); mcp.getPlayer().closeInventory();
@ -159,14 +163,11 @@ public class CommandListener implements Listener {
mcp.getPlayer().closeInventory(); mcp.getPlayer().closeInventory();
} }
} }
for (GuiSlot g : GuiSlot.getGuiSlots()) { for (final GuiSlot g : GuiSlot.getGuiSlots()) {
if (g.getIcon() == item.getType() && g.getDurability() == item.getDurability() && g.getSlot() == e.getSlot()) { if (g.getIcon() == item.getType() && g.getDurability() == item.getDurability() && g.getSlot() == event.getSlot()) {
String command = g.getCommand().replace("{channel}", channel.getName()).replace("{hash}", hash + ""); String command = g.getCommand().replace("{channel}", channel.getName()).replace("{hash}", hash + "");
if (target != null) { if (target != null) {
command = command.replace("{player_name}", target.getName()); command = command.replace("{player_name}", target.getName());
if (target.isOnline()) {
command = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command));
}
} else { } else {
command = command.replace("{player_name}", "Discord_Message"); command = command.replace("{player_name}", "Discord_Message");
} }

View File

@ -62,7 +62,6 @@ public class PacketListenerLegacyChat extends PacketAdapter {
if(message == null) { if(message == null) {
return; return;
} }
int hash = message.hashCode(); mcp.addMessage(new ChatMessage(chat, message, coloredMessage));
mcp.addMessage(new ChatMessage(chat, message, coloredMessage, hash));
} }
} }

View File

@ -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));
}
}

View File

@ -523,6 +523,9 @@ public class Format {
public static String toColoredText(Object o, Class<?> c) { public static String toColoredText(Object o, Class<?> c) {
if (VersionHandler.is1_7()) { if (VersionHandler.is1_7()) {
return "\"extra\":[{\"text\":\"Hover to see original message is not currently supported in 1.7\",\"color\":\"red\"}]"; 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<Object> finalList = new ArrayList<>(); List<Object> finalList = new ArrayList<>();
StringBuilder stringbuilder = new StringBuilder(); StringBuilder stringbuilder = new StringBuilder();
@ -636,8 +639,7 @@ public class Format {
finalList.add(component); finalList.add(component);
} }
} }
} } else if (VersionHandler.is1_18() || VersionHandler.is1_19()){
else {
ArrayList<?> list = (ArrayList<?>) c.getMethod("b").invoke(o, new Object[0]); ArrayList<?> list = (ArrayList<?>) c.getMethod("b").invoke(o, new Object[0]);
for (Object component : list) { for (Object component : list) {
ArrayList<?> innerList = (ArrayList<?>) c.getMethod("b").invoke(component, new Object[0]); ArrayList<?> innerList = (ArrayList<?>) c.getMethod("b").invoke(component, new Object[0]);
@ -647,6 +649,8 @@ public class Format {
finalList.add(component); finalList.add(component);
} }
} }
} else {
((List<?>) c.getMethod("h").invoke(o)).forEach(finalList::add);
} }
} }