diff --git a/.classpath b/.classpath
index 41db0c1..88ce6fe 100644
--- a/.classpath
+++ b/.classpath
@@ -7,11 +7,12 @@
-
+
+
diff --git a/MineverseChat/bungee.yml b/MineverseChat/bungee.yml
index d8aa61b..490bfa1 100644
--- a/MineverseChat/bungee.yml
+++ b/MineverseChat/bungee.yml
@@ -1,4 +1,4 @@
name: VentureChat
main: mineverse.Aust1n46.chat.bungee.MineverseChatBungee
-version: 2.12.4
+version: 2.14.0
author: Aust1n46
\ No newline at end of file
diff --git a/MineverseChat/config.yml b/MineverseChat/config.yml
index bb53523..4b35369 100644
--- a/MineverseChat/config.yml
+++ b/MineverseChat/config.yml
@@ -193,7 +193,7 @@ venturegui:
durability: 0
text: '&cRemove Message'
permission: 'removemessage'
- command: '/removemessage {channel} {hash} true'
+ command: '/removemessage {hash} {channel} true'
slot: 7
guiicon: '&c [✓]'
diff --git a/MineverseChat/defaultconfig.yml b/MineverseChat/defaultconfig.yml
index c6c01ca..5c0fbc6 100644
--- a/MineverseChat/defaultconfig.yml
+++ b/MineverseChat/defaultconfig.yml
@@ -193,7 +193,7 @@ venturegui:
durability: 0
text: '&cRemove Message'
permission: 'removemessage'
- command: '/removemessage {hash} true'
+ command: '/removemessage {hash} {channel} true'
slot: 7
guiicon: '&c [✓]'
diff --git a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java
index 04e8a1c..88f81ac 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java
@@ -11,6 +11,7 @@ import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
@@ -30,7 +31,6 @@ import java.util.logging.Logger;
import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.permission.Permission;
-
import mineverse.Aust1n46.chat.irc.Bot;
import mineverse.Aust1n46.chat.irc.command.IRCCommandInfo;
//import mineverse.Aust1n46.chat.json.JsonButtonInfo;
@@ -407,12 +407,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
loginListener = new LoginListener(this, ccInfo);
pluginManager.registerEvents(loginListener, this);
this.registerPacketListeners();
- try {
- this.loadNMS();
- }
- catch(ClassNotFoundException e) {
- e.printStackTrace();
- }
+ this.loadNMS();
Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors"));
try {
// if(VersionHandler.is1_7_9()) cmap = V1_7_9.v1_7_9();
@@ -557,89 +552,58 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
this.packetListener = new PacketListener(this);
this.protocolManager.addPacketListener(this.packetListener);
}
+
+ public static String toPlainText(Object o, Class> c) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+ //System.out.println(o.getClass().getName());
+ //System.out.println(c.getName());
+ /*for(Method m : c.getDeclaredMethods()) {
+ System.out.println(m.getName());
+ System.out.println(m.getGenericReturnType().toString());
+ }*/
+ ArrayList> list = (ArrayList>) c.getMethod("a").invoke(o, new Object[0]);
+ //System.out.println(list);
+ //System.out.println(list.get(0).getClass().getName());
+ /*for(Method m : list.get(0).getClass().getDeclaredMethods()) {
+ System.out.println(m.getName());
+ System.out.println(m.getGenericReturnType().toString());
+ }*/
+ StringBuilder stringbuilder = new StringBuilder();
+ for(Object component : list) {
+ if(VersionHandler.is1_7_10()) {
+ stringbuilder.append((String) component.getClass().getMethod("e").invoke(component));
+ }
+ else {
+ stringbuilder.append((String) component.getClass().getMethod("getText").invoke(component));
+ }
+ }
+ //System.out.println("my string");
+ //System.out.println("my string");
+ //System.out.println("my string");
+ //System.out.println("my string");
+ //System.out.println("my string");
+ //System.out.println(stringbuilder.toString());
+ return stringbuilder.toString();
+ }
- private void loadNMS() throws ClassNotFoundException {
- /*
- * if(VersionHandler.is1_7_10()) { try { MineverseChat.posField =
- * MinecraftReflection.getMinecraftClass("PacketPlayOutChat").
- * getDeclaredField("b"); MineverseChat.posField.setAccessible(true); }
- * catch(NoSuchFieldException | SecurityException
- * localNoSuchFieldException) {
- * localNoSuchFieldException.printStackTrace(); } try {
- * MineverseChat.messageMethod =
- * MinecraftReflection.getMinecraftClass("IChatBaseComponent").
- * getDeclaredMethod("c", new Class[0]);
- * MineverseChat.messageMethod.setAccessible(true); }
- * catch(SecurityException | NoSuchMethodException e) {
- * e.printStackTrace(); } return; }
- */
- if(VersionHandler.is1_8() || VersionHandler.is1_7_10()) {
- try {
- MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b");
- MineverseChat.posField.setAccessible(true);
- }
- catch(NoSuchFieldException | SecurityException localNoSuchFieldException) {
- localNoSuchFieldException.printStackTrace();
- }
- try {
- MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("IChatBaseComponent").getDeclaredMethod("c", new Class[0]);
- MineverseChat.messageMethod.setAccessible(true);
- }
- catch(SecurityException | NoSuchMethodException e) {
- e.printStackTrace();
- }
+ private void loadNMS() {
+ try {
+ MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b");
+ MineverseChat.posField.setAccessible(true);
+
+
+ //MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethod("getString");
+ //MineverseChat.messageMethod.setAccessible(true);
}
- else if(!VersionHandler.is1_13()){
- try {
- MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b");
- MineverseChat.posField.setAccessible(true);
- }
- catch(NoSuchFieldException | SecurityException localNoSuchFieldException) {
- localNoSuchFieldException.printStackTrace();
- }
- try {
- MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethod("toPlainText", new Class[0]);
- MineverseChat.messageMethod.setAccessible(true);
- }
- catch(SecurityException | NoSuchMethodException e) {
- e.printStackTrace();
- }
- if(!VersionHandler.is1_9() && !VersionHandler.is1_10() && !VersionHandler.is1_11()) {
- try {
- MineverseChat.chatMessageType = getNMSClass("ChatMessageType");
- }
- catch(Exception e) {
- e.printStackTrace();
- }
- }
+ catch(Exception e) {
+ e.printStackTrace();
}
- else {
+ if(!VersionHandler.is1_7_10() && !VersionHandler.is1_8() && !VersionHandler.is1_9() && !VersionHandler.is1_10() && !VersionHandler.is1_11()) {
try {
- MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b");
- MineverseChat.posField.setAccessible(true);
+ MineverseChat.chatMessageType = getNMSClass("ChatMessageType");
}
- catch(NoSuchFieldException | SecurityException localNoSuchFieldException) {
- localNoSuchFieldException.printStackTrace();
- }
- try {
- /*for(Method m : MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethods()) {
- System.out.println(m.getName());
- }*/
-
- MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethod("getString", new Class[0]);
- MineverseChat.messageMethod.setAccessible(true);
- }
- catch(SecurityException | NoSuchMethodException e) {
+ catch(Exception e) {
e.printStackTrace();
}
- if(!VersionHandler.is1_9() && !VersionHandler.is1_10() && !VersionHandler.is1_11()) {
- try {
- MineverseChat.chatMessageType = getNMSClass("ChatMessageType");
- }
- catch(Exception e) {
- e.printStackTrace();
- }
- }
}
}
@@ -821,30 +785,32 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
String f = msgin.readUTF();
String c = msgin.readUTF();
String json = msgin.readUTF();
- MineverseChat.lastChatMessage = new ChatMessage(playerName, lastMessage, lastMessage.hashCode(), f, c, chatchannel);
- lastJson = json;
- Bukkit.getConsoleSender().sendMessage(chat);
- MineverseChatPlayer sender = MineverseChatAPI.getMineverseChatPlayer(playerName);
- for(MineverseChatPlayer p : MineverseChat.onlinePlayers) {
- //System.out.println(p.getName() + " received chat message");
- if(p.isOnline() && p.getListening().contains(ccInfo.getChannelInfo(chatchannel).getName())) {
- if(!p.getBungeeToggle() && MineverseChatAPI.getOnlineMineverseChatPlayer(playerName) == null) {
- continue;
- }
- if(plugin.getConfig().getBoolean("ignorechat", false)) {
- // System.out.println(p.getIgnores());
- if(sender == null) {
- // System.out.println("null sender");
- p.getPlayer().sendMessage(chat);
+ if(ccInfo.isChannel(chatchannel) && ccInfo.getChannelInfo(chatchannel).getBungee()) {
+ MineverseChat.lastChatMessage = new ChatMessage(playerName, lastMessage, lastMessage.hashCode(), f, c, chatchannel);
+ lastJson = json;
+ Bukkit.getConsoleSender().sendMessage(chat);
+ MineverseChatPlayer sender = MineverseChatAPI.getMineverseChatPlayer(playerName);
+ for(MineverseChatPlayer p : MineverseChat.onlinePlayers) {
+ //System.out.println(p.getName() + " received chat message");
+ if(p.isOnline() && p.getListening().contains(ccInfo.getChannelInfo(chatchannel).getName())) {
+ if(!p.getBungeeToggle() && MineverseChatAPI.getOnlineMineverseChatPlayer(playerName) == null) {
continue;
}
- if(!p.getIgnores().contains(sender.getUUID())) {
- // System.out.println("Chat sent");
- p.getPlayer().sendMessage(chat);
+ if(plugin.getConfig().getBoolean("ignorechat", false)) {
+ // System.out.println(p.getIgnores());
+ if(sender == null) {
+ // System.out.println("null sender");
+ p.getPlayer().sendMessage(chat);
+ continue;
+ }
+ if(!p.getIgnores().contains(sender.getUUID())) {
+ // System.out.println("Chat sent");
+ p.getPlayer().sendMessage(chat);
+ }
+ continue;
}
- continue;
+ p.getPlayer().sendMessage(chat);
}
- p.getPlayer().sendMessage(chat);
}
}
}
@@ -939,7 +905,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
UUID sender = UUID.fromString(msgin.readUTF());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(stream);
- if(p == null || !p.isOnline()) {
+ if(!plugin.getConfig().getBoolean("bungeecordmessaging", true) || p == null || !p.isOnline()) {
out.writeUTF("Ignore");
out.writeUTF("Offline");
out.writeUTF(server);
@@ -995,7 +961,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
if(p != null) {
// System.out.println(p.isOnline() + " online");
}
- if(p == null || !p.isOnline()) {
+ if(!plugin.getConfig().getBoolean("bungeecordmessaging", true) || p == null || !p.isOnline()) {
out.writeUTF("Message");
out.writeUTF("Offline");
out.writeUTF(server);
diff --git a/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java
index 08978e8..cde2fab 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java
@@ -136,7 +136,7 @@ public class MineverseChatBungee extends Plugin implements Listener {
@EventHandler
public void onPluginMessage(PluginMessageEvent ev) {
//System.out.println(ev.getTag() + "," + ev.getSender().toString() + "," + (ev.getSender() instanceof Server));
- if(!ev.getTag().equals("venturechat:")) {
+ if(!ev.getTag().equals("venturechat:") && !ev.getTag().contains("viaversion:")) {
return;
}
if(!(ev.getSender() instanceof Server)) {
diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java
index 47390a8..2dc8e6a 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java
@@ -50,13 +50,13 @@ public class Removemessage extends MineverseCommand {
sender.sendMessage(ChatColor.RED + "Invalid hashcode.");
return;
}
- if(args.length > 1 && Boolean.parseBoolean(args[1]) && sender instanceof Player) {
+ if(args.length > 1 && MineverseChat.ccInfo.isChannel(args[1]) && MineverseChat.ccInfo.getChannelInfo(args[1]).getBungee() && Boolean.parseBoolean(args[2]) && sender instanceof Player) {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(byteOutStream);
try {
out.writeUTF("RemoveMessage");
out.writeUTF(String.valueOf(hash));
- ((Player) sender).sendPluginMessage(plugin, "VentureChat", byteOutStream.toByteArray());
+ ((Player) sender).sendPluginMessage(plugin, "venturechat:", byteOutStream.toByteArray());
out.close();
}
catch(Exception e) {
@@ -75,6 +75,7 @@ public class Removemessage extends MineverseCommand {
playerPackets.add(Removemessage.this.emptyLinePacketContainer);
}
for(ChatMessage message : messages) {
+ //System.out.println(message.getMessage() + " remover test");
if(message.getHash() == hash) {
WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer();
message.setComponent(removedComponent);
@@ -139,6 +140,7 @@ public class Removemessage extends MineverseCommand {
resend = true;
continue;
}*/
+ //System.out.println(message.getComponent().getJson());
playerPackets.add(Removemessage.this.createPacketPlayOutChat(message.getComponent()));
}
if(resend) {
diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java
index 13c2e38..63ab964 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java
@@ -26,6 +26,7 @@ import mineverse.Aust1n46.chat.command.MineverseCommand;
import mineverse.Aust1n46.chat.gui.GuiSlot;
import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.utilities.UUIDFetcher;
+import mineverse.Aust1n46.chat.versions.VersionHandler;
public class VentureChatGui extends MineverseCommand {
private MineverseChat plugin;
@@ -84,7 +85,13 @@ public class VentureChatGui extends MineverseCommand {
private void openInventory(MineverseChatPlayer mcp, MineverseChatPlayer target, ChatChannel channel, int hash) {
Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI");
- ItemStack close = new ItemStack(Material.BARRIER);
+ ItemStack close = null;
+ if(VersionHandler.is1_7_10()) {
+ close = new ItemStack(Material.BEDROCK);
+ }
+ else {
+ close = new ItemStack(Material.BARRIER);
+ }
ItemMeta closeMeta = close.getItemMeta();
closeMeta.setDisplayName("§oClose GUI");
close.setItemMeta(closeMeta);
diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java
index 8cf9861..48a502a 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/ChatListener.java
@@ -2,6 +2,7 @@ package mineverse.Aust1n46.chat.listeners;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
+import java.lang.reflect.Method;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
@@ -21,6 +22,7 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.messaging.PluginMessageRecipient;
import org.bukkit.util.EulerAngle;
import com.massivecraft.factions.entity.MPlayer;
@@ -734,6 +736,14 @@ public class ChatListener implements Listener {
System.out.println(out.size() + " bytes size with json");
}
mcp.getPlayer().sendPluginMessage(plugin, "venturechat:", byteOutStream.toByteArray());
+
+ //PluginMessageRecipient test = (PluginMessageRecipient) mcp.getPlayer();
+ //System.out.println("Listening plugin channels?");
+ //System.out.println(test.getListeningPluginChannels());
+ //System.out.println("PluginMessageRecipient methods?");
+ //for(Method m : test.getClass().getMethods()) {
+ //System.out.println(m.getName());
+ //}
out.close();
}
catch(Exception e) {
diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java
index 6e20a02..ea869e2 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/CommandListener.java
@@ -17,6 +17,7 @@ import mineverse.Aust1n46.chat.gui.GuiSlot;
import mineverse.Aust1n46.chat.irc.Bot;
import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.utilities.FormatTags;
+import mineverse.Aust1n46.chat.versions.VersionHandler;
//import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -274,8 +275,15 @@ public class CommandListener implements CommandExecutor, Listener {
SkullMeta skullMeta = (SkullMeta) skull.getItemMeta();
ChatChannel channel = MineverseChat.ccInfo.getChannelInfo(ChatColor.stripColor(skullMeta.getLore().get(0)).replace("Channel: ", ""));
int hash = Integer.parseInt(ChatColor.stripColor(skullMeta.getLore().get(1).replace("Hash: ", "")));
- if(item.getType() == Material.BARRIER) {
- mcp.getPlayer().closeInventory();
+ if(VersionHandler.is1_7_10()) {
+ if(item.getType() == Material.BEDROCK) {
+ mcp.getPlayer().closeInventory();
+ }
+ }
+ else {
+ if(item.getType() == Material.BARRIER) {
+ mcp.getPlayer().closeInventory();
+ }
}
for(GuiSlot g : MineverseChat.gsInfo.getGuiSlots()) {
if(g.getIcon() == item.getType() && g.getDurability() == item.getDurability() && g.getSlot() == e.getSlot()) {
diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java
index a147d7b..af24fec 100644
--- a/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java
+++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java
@@ -101,13 +101,17 @@ public class PacketListener extends PacketAdapter {
try {
//System.out.println(chat.getJson());
//message = TextComponent.toPlainText(new TextComponent(chat.getJson()));
- message = (String) MineverseChat.messageMethod.invoke(chat.getHandle(), new Object[0]);
+ //message = (String) MineverseChat.messageMethod.invoke(chat.getHandle(), new Object[0]);
//System.out.println(MineverseChat.lastChatMessage.getMessage());
+
+ message = MineverseChat.toPlainText(chat.getHandle(), chat.getHandleType());
+ //System.out.println(chat.getJson());
+ //System.out.println(message + " message");
hash = message != null ? message.hashCode() : -1;
}
catch(Exception ex) {
message = TextComponent.toPlainText(new TextComponent(chat.getJson()));
- System.out.println(message);
+ //System.out.println(message);
//ex.printStackTrace();
}
ChatMessage lastChatMessage = MineverseChat.lastChatMessage;
@@ -128,8 +132,11 @@ public class PacketListener extends PacketAdapter {
}*/
if(mcp.getPlayer().hasPermission("venturechat.gui")) {
json = json.substring(0, json.length() - 1);
- json += "," + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guiicon")), ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + lastChatMessage.getSender() + " " + lastChatMessage.getChannel() + " " + lastChatMessage.getHash() +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guitext"))) + "]}}") + "]}]";
+ json += "," + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guiicon")), ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + lastChatMessage.getSender() + " " + lastChatMessage.getChannel() + " " + lastChatMessage.getHash() +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guitext"))) + "]}}") + "]";
+ //json += ",{\"text\":\"" + "json test" + "\"}]";
}
+ //System.out.println("," + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guiicon")), ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + lastChatMessage.getSender() + " " + lastChatMessage.getChannel() + " " + lastChatMessage.getHash() +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guitext"))) + "]}}") + "]}]");
+ //System.out.println("\nline break\n");
//System.out.println(json);
chat.setJson(json);
event.getPacket().getChatComponents().write(0, chat);
diff --git a/MineverseChat/plugin.yml b/MineverseChat/plugin.yml
index 5ef1508..4cfade9 100644
--- a/MineverseChat/plugin.yml
+++ b/MineverseChat/plugin.yml
@@ -1,5 +1,5 @@
name: VentureChat
-version: 2.12.4
+version: 2.14.0
main: mineverse.Aust1n46.chat.MineverseChat
depend: [Vault, ProtocolLib, PlaceholderAPI]
softdepend: [Towny, Factions, Heroes]