diff --git a/.settings/.gitignore b/.settings/.gitignore
index f80ee1c..3b1537c 100644
--- a/.settings/.gitignore
+++ b/.settings/.gitignore
@@ -1,3 +1 @@
/org.eclipse.jdt.core.prefs
-/org.eclipse.core.resources.prefs
-/org.eclipse.m2e.core.prefs
diff --git a/pom.xml b/pom.xml
index 676fbb5..5e888bc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
mineverse.Aust1n46.chat
VentureChat
- 3.2.3
+ 3.3.0
https://bitbucket.org/Aust1n46/venturechat/src/master
https://bitbucket.org/Aust1n46/venturechat/src/master
diff --git a/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java b/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java
index df735d5..f9d8b99 100644
--- a/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java
+++ b/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java
@@ -1,13 +1,23 @@
package mineverse.Aust1n46.chat.command;
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.bukkit.Server;
import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
+import org.bukkit.command.PluginCommand;
+import org.bukkit.command.SimpleCommandMap;
import org.bukkit.command.TabExecutor;
+import org.bukkit.configuration.ConfigurationSection;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.plugin.Plugin;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.command.chat.Broadcast;
@@ -38,8 +48,8 @@ import mineverse.Aust1n46.chat.command.chat.Setchannel;
import mineverse.Aust1n46.chat.command.chat.Setchannelall;
import mineverse.Aust1n46.chat.command.chat.VentureChatGui;
import mineverse.Aust1n46.chat.command.chat.Venturechat;
-import mineverse.Aust1n46.chat.command.message.IgnoreCommandExecutor;
-import mineverse.Aust1n46.chat.command.message.MessageCommandExecutor;
+import mineverse.Aust1n46.chat.command.message.Ignore;
+import mineverse.Aust1n46.chat.command.message.Message;
import mineverse.Aust1n46.chat.command.message.MessageToggle;
import mineverse.Aust1n46.chat.command.message.Notifications;
import mineverse.Aust1n46.chat.command.message.Reply;
@@ -48,18 +58,24 @@ import mineverse.Aust1n46.chat.command.mute.Mute;
import mineverse.Aust1n46.chat.command.mute.Muteall;
import mineverse.Aust1n46.chat.command.mute.Unmute;
import mineverse.Aust1n46.chat.command.mute.Unmuteall;
+import mineverse.Aust1n46.chat.utilities.Format;
/**
* Class that initializes and executes the plugin's commands.
*/
public class VentureCommandExecutor implements TabExecutor {
- private static Map commands = new HashMap();
- private static MineverseChat plugin = MineverseChat.getInstance();
+ private static final String VERSION = "3.3.0";
+ private static final Map commands = new HashMap<>();
+ private static final MineverseChat plugin = MineverseChat.getInstance();
+
private static VentureCommandExecutor commandExecutor;
+ private static Map knownCommands;
+ private static Constructor pluginCommandConstructor;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] parameters) {
commands.get(command.getName()).execute(sender, command.getName(), parameters);
+ command.execute(sender, label, parameters);
return true;
}
@@ -67,12 +83,46 @@ public class VentureCommandExecutor implements TabExecutor {
public List onTabComplete(CommandSender sender, Command command, String label, String[] args) {
return commands.get(command.getName()).onTabComplete(sender, command, label, args);
}
-
+
+ @SuppressWarnings("unchecked")
public static void initialize() {
- commandExecutor = new VentureCommandExecutor();
+ final Server server = plugin.getServer();
+ final File commandsFile = new File(plugin.getDataFolder().getAbsolutePath(), "commands.yml");
+ if (!commandsFile.isFile()) {
+ plugin.saveResource("commands.yml", true);
+ }
+ FileConfiguration commandsFileConfiguration = YamlConfiguration.loadConfiguration(commandsFile);
+ final String fileVersion = commandsFileConfiguration.getString("Version", "null");
+ if (!fileVersion.equals(VERSION)) {
+ server.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Version Change Detected! Saving Old commands.yml and Generating Latest File"));
+ commandsFile.renameTo(new File(plugin.getDataFolder().getAbsolutePath(), "commands_old_" + fileVersion + ".yml"));
+ plugin.saveResource("commands.yml", true);
+ commandsFileConfiguration = YamlConfiguration.loadConfiguration(commandsFile);
+ }
+ try {
+ knownCommands = server.getCommandMap().getKnownCommands(); // Paper :)
+ }
+ // Spigot :(
+ catch (final NoSuchMethodError error) {
+ try {
+ final Field commandMapField = server.getClass().getDeclaredField("commandMap");
+ commandMapField.setAccessible(true);
+ final SimpleCommandMap simpleCommandMap = (SimpleCommandMap) commandMapField.get(server);
+ final Field knownCommandsField = SimpleCommandMap.class.getDeclaredField("knownCommands");
+ knownCommandsField.setAccessible(true);
+ knownCommands = (Map) knownCommandsField.get(simpleCommandMap);
+ } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ }
+ try {
+ pluginCommandConstructor = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class);
+ pluginCommandConstructor.setAccessible(true);
+ } catch (NoSuchMethodException | SecurityException e) {
+ e.printStackTrace();
+ }
commands.put("broadcast", new Broadcast());
commands.put("channel", new Channel());
- commands.put("join", new Channel());
commands.put("channelinfo", new Channelinfo());
commands.put("chatinfo", new Chatinfo());
commands.put("chatreload", new Chatreload());
@@ -102,39 +152,53 @@ public class VentureCommandExecutor implements TabExecutor {
commands.put("venturechatgui", new VentureChatGui());
commands.put("messagetoggle", new MessageToggle());
commands.put("bungeetoggle", new BungeeToggle());
- for(String command : commands.keySet()) {
+ commands.put("mute", new Mute());
+ commands.put("muteall", new Muteall());
+ commands.put("unmute", new Unmute());
+ commands.put("unmuteall", new Unmuteall());
+ commands.put("reply", new Reply());
+ commands.put("message", new Message());
+ commands.put("ignore", new Ignore());
+ final ConfigurationSection commandsSection = commandsFileConfiguration.getConfigurationSection("commands");
+ for (final String commandLabel : commandsSection.getKeys(false)) {
+ final ConfigurationSection commandSection = commandsSection.getConfigurationSection(commandLabel);
+ final boolean isEnabled = commandSection.getBoolean("enabled", true);
+ if (!isEnabled) {
+ commands.remove(commandLabel);
+ } else {
+ final VentureCommand command = commands.get(commandLabel);
+ if (command != null) {
+ final List aliases = commandSection.getStringList("aliases");
+ for (final String alias : aliases) {
+ commands.put(alias, command);
+ }
+ commands.put("venturechat:" + commandLabel, command);
+ }
+ }
+ }
+ commandExecutor = new VentureCommandExecutor();
+ // Initial registration is required to ensure commands are recognized by the
+ // server after enabling every plugin
+ for (final String command : commands.keySet()) {
registerCommand(command, commandExecutor);
}
-
- plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
- VentureCommand reply = new Reply();
- commands.put("reply", reply);
- commands.put("r", reply);
- registerCommand("reply", commandExecutor);
- registerCommand("r", commandExecutor);
-
- commands.put("mute", new Mute());
- commands.put("muteall", new Muteall());
- commands.put("unmute", new Unmute());
- commands.put("unmuteall", new Unmuteall());
- registerCommand("mute", commandExecutor);
- registerCommand("muteall", commandExecutor);
- registerCommand("unmute", commandExecutor);
- registerCommand("unmuteall", commandExecutor);
-
- MessageCommandExecutor messageCommandExecutor = new MessageCommandExecutor();
- registerCommand("message", messageCommandExecutor);
- registerCommand("msg", messageCommandExecutor);
- registerCommand("tell", messageCommandExecutor);
- registerCommand("whisper", messageCommandExecutor);
-
- registerCommand("ignore", new IgnoreCommandExecutor());
- }, 0);
+ // Forcibly re-register enabled VentureChat commands on a delay to ensure they
+ // have priority
+ server.getScheduler().runTaskLater(plugin, () -> {
+ for (final String command : commands.keySet()) {
+ registerCommand(command, commandExecutor);
+ }
+ }, 10);
}
-
- private static void registerCommand(String command, CommandExecutor commandExecutor) {
- if(plugin.getCommand(command) != null) {
- plugin.getCommand(command).setExecutor(commandExecutor);
+
+ private static void registerCommand(String command, TabExecutor tabExecutor) {
+ try {
+ final PluginCommand pluginCommand = pluginCommandConstructor.newInstance(command, plugin);
+ pluginCommand.setExecutor(tabExecutor);
+ pluginCommand.setTabCompleter(tabExecutor);
+ knownCommands.put(command, pluginCommand);
+ } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+ e.printStackTrace();
}
}
}
diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/IgnoreCommandExecutor.java b/src/main/java/mineverse/Aust1n46/chat/command/message/Ignore.java
similarity index 90%
rename from src/main/java/mineverse/Aust1n46/chat/command/message/IgnoreCommandExecutor.java
rename to src/main/java/mineverse/Aust1n46/chat/command/message/Ignore.java
index ed671c4..38c4e71 100644
--- a/src/main/java/mineverse/Aust1n46/chat/command/message/IgnoreCommandExecutor.java
+++ b/src/main/java/mineverse/Aust1n46/chat/command/message/Ignore.java
@@ -10,28 +10,28 @@ import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
+import mineverse.Aust1n46.chat.command.VentureCommand;
import mineverse.Aust1n46.chat.localization.LocalizedMessage;
-public class IgnoreCommandExecutor implements TabExecutor {
+public class Ignore implements VentureCommand {
private MineverseChat plugin = MineverseChat.getInstance();
@Override
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ public void execute(CommandSender sender, String command, String[] args) {
if (!(sender instanceof Player)) {
plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
- return true;
+ return;
}
MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
if (args.length == 0) {
mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS_IGNORE.toString());
- return true;
+ return;
}
if (args[0].equalsIgnoreCase("list")) {
String ignoreList = "";
@@ -47,11 +47,11 @@ public class IgnoreCommandExecutor implements TabExecutor {
if (ignoreList.length() > 0) {
mcp.getPlayer().sendMessage(ignoreList.substring(0, ignoreList.length() - 2));
}
- return true;
+ return;
}
if (mcp.getName().equalsIgnoreCase(args[0])) {
mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_YOURSELF.toString());
- return true;
+ return;
}
if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
@@ -66,32 +66,32 @@ public class IgnoreCommandExecutor implements TabExecutor {
} catch (Exception e) {
e.printStackTrace();
}
- return true;
+ return;
}
MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]);
if (player == null) {
mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString()
.replace("{args}", args[0]));
- return true;
+ return;
}
if (mcp.getIgnores().contains(player.getUUID())) {
mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_OFF.toString()
.replace("{player}", player.getName()));
mcp.removeIgnore(player.getUUID());
MineverseChat.synchronize(mcp, true);
- return true;
+ return;
}
if (player.getPlayer().hasPermission("venturechat.ignore.bypass")) {
mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_CANT.toString()
.replace("{player}", player.getName()));
- return true;
+ return;
}
mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_ON.toString()
.replace("{player}", player.getName()));
mcp.addIgnore(player.getUUID());
MineverseChat.synchronize(mcp, true);
- return true;
+ return;
}
@Override
diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java b/src/main/java/mineverse/Aust1n46/chat/command/message/Message.java
similarity index 95%
rename from src/main/java/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java
rename to src/main/java/mineverse/Aust1n46/chat/command/message/Message.java
index 08cf5e6..531a42a 100644
--- a/src/main/java/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java
+++ b/src/main/java/mineverse/Aust1n46/chat/command/message/Message.java
@@ -8,7 +8,6 @@ import java.util.List;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
@@ -16,52 +15,53 @@ import me.clip.placeholderapi.PlaceholderAPI;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
+import mineverse.Aust1n46.chat.command.VentureCommand;
import mineverse.Aust1n46.chat.localization.LocalizedMessage;
import mineverse.Aust1n46.chat.utilities.Format;
-public class MessageCommandExecutor implements TabExecutor {
+public class Message implements VentureCommand {
private MineverseChat plugin = MineverseChat.getInstance();
@Override
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ public void execute(CommandSender sender, String command, String[] args) {
if (!(sender instanceof Player)) {
plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString());
- return true;
+ return;
}
MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender);
if (args.length == 0) {
mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString()
- .replace("{command}", "/" + command.getName())
+ .replace("{command}", "/" + command)
.replace("{args}", "[player] [message]"));
- return true;
+ return;
}
if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) {
- sendBungeeCordMessage(mcp, command.getName(), args);
- return true;
+ sendBungeeCordMessage(mcp, command, args);
+ return;
}
MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]);
if (player == null) {
mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString()
.replace("{args}", args[0]));
- return true;
+ return;
}
if (!mcp.getPlayer().canSee(player.getPlayer())) {
mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString()
.replace("{args}", args[0]));
- return true;
+ return;
}
if (player.getIgnores().contains(mcp.getUUID())) {
mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString()
.replace("{player}", player.getName()));
- return true;
+ return;
}
if (!player.getMessageToggle()) {
mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString()
.replace("{player}", player.getName()));
- return true;
+ return;
}
if (args.length >= 2) {
@@ -150,7 +150,7 @@ public class MessageCommandExecutor implements TabExecutor {
}
}
}
- return true;
+ return;
}
@Override
diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml
new file mode 100644
index 0000000..fe06b31
--- /dev/null
+++ b/src/main/resources/commands.yml
@@ -0,0 +1,119 @@
+Version: 3.3.0
+# Restart server after editing this file!!!
+# Restart server after editing this file!!!
+# Restart server after editing this file!!!
+commands:
+ message:
+ aliases: [vmessage,msg,tell,whisper,pm]
+ enabled: true
+ ignore:
+ aliases: [vignore]
+ enabled: true
+ reply:
+ aliases: [vreply,r]
+ enabled: true
+ spy:
+ aliases: [vspy]
+ enabled: true
+ mute:
+ aliases: [mp,vmute]
+ enabled: true
+ unmute:
+ aliases: [ump,vunmute]
+ enabled: true
+ muteall:
+ aliases: [mpa,vmuteall]
+ enabled: true
+ unmuteall:
+ aliases: [umpa,vunmuteall]
+ enabled: true
+ channel:
+ aliases: [ch,vchannel,join]
+ enabled: true
+ listen:
+ aliases: [lis,vlisten]
+ enabled: true
+ leave:
+ aliases: [lev,vleave]
+ enabled: true
+ chlist:
+ aliases: [chl,vchlist]
+ enabled: true
+ chwho:
+ aliases: [chw,vchwho]
+ enabled: true
+ setchannel:
+ aliases: [sc,vsetchannel]
+ enabled: true
+ kickchannel:
+ aliases: [kc,vkickchannel]
+ enabled: true
+ kickchannelall:
+ aliases: [kca,vkickchannelall]
+ enabled: true
+ setchannelall:
+ aliases: [sca,vsetchannelall]
+ enabled: true
+ force:
+ aliases: [for,vforce]
+ enabled: true
+ forceall:
+ aliases: [fora,vforceall]
+ enabled: true
+ chatreload:
+ aliases: [cr,vchatreload]
+ enabled: true
+ commandspy:
+ aliases: [comspy,vcommandspy]
+ enabled: true
+ chatinfo:
+ aliases: [ci,vchatinfo]
+ enabled: true
+ channelinfo:
+ aliases: [chi,vchannelinfo]
+ enabled: true
+ venturechat:
+ aliases: [vc]
+ enabled: true
+ me:
+ aliases: [vme]
+ enabled: true
+ filter:
+ aliases: [fil,vfilter]
+ enabled: true
+ broadcast:
+ aliases: [bc,vbroadcast]
+ enabled: true
+ commandblock:
+ aliases: [cb,vcommandblock]
+ enabled: true
+ party:
+ aliases: [p,chatparty,cp,vparty]
+ enabled: true
+ clearchat:
+ aliases: [cc,vclearchat]
+ enabled: true
+ notifications:
+ aliases: [notify,vnotify]
+ enabled: true
+ removemessage:
+ aliases: [rm,vremovemessage]
+ enabled: true
+ rangedspy:
+ aliases: [rspy,vrangedspy]
+ enabled: true
+ venturechatgui:
+ aliases: [vchatgui]
+ enabled: true
+ messagetoggle:
+ aliases: [mtoggle,vmessagetoggle]
+ enabled: true
+ bungeetoggle:
+ aliases: [btoggle,vbungeetoggle]
+ enabled: true
+ config:
+ aliases: [vconfig]
+ enabled: false
+ edit:
+ aliases: [vedit]
+ enabled: false
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 583d560..e552819 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -7,224 +7,3 @@ softdepend: [Towny, Factions, EssentialsDiscord]
author: Aust1n46
website: https://bitbucket.org/Aust1n46/venturechat/
description: #1 Channels Chat plugin! Spigot + Bungee. Supports PlaceholderAPI + JSON formatting. Moderation GUI!
-commands:
- mute:
- usage: /mute [playername] [channel]
- aliases: [mp,vmute]
- description: Mutes player in a channel so they cannot talk.
- permission-message: You don't have
- unmute:
- usage: /unmute [playername] [channel]
- aliases: [ump,vunmute]
- description: Unmutes player in a channel so they can talk again.
- permission-message: You don't have
- msg:
- usage: /msg [playername] [msg]
- aliases: [vmsg]
- description: Send a message to a player
- permission-message: You don't have
- tell:
- usage: /tell [playername] [msg]
- aliases: [vtell]
- description: Send a message to a player
- permission-message: You don't have
- whisper:
- usage: /whisper [playername] [msg]
- aliases: [vwhisper,w]
- description: Send a message to a player
- permission-message: You don't have
- message:
- usage: /message [playername] [msg]
- aliases: [vmessage,pm]
- description: Send a message to a player
- permission-message: You don't have
- ignore:
- usage: /ignore [playername] or /ignore ? for more information
- aliases: [vignore]
- description: This allows you to prevent a player from sending you a tell /ignore list to see who you have ignored
- permission-message: You don't have
- channel:
- usage: /channel [channelname]
- aliases: [ch,vchannel]
- description: Allows players to add the ability to listen to the channel
- permission-message: You don't have
- leave:
- usage: /leave [channelname]
- aliases: [lev,vleave]
- description: Allows players to leave listening to a channel
- permission-message: You don't have
- join:
- usage: /join [channelname]
- aliases: [vjoin]
- description: Allows players to join a channel
- permission-message: You don't have
- chlist:
- usage: /chlist
- aliases: [chl,vchlist]
- description: Allows players to see a listing of available channels
- permission-message: You don't have
- chwho:
- usage: /chwho [channelname]
- aliases: [chw,vchwho]
- description: Allows players to see a listing of who is listening on a channel
- permission-message: You don't have
- setchannel:
- usage: /setchannel [playername] [channel]
- aliases: [sc,vsetchannel]
- description: Sets a players channel
- permission-message: You don't have
- kickchannel:
- usage: /kickchannel [playername] [channel]
- aliases: [kc,vkickchannel]
- description: Kicks a player out of a channel
- permission-message: You don't have
- muteall:
- usage: /muteall [playername]
- aliases: [mpa,vmuteall]
- description: Mute a player in all channels
- permission-message: You don't have
- unmuteall:
- usage: /unmuteall [playername]
- aliases: [umpa,vunmuteall]
- description: Unmute a player in all channels
- permission-message: You don't have
- kickchannelall:
- usage: /kickchannelall [playername]
- aliases: [kca,vkickchannelall]
- description: Kick a player from all channels
- permission-message: You don't have
- setchannelall:
- usage: /setchannelall [playername]
- aliases: [sca,vsetchannelall]
- description: Set a player into all channels
- permission-message: You don't have
- force:
- usage: /force [playername] [message]
- aliases: [for,vforce]
- description: Force a player to chat or execute a command
- permission-message: You don't have
- forceall:
- usage: /forceall [message]
- aliases: [fora,vforceall]
- description: Force all players to chat or execute a command
- permission-message: You don't have
- listen:
- usage: /listen [channel]
- aliases: [lis,vlisten]
- description: Listen to a channel without setting it as the one your chatting in
- permission-message: You don't have
- chatreload:
- usage: /chatreload
- aliases: [cr,vchatreload]
- description: Reload the config file
- permission-message: You don't have
- reply:
- usage: /reply [msg]
- aliases: [vreply]
- description: Reply to a message
- permission-message: You don't have
- r:
- usage: /r [msg]
- aliases: []
- description: Reply to a message
- permission-message: You don't have
- spy:
- usage: /spy
- aliases: [vspy]
- description: Spy on tells
- permission-message: You don't have
- commandspy:
- usage: /commandspy
- aliases: [comspy,vcommandspy]
- description: Spy on commands
- permission-message: You don't have
- chatinfo:
- usage: /chatinfo
- aliases: [ci,vchatinfo]
- description: Check a players chat info
- permission-message: You don't have
- channelinfo:
- usage: /channelinfo
- aliases: [chi,vchannelinfo]
- description: Check a channels info
- permission-message: You don't have
- venturechat:
- usage: /venturechat
- aliases: [vc]
- description: Check plugin information
- permission-message: You don't have
- me:
- usage: /me
- aliases: [vme]
- description: Send an emote
- permission-message: You don't have
- filter:
- usage: /filter
- aliases: [fil,vfilter]
- description: Toggle filter on and off
- permission-message: You don't have
- broadcast:
- usage: /broadcast [msg]
- aliases: [bc,vbroadcast]
- description: Broadcast a message
- permission-message: You don't have
- commandblock:
- usage: /commandblock [player] [command]
- aliases: [cb,vcommandblock]
- description: Toggle a player blocked from entering a command
- permission-message: You don't have
- party:
- usage: /party help
- aliases: [p,chatparty,cp,vparty]
- description: Party commands
- permission-message: You don't have
- config:
- usage: /config help
- aliases: [vconfig]
- description: Edit commands
- permission-message: You don't have
- clearchat:
- usage: /clearchat
- aliases: [cc,vclearchat]
- description: Clear every players chat
- permission-message: You don't have
- notifications:
- usage: /notifications
- aliases: [notify,vnotify]
- description: Toggles your notifications
- permission-message: You don't have
- removemessage:
- usage: /removemessage [hashcode]
- aliases: [rm,vremovemessage]
- description: Remove a message from the chat
- permission-message: You don't have
- edit:
- usage: /
- aliases: [vedit]
- description: Edit your last chat message
- permission-message: You don't have
- rangedspy:
- usage: /
- aliases: [rspy,vrangedspy]
- description: Toggle spying on ranged channels
- permission-message: You don't have
- buttons:
- usage: /
- aliases: [vbuttons]
- description: Toggle viewing json buttons
- permission-message: You don't have
- venturechatgui:
- usage: /
- aliases: [vchatgui]
- description: Opens the chat management gui
- permission-message: You don't have
- messagetoggle:
- usage: /
- aliases: [mtoggle,vmessagetoggle]
- description: Toggle receiving messages
- permission-message: You don't have
- bungeetoggle:
- usage: /
- aliases: [btoggle,vbungeetoggle]
- description: Toggle receiving BungeeCord chat
- permission-message: You don't have
\ No newline at end of file