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