diff --git a/CommandWhitelistBukkit/pom.xml b/CommandWhitelistBukkit/pom.xml
new file mode 100644
index 0000000..5561e7d
--- /dev/null
+++ b/CommandWhitelistBukkit/pom.xml
@@ -0,0 +1,98 @@
+
+
+ 4.0.0
+
+ eu.endermite.bukkit
+ CommandWhitelistBukkit
+ 2.0
+ jar
+
+ CommandWhitelistBukkit
+
+ You decide what commands players can use or tab complete on your server!
+
+ 1.8
+ UTF-8
+
+ youhavetrouble.me
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ papermc-repo
+ https://papermc.io/repo/repository/maven-public/
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+ dmulloy2-repo
+ https://repo.dmulloy2.net/nexus/repository/public/
+
+
+
+
+
+ com.destroystokyo.paper
+ paper-api
+ 1.16.5-R0.1-SNAPSHOT
+ provided
+
+
+ net.kyori
+ adventure-platform-bukkit
+ 4.0.0-SNAPSHOT
+ compile
+
+
+ eu.endermite
+ Common
+ 2.0
+ compile
+
+
+ com.comphenix.protocol
+ ProtocolLib
+ 4.6.0
+ provided
+
+
+
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java
new file mode 100644
index 0000000..dd5cbcf
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java
@@ -0,0 +1,114 @@
+package eu.endermite.commandwhitelist.bukkit;
+
+import eu.endermite.commandwhitelist.bukkit.listeners.PacketCommandPreProcessListener;
+import eu.endermite.commandwhitelist.bukkit.listeners.PlayerCommandPreProcessListener;
+import eu.endermite.commandwhitelist.bukkit.listeners.PlayerCommandSendListener;
+import eu.endermite.commandwhitelist.bukkit.listeners.TabCompleteBlockerListener;
+import eu.endermite.commandwhitelist.common.CWGroup;
+import eu.endermite.commandwhitelist.common.ConfigCache;
+import eu.endermite.commandwhitelist.bukkit.command.MainCommand;
+import eu.endermite.commandwhitelist.bukkit.metrics.BukkitMetrics;
+import net.kyori.adventure.platform.bukkit.BukkitAudiences;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+public class CommandWhitelistBukkit extends JavaPlugin {
+
+ private static CommandWhitelistBukkit commandWhitelist;
+ private static ConfigCache configCache;
+ private static BukkitAudiences audiences;
+
+ @Override
+ public void onEnable() {
+
+ commandWhitelist = this;
+ audiences = BukkitAudiences.create(this);
+
+ reloadPluginConfig();
+
+ Plugin protocollib = getServer().getPluginManager().getPlugin("ProtocolLib");
+
+ if (!getConfigCache().useProtocolLib || protocollib == null || !protocollib.isEnabled()) {
+ getServer().getPluginManager().registerEvents(new PlayerCommandPreProcessListener(), this);
+ getServer().getPluginManager().registerEvents(new PlayerCommandSendListener(), this);
+ } else {
+ PacketCommandPreProcessListener.protocol(this);
+ getLogger().info(ChatColor.AQUA + "Using ProtocolLib for command filter!");
+ }
+ getServer().getPluginManager().registerEvents(new TabCompleteBlockerListener(), this);
+
+ getCommand("commandwhitelist").setExecutor(new MainCommand());
+
+ int pluginId = 8705;
+ new BukkitMetrics(this, pluginId);
+ }
+
+ private void reloadPluginConfig() {
+ File configFile = new File("plugins/CommandWhitelist/config.yml");
+ configCache = new ConfigCache(configFile, true);
+
+ }
+
+ public void reloadPluginConfig(CommandSender sender) {
+ getServer().getScheduler().runTaskAsynchronously(this, () -> {
+ reloadPluginConfig();
+ for (Player p : Bukkit.getOnlinePlayers()) {
+ p.updateCommands();
+ }
+ audiences.sender(sender).sendMessage(MiniMessage.markdown().parse(configCache.prefix + configCache.config_reloaded));
+ });
+ }
+
+ public static CommandWhitelistBukkit getPlugin() {
+ return commandWhitelist;
+ }
+
+ public static ConfigCache getConfigCache() {
+ return configCache;
+ }
+
+ public static BukkitAudiences getAudiences() {
+ return audiences;
+ }
+
+ /**
+ * @param player Bukkit Player
+ * @return commands available to the player
+ */
+ public static HashSet getCommands(org.bukkit.entity.Player player, HashMap groups) {
+ HashSet commandList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ commandList.addAll(s.getValue().getCommands());
+ else if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ commandList.addAll(s.getValue().getCommands());
+ }
+ return commandList;
+ }
+
+ /**
+ * @param player Bukkit Player
+ * @return subcommands unavailable for the player
+ */
+ public static HashSet getSuggestions(org.bukkit.entity.Player player, HashMap groups) {
+ HashSet suggestionList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ suggestionList.addAll(s.getValue().getSubCommands());
+ if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ continue;
+ suggestionList.addAll(s.getValue().getSubCommands());
+ }
+ return suggestionList;
+ }
+}
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandHandler.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandHandler.java
new file mode 100644
index 0000000..62903ea
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandHandler.java
@@ -0,0 +1,42 @@
+package eu.endermite.commandwhitelist.bukkit.command;
+
+import eu.endermite.commandwhitelist.common.CWGroup;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+public class BukkitCommandHandler {
+
+ /**
+ * @param player Bukkit Player
+ * @return commands available to the player
+ */
+ public static HashSet getCommands(org.bukkit.entity.Player player, HashMap groups) {
+ HashSet commandList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ commandList.addAll(s.getValue().getCommands());
+ else if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ commandList.addAll(s.getValue().getCommands());
+ }
+ return commandList;
+ }
+
+ /**
+ * @param player Bukkit Player
+ * @return subcommands unavailable for the player
+ */
+ public static HashSet getSuggestions(org.bukkit.entity.Player player, HashMap groups) {
+ HashSet suggestionList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ suggestionList.addAll(s.getValue().getSubCommands());
+ if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ continue;
+ suggestionList.addAll(s.getValue().getSubCommands());
+ }
+ return suggestionList;
+ }
+
+}
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommand.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommand.java
new file mode 100644
index 0000000..87d3164
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommand.java
@@ -0,0 +1,66 @@
+package eu.endermite.commandwhitelist.bukkit.command;
+
+import eu.endermite.commandwhitelist.common.commands.CWCommand;
+import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+
+public class MainCommand implements CommandExecutor {
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ if (args.length == 0) {
+ // send help
+ return true;
+ }
+
+ try {
+ CWCommand.CommandType commandType = CWCommand.CommandType.valueOf(args[0]);
+ switch (commandType) {
+ case RELOAD:
+ if (!sender.hasPermission("commandwhitelist.reload")) {
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().no_permission));
+ return true;
+ }
+ CommandWhitelistBukkit.getPlugin().reloadPluginConfig(sender);
+ return true;
+ case ADD:
+ if (!sender.hasPermission("commandwhitelist.admin")) {
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().no_permission));
+ return true;
+ }
+ if (args.length == 3) {
+ if (CWCommand.addToWhitelist(CommandWhitelistBukkit.getConfigCache(), args[2], args[1]))
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().added_to_whitelist));
+ else
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().group_doesnt_exist));
+ } else
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(Component.text("/cw add "));
+ return true;
+ case REMOVE:
+ if (!sender.hasPermission("commandwhitelist.admin")) {
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().no_permission));
+ return true;
+ }
+ if (args.length == 3) {
+ if (CWCommand.removeFromWhitelist(CommandWhitelistBukkit.getConfigCache(), args[2], args[1]))
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().removed_from_whitelist));
+ else
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().group_doesnt_exist));
+ } else
+ CommandWhitelistBukkit.getAudiences().sender(sender).sendMessage(Component.text("/cw remove "));
+ return true;
+ case HELP:
+ default:
+ // send help
+ }
+
+ } catch (IllegalArgumentException e) {
+ // send help
+ }
+ return true;
+ }
+}
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java
new file mode 100644
index 0000000..6ae6045
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java
@@ -0,0 +1,60 @@
+package eu.endermite.commandwhitelist.bukkit.listeners;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.ProtocolManager;
+import com.comphenix.protocol.events.ListenerPriority;
+import com.comphenix.protocol.events.PacketAdapter;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.events.PacketEvent;
+import eu.endermite.commandwhitelist.common.CommandUtil;
+import eu.endermite.commandwhitelist.common.ConfigCache;
+import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import java.util.HashSet;
+
+public class PacketCommandPreProcessListener {
+
+ public static void protocol(CommandWhitelistBukkit plugin) {
+ ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
+ commandExecListener(protocolManager, plugin);
+ }
+
+ public static void commandExecListener(ProtocolManager protocolManager, Plugin plugin) {
+ protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.CHAT) {
+ @Override
+ public void onPacketReceiving(PacketEvent event) {
+ PacketContainer packet = event.getPacket();
+ String string = packet.getStrings().read(0);
+ if (!string.startsWith("/"))
+ return;
+ Player player = event.getPlayer();
+ if (player.hasPermission("commandwhitelist.bypass"))
+ return;
+
+ ConfigCache configCache = CommandWhitelistBukkit.getConfigCache();
+
+ String label = CommandUtil.getCommandLabel(string.toLowerCase());
+ HashSet commands = CommandWhitelistBukkit.getCommands(player, configCache.getGroupList());
+ if (!commands.contains(label)) {
+ event.setCancelled(true);
+ ConfigCache config = CommandWhitelistBukkit.getConfigCache();
+ CommandWhitelistBukkit.getAudiences().player(player).sendMessage(MiniMessage.markdown().parse(config.prefix + config.command_denied));
+ return;
+ }
+
+ HashSet bannedSubCommands = CommandWhitelistBukkit.getSuggestions(player, configCache.getGroupList());
+ for (String bannedSubCommand : bannedSubCommands) {
+ if (string.toLowerCase().substring(1).startsWith(bannedSubCommand)) {
+ event.setCancelled(true);
+ ConfigCache config = CommandWhitelistBukkit.getConfigCache();
+ CommandWhitelistBukkit.getAudiences().player(player).sendMessage(MiniMessage.markdown().parse(config.prefix + config.subcommand_denied));
+ return;
+ }
+ }
+ }
+ });
+ }
+}
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java
new file mode 100644
index 0000000..8bc3e52
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java
@@ -0,0 +1,45 @@
+package eu.endermite.commandwhitelist.bukkit.listeners;
+
+import eu.endermite.commandwhitelist.common.CommandUtil;
+import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit;
+import eu.endermite.commandwhitelist.common.ConfigCache;
+import net.kyori.adventure.platform.bukkit.BukkitAudiences;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import java.util.HashSet;
+
+public class PlayerCommandPreProcessListener implements Listener {
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void PlayerCommandSendEvent(org.bukkit.event.player.PlayerCommandPreprocessEvent event) {
+ Player player = event.getPlayer();
+ if (player.hasPermission("commandwhitelist.bypass"))
+ return;
+ String label = CommandUtil.getCommandLabel(event.getMessage().toLowerCase());
+
+ ConfigCache configCache = CommandWhitelistBukkit.getConfigCache();
+ BukkitAudiences audiences = CommandWhitelistBukkit.getAudiences();
+
+ HashSet commands = CommandWhitelistBukkit.getCommands(player, configCache.getGroupList());
+ if (!commands.contains(label)) {
+ event.setCancelled(true);
+ ConfigCache config = CommandWhitelistBukkit.getConfigCache();
+ audiences.player(player).sendMessage(MiniMessage.markdown().parse(config.prefix + config.command_denied));
+ return;
+ }
+
+ HashSet bannedSubCommands = CommandWhitelistBukkit.getSuggestions(player, configCache.getGroupList());
+ for (String bannedSubCommand : bannedSubCommands) {
+ if (event.getMessage().toLowerCase().substring(1).startsWith(bannedSubCommand)) {
+ event.setCancelled(true);
+ ConfigCache config = CommandWhitelistBukkit.getConfigCache();
+ audiences.player(player).sendMessage(MiniMessage.markdown().parse(config.prefix + config.subcommand_denied));
+ return;
+ }
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandSendListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java
similarity index 68%
rename from src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandSendListener.java
rename to CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java
index bd47a9c..a591db4 100644
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandSendListener.java
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java
@@ -1,6 +1,6 @@
-package eu.endermite.commandwhitelist.spigot.listeners;
+package eu.endermite.commandwhitelist.bukkit.listeners;
-import eu.endermite.commandwhitelist.common.CommandsList;
+import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -13,7 +13,7 @@ public class PlayerCommandSendListener implements Listener {
Player player = event.getPlayer();
if (player.hasPermission("commandwhitelist.bypass"))
return;
- List commandList = CommandsList.getCommands(player);
+ HashSet commandList = CommandWhitelistBukkit.getCommands(player, CommandWhitelistBukkit.getConfigCache().getGroupList());
event.getCommands().removeIf((cmd) -> !commandList.contains(cmd));
}
}
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java
new file mode 100644
index 0000000..d6f2d16
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java
@@ -0,0 +1,24 @@
+package eu.endermite.commandwhitelist.bukkit.listeners;
+
+import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit;
+import eu.endermite.commandwhitelist.common.CommandUtil;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+
+public class TabCompleteBlockerListener implements Listener {
+ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+ public void onCommandTabComplete(org.bukkit.event.server.TabCompleteEvent event) {
+ if (!(event.getSender() instanceof Player))
+ return;
+ Player player = (Player) event.getSender();
+ event.setCompletions(
+ CommandUtil.filterSuggestions(
+ event.getBuffer(),
+ event.getCompletions(),
+ CommandWhitelistBukkit.getSuggestions(player, CommandWhitelistBukkit.getConfigCache().getGroupList())
+ )
+ );
+ }
+}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/metrics/BukkitMetrics.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/metrics/BukkitMetrics.java
similarity index 99%
rename from src/main/java/eu/endermite/commandwhitelist/spigot/metrics/BukkitMetrics.java
rename to CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/metrics/BukkitMetrics.java
index 95fdac5..8384012 100644
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/metrics/BukkitMetrics.java
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/metrics/BukkitMetrics.java
@@ -1,4 +1,4 @@
-package eu.endermite.commandwhitelist.spigot.metrics;
+package eu.endermite.commandwhitelist.bukkit.metrics;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
diff --git a/CommandWhitelistCommon/pom.xml b/CommandWhitelistCommon/pom.xml
new file mode 100644
index 0000000..b632f69
--- /dev/null
+++ b/CommandWhitelistCommon/pom.xml
@@ -0,0 +1,60 @@
+
+
+
+ CommandWhitelist
+ eu.endermite
+ 2.0
+
+ 4.0.0
+
+ Common
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+ org.yaml
+ snakeyaml
+ 1.28
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/eu/endermite/commandwhitelist/common/CWGroup.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CWGroup.java
similarity index 100%
rename from src/main/java/eu/endermite/commandwhitelist/common/CWGroup.java
rename to CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CWGroup.java
diff --git a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java
new file mode 100644
index 0000000..724c7d0
--- /dev/null
+++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java
@@ -0,0 +1,56 @@
+package eu.endermite.commandwhitelist.common;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class CommandUtil {
+
+ /**
+ * Filters blocked command suggestions from provided collection of strings
+ * @param buffer Command buffer
+ * @param suggestions Full suggestions list
+ * @param blockedSubCommands Subcommands to filter out
+ * @return Filtered list of suggestions
+ */
+ public static List filterSuggestions(String buffer, Collection suggestions, Collection blockedSubCommands) {
+ String cmd = buffer.replace(getLastArgument(buffer), "");
+ for (String s : blockedSubCommands) {
+ String slast = getLastArgument(s.toLowerCase());
+ String scommand = s.replace(slast, "");
+ cmd = cmd.replace(getLastArgument(cmd), "");
+ if (cmd.substring(1).startsWith("/" + scommand)) {
+ while (suggestions.contains(slast))
+ suggestions.remove(slast);
+ }
+ }
+ return new ArrayList<>(suggestions);
+ }
+
+ /**
+ * @param cmd The command
+ * @return Last argument of the command
+ */
+ public static String getLastArgument(String cmd) {
+ String[] parts = cmd.split(" ");
+ if (parts.length <= 1)
+ return "";
+ String last = "";
+ for (String part : parts) {
+ last = part;
+ }
+ return last;
+ }
+
+ /**
+ * @param cmd The command
+ * @return Command label
+ */
+ public static String getCommandLabel(String cmd) {
+ String[] parts = cmd.split(" ");
+ if (parts[0].startsWith("/"))
+ parts[0] = parts[0].substring(1);
+ return parts[0];
+ }
+
+}
diff --git a/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java
similarity index 90%
rename from src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java
rename to CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java
index d3f7c39..9c24405 100644
--- a/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java
+++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java
@@ -8,14 +8,18 @@ import java.util.*;
public class ConfigCache {
+ private final File configFile;
+ private final boolean canDoProtocolLib;
private final HashMap groupList = new LinkedHashMap<>();
public String prefix, command_denied, no_permission, no_such_subcommand, config_reloaded, added_to_whitelist,
removed_from_whitelist, group_doesnt_exist, subcommand_denied;
public boolean useProtocolLib = false;
public ConfigCache(File configFile, boolean canDoProtocolLib) {
- if (!reloadConfig(configFile, canDoProtocolLib))
- reloadConfig(configFile, canDoProtocolLib);
+ this.configFile = configFile;
+ this.canDoProtocolLib = canDoProtocolLib;
+ if (!reloadConfig())
+ reloadConfig();
}
public void saveDefaultConfig(Map data, File configFile, boolean canDoProtocolLib) {
@@ -23,7 +27,7 @@ public class ConfigCache {
data.put("messages", processMessages());
if (canDoProtocolLib) {
- data.put("use_protocollib_to_detect_commands", false);
+ data.put("use_protocollib_to_detect_commands", useProtocolLib);
}
List defaultCommands = new ArrayList<>();
@@ -45,7 +49,12 @@ public class ConfigCache {
defaultSubcommands.add("help about");
HashMap groups = new LinkedHashMap<>();
- groups.put("default", new CWGroup("default", defaultCommands, defaultSubcommands).serialize());
+
+ for (CWGroup group : groupList.values()) {
+ groups.put(group.getId(), group.serialize());
+ }
+
+ groups.putIfAbsent("default", new CWGroup("default", defaultCommands, defaultSubcommands).serialize());
data.putIfAbsent("groups", groups);
@@ -63,7 +72,7 @@ public class ConfigCache {
}
- public boolean reloadConfig(File configFile, boolean canDoProtocolLib) {
+ public boolean reloadConfig() {
HashMap config = new LinkedHashMap<>();
Yaml yaml = new Yaml();
try {
diff --git a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/commands/CWCommand.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/commands/CWCommand.java
new file mode 100644
index 0000000..4292368
--- /dev/null
+++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/commands/CWCommand.java
@@ -0,0 +1,53 @@
+package eu.endermite.commandwhitelist.common.commands;
+
+import eu.endermite.commandwhitelist.common.CWGroup;
+import eu.endermite.commandwhitelist.common.ConfigCache;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.event.HoverEvent;
+import net.kyori.adventure.text.format.NamedTextColor;
+import net.kyori.adventure.text.format.TextDecoration;
+
+
+public class CWCommand {
+
+ public static boolean addToWhitelist(ConfigCache configCache, String command, String group) {
+ CWGroup cwGroup = configCache.getGroupList().get(group);
+ if (cwGroup == null)
+ return false;
+ cwGroup.addCommand(command);
+ configCache.reloadConfig();
+ return true;
+ }
+
+ public static boolean removeFromWhitelist(ConfigCache configCache, String command, String group) {
+ CWGroup cwGroup = configCache.getGroupList().get(group);
+ if (cwGroup == null)
+ return false;
+ cwGroup.removeCommand(command);
+ configCache.reloadConfig();
+ return true;
+ }
+
+ public Component helpComponent(String baseCommand, boolean showReloadCommand, boolean showAdminCommands) {
+ Component component = Component.text("CommandWhitelist by YouHaveTrouble").decorate(TextDecoration.BOLD).color(NamedTextColor.BLUE)
+ .append(Component.newline());
+ component = component.append(Component.text("Hover over the command to see what it does!").color(NamedTextColor.AQUA)).decoration(TextDecoration.BOLD, false).append(Component.newline());
+ component = component.append(Component.text("/"+baseCommand+" help").color(NamedTextColor.AQUA).hoverEvent(HoverEvent.showText(Component.text("Displays this message"))));
+ if (showReloadCommand) {
+ component = component.append(Component.newline());
+ component = component.append(Component.text("/"+baseCommand+" reload").color(NamedTextColor.AQUA).hoverEvent(HoverEvent.showText(Component.text("Reloads plugin configuration"))));
+ }
+ if (showAdminCommands) {
+ component = component.append(Component.newline());
+ component = component.append(Component.text("/"+baseCommand+" add ").color(NamedTextColor.AQUA).hoverEvent(HoverEvent.showText(Component.text("Add a command to selected permission group"))));
+ component = component.append(Component.newline());
+ component = component.append(Component.text("/"+baseCommand+" remove ").color(NamedTextColor.AQUA).hoverEvent(HoverEvent.showText(Component.text("Removes a command from selected permission group"))));
+ }
+ return component;
+ }
+
+ public enum CommandType {
+ ADD, REMOVE, HELP, RELOAD
+ }
+
+}
diff --git a/CommandWhitelistVelocity/pom.xml b/CommandWhitelistVelocity/pom.xml
new file mode 100644
index 0000000..661ef40
--- /dev/null
+++ b/CommandWhitelistVelocity/pom.xml
@@ -0,0 +1,103 @@
+
+
+ 4.0.0
+
+ eu.endermite.commandwhitelist
+ CommandWhitelistVelocity
+ 2.0
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+ jar
+
+ CommandWhitelistVelocity
+
+ You decide what commands players can use or tab complete on your server!
+
+ 1.8
+ UTF-8
+
+ youhavetrouble.me
+
+
+
+ release
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+
+ velocitypowered-repo
+ https://repo.velocitypowered.com/releases/
+
+
+ minecraft-libraries
+ https://libraries.minecraft.net/
+
+
+ spongepowered-repo
+ https://repo.spongepowered.org/maven
+
+
+
+
+
+ com.velocitypowered
+ velocity-api
+ 1.1.0
+ provided
+
+
+ eu.endermite
+ Common
+ 2.0
+ compile
+
+
+
diff --git a/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java
similarity index 60%
rename from src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java
rename to CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java
index db172f3..e1933c0 100644
--- a/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java
+++ b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java
@@ -1,6 +1,5 @@
package eu.endermite.commandwhitelist.velocity;
-import com.moandjiezana.toml.Toml;
import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.event.Subscribe;
@@ -10,25 +9,24 @@ import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer;
-import eu.endermite.commandwhitelist.common.CommandsList;
+import eu.endermite.commandwhitelist.common.CWGroup;
+import eu.endermite.commandwhitelist.common.ConfigCache;
import eu.endermite.commandwhitelist.velocity.command.VelocityMainCommand;
-import eu.endermite.commandwhitelist.velocity.config.VelocityConfigCache;
import net.kyori.adventure.identity.Identity;
import net.kyori.adventure.text.Component;
import org.slf4j.Logger;
import javax.inject.Inject;
import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.List;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
public class CommandWhitelistVelocity {
private static CommandWhitelistVelocity plugin;
private static ProxyServer server;
- private static VelocityConfigCache configCache;
+ private static ConfigCache configCache;
private static Path folder;
@Inject
@@ -38,35 +36,14 @@ public class CommandWhitelistVelocity {
CommandWhitelistVelocity.plugin = this;
}
- private static Toml loadConfig(Path path) {
- File folder = path.toFile();
- File file = new File(folder, "config.toml");
- if (!file.getParentFile().exists())
- file.getParentFile().mkdirs();
-
- if (!file.exists()) {
- try (InputStream input = CommandWhitelistVelocity.class.getResourceAsStream("/" + file.getName())) {
- if (input != null) {
- Files.copy(input, file.toPath());
- } else {
- file.createNewFile();
- }
- } catch (IOException exception) {
- exception.printStackTrace();
- return null;
- }
- }
- return new Toml().read(file);
- }
-
private static void reloadConfig() {
- configCache = new VelocityConfigCache(loadConfig(folder));
+ configCache = new ConfigCache(new File(String.valueOf(folder), "config.yml"), false);
}
public static void reloadConfig(CommandSource source) {
server.getScheduler().buildTask(plugin, () -> {
reloadConfig();
- source.sendMessage(Identity.nil(), Component.text(getConfigCache().getConfigReloaded()));
+ source.sendMessage(Identity.nil(), Component.text(getConfigCache().config_reloaded));
}).schedule();
}
@@ -81,7 +58,7 @@ public class CommandWhitelistVelocity {
public void onUserCommandSendEvent(PlayerAvailableCommandsEvent event) {
if (event.getPlayer().hasPermission("commandwhitelist.bypass"))
return;
- List allowedCommands = CommandsList.getCommands(event.getPlayer());
+ HashSet allowedCommands = CommandWhitelistVelocity.getCommands(event.getPlayer(), configCache.getGroupList());
event.getRootNode().getChildren().removeIf((commandNode) ->
server.getCommandManager().hasCommand(commandNode.getName())
&& !allowedCommands.contains(commandNode.getName())
@@ -97,15 +74,46 @@ public class CommandWhitelistVelocity {
if (player.hasPermission("commandwhitelist.bypass"))
return;
- List allowedCommands = CommandsList.getCommands(player);
+ HashSet allowedCommands = CommandWhitelistVelocity.getCommands(player, configCache.getGroupList());
String command = event.getCommand().split(" ")[0];
if (server.getCommandManager().hasCommand(command)
&& !allowedCommands.contains(command))
event.setResult(CommandExecuteEvent.CommandResult.forwardToServer());
}
- public static VelocityConfigCache getConfigCache() {
+ public static ConfigCache getConfigCache() {
return configCache;
}
+ /**
+ * @param player Velocity Player
+ * @return commands available to the player
+ */
+ public static HashSet getCommands(Player player, HashMap groups) {
+ HashSet commandList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ commandList.addAll(s.getValue().getCommands());
+ else if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ commandList.addAll(s.getValue().getCommands());
+ }
+ return commandList;
+ }
+
+ /**
+ * @param player Velocity Player
+ * @return subcommands unavailable for the player
+ */
+ public static HashSet getSuggestions(Player player, HashMap groups) {
+ HashSet suggestionList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ suggestionList.addAll(s.getValue().getSubCommands());
+ if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ continue;
+ suggestionList.addAll(s.getValue().getSubCommands());
+ }
+ return suggestionList;
+ }
+
}
diff --git a/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java
similarity index 96%
rename from src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java
rename to CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java
index 2a71643..f76d3b8 100644
--- a/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java
+++ b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java
@@ -6,7 +6,6 @@ import eu.endermite.commandwhitelist.velocity.CommandWhitelistVelocity;
import net.kyori.adventure.text.Component;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -21,7 +20,7 @@ public class VelocityMainCommand implements SimpleCommand {
if (source.hasPermission("commandwhitelist.reload")) {
CommandWhitelistVelocity.reloadConfig(source);
} else {
- source.sendMessage(Component.text(CommandWhitelistVelocity.getConfigCache().getNoPermission()));
+ source.sendMessage(Component.text(CommandWhitelistVelocity.getConfigCache().no_permission));
}
}
} else {
diff --git a/src/main/java/eu/endermite/commandwhitelist/velocity/config/VelocityConfigCache.java b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/config/VelocityConfigCache.java
similarity index 100%
rename from src/main/java/eu/endermite/commandwhitelist/velocity/config/VelocityConfigCache.java
rename to CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/config/VelocityConfigCache.java
diff --git a/src/main/resources/velocity-plugin.json b/CommandWhitelistVelocity/src/main/resources/velocity-plugin.json
similarity index 70%
rename from src/main/resources/velocity-plugin.json
rename to CommandWhitelistVelocity/src/main/resources/velocity-plugin.json
index f494ceb..c53f31b 100644
--- a/src/main/resources/velocity-plugin.json
+++ b/CommandWhitelistVelocity/src/main/resources/velocity-plugin.json
@@ -2,7 +2,7 @@
"id":"commandwhitelist",
"name":"CommandWhitelist",
"version":"${project.version}",
- "description":"Control what commands players can use",
+ "description":"You decide what commands players can use or tab complete on your server!",
"authors":["YouHaveTrouble"],
"dependencies":[],
"main":"eu.endermite.commandwhitelist.velocity.CommandWhitelistVelocity"
diff --git a/CommandWhitelistWaterfall/pom.xml b/CommandWhitelistWaterfall/pom.xml
new file mode 100644
index 0000000..d25b5ca
--- /dev/null
+++ b/CommandWhitelistWaterfall/pom.xml
@@ -0,0 +1,91 @@
+
+
+ 4.0.0
+
+ eu.endermite.commandwhitelist
+ CommandWhitelistWaterfall
+ 2.0
+ jar
+
+ CommandWhitelist
+
+ You decide what commands players can use or tab complete on your server!
+
+ 1.8
+ UTF-8
+
+
+
+ clean package
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+ destroystokyo-repo
+ https://repo.destroystokyo.com/repository/maven-public/
+
+
+ papermc
+ https://papermc.io/repo/repository/maven-public/
+
+
+
+
+
+ io.github.waterfallmc
+ waterfall-api
+ 1.16-R0.5-SNAPSHOT
+ provided
+
+
+ eu.endermite
+ Common
+ 2.0
+ compile
+
+
+ net.kyori
+ adventure-platform-bungeecord
+ 4.0.0-SNAPSHOT
+
+
+
diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java
new file mode 100644
index 0000000..c58ceb4
--- /dev/null
+++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java
@@ -0,0 +1,106 @@
+package eu.endermite.commandwhitelist.waterfall;
+
+import eu.endermite.commandwhitelist.common.CWGroup;
+import eu.endermite.commandwhitelist.common.ConfigCache;
+import eu.endermite.commandwhitelist.waterfall.command.BungeeMainCommand;
+import eu.endermite.commandwhitelist.waterfall.listeners.BungeeChatEventListener;
+import eu.endermite.commandwhitelist.waterfall.listeners.WaterfallDefineCommandsListener;
+import eu.endermite.commandwhitelist.waterfall.metrics.BungeeMetrics;
+import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.md_5.bungee.api.ChatColor;
+import net.md_5.bungee.api.CommandSender;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.plugin.Plugin;
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+public final class CommandWhitelistWaterfall extends Plugin {
+
+ private static CommandWhitelistWaterfall plugin;
+ private static ConfigCache configCache;
+ private static BungeeAudiences audiences;
+
+ @Override
+ public void onEnable() {
+ plugin = this;
+ getLogger().info("Running on "+ ChatColor.DARK_AQUA+getProxy().getName());
+ loadConfig();
+ audiences = BungeeAudiences.create(this);
+ this.getProxy().getPluginManager().registerListener(this, new BungeeChatEventListener());
+ try {
+ Class.forName("io.github.waterfallmc.waterfall.conf.WaterfallConfiguration");
+ this.getProxy().getPluginManager().registerListener(this, new WaterfallDefineCommandsListener());
+ } catch (ClassNotFoundException e) {
+ getLogger().severe(ChatColor.DARK_RED+"Bungee tab completion blocker requires Waterfall other Waterfall fork.");
+ }
+
+ getProxy().getPluginManager().registerCommand(this, new BungeeMainCommand("bcw"));
+
+ int pluginId = 8704;
+ new BungeeMetrics(this, pluginId);
+ }
+
+ public static CommandWhitelistWaterfall getPlugin() {
+ return plugin;
+ }
+ public static ConfigCache getConfigCache() {
+ return configCache;
+ }
+
+ public static BungeeAudiences getAudiences() {
+ return audiences;
+ }
+
+ public void loadConfig() {
+ try {
+ if (!getDataFolder().exists()) {
+ getDataFolder().mkdir();
+ }
+
+ configCache = new ConfigCache(new File(getDataFolder(), "config.yml"), false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void loadConfigAsync(CommandSender sender) {
+ getProxy().getScheduler().runAsync(this, () -> {
+ loadConfig();
+ audiences.sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().config_reloaded));
+ });
+ }
+
+ /**
+ * @param player Bungee Player
+ * @return commands available to the player
+ */
+ public static HashSet getCommands(ProxiedPlayer player, HashMap groups) {
+ HashSet commandList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ commandList.addAll(s.getValue().getCommands());
+ else if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ commandList.addAll(s.getValue().getCommands());
+ }
+ return commandList;
+ }
+
+ /**
+ * @param player Bungee Player
+ * @return subcommands unavailable for the player
+ */
+ public static HashSet getSuggestions(ProxiedPlayer player, HashMap groups) {
+ HashSet suggestionList = new HashSet<>();
+ for (Map.Entry s : groups.entrySet()) {
+ if (s.getKey().equalsIgnoreCase("default"))
+ suggestionList.addAll(s.getValue().getSubCommands());
+ if (player.hasPermission("commandwhitelist.group." + s.getKey()))
+ continue;
+ suggestionList.addAll(s.getValue().getSubCommands());
+ }
+ return suggestionList;
+ }
+}
diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/command/BungeeMainCommand.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/command/BungeeMainCommand.java
new file mode 100644
index 0000000..3489fac
--- /dev/null
+++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/command/BungeeMainCommand.java
@@ -0,0 +1,74 @@
+package eu.endermite.commandwhitelist.waterfall.command;
+
+import eu.endermite.commandwhitelist.common.commands.CWCommand;
+import eu.endermite.commandwhitelist.waterfall.CommandWhitelistWaterfall;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.md_5.bungee.api.CommandSender;
+import net.md_5.bungee.api.plugin.Command;
+import net.md_5.bungee.api.plugin.TabExecutor;
+
+public class BungeeMainCommand extends Command implements TabExecutor {
+
+ public BungeeMainCommand(String name) {
+ super(name);
+ }
+
+ public void execute(CommandSender sender, String[] args) {
+ if (args.length == 0) {
+ // send help
+ return;
+ }
+
+ try {
+ CWCommand.CommandType commandType = CWCommand.CommandType.valueOf(args[0]);
+ switch (commandType) {
+ case RELOAD:
+ if (!sender.hasPermission("commandwhitelist.reload")) {
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().no_permission));
+ return;
+ }
+ CommandWhitelistWaterfall.getPlugin().loadConfigAsync(sender);
+ return;
+ case ADD:
+ if (!sender.hasPermission("commandwhitelist.admin")) {
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().no_permission));
+ return;
+ }
+ if (args.length == 3) {
+ if (CWCommand.addToWhitelist(CommandWhitelistWaterfall.getConfigCache(), args[2], args[1]))
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().added_to_whitelist));
+ else
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().group_doesnt_exist));
+ } else
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(Component.text("/cw add "));
+ return;
+ case REMOVE:
+ if (!sender.hasPermission("commandwhitelist.admin")) {
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().no_permission));
+ return;
+ }
+ if (args.length == 3) {
+ if (CWCommand.removeFromWhitelist(CommandWhitelistWaterfall.getConfigCache(), args[2], args[1]))
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().removed_from_whitelist));
+ else
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(MiniMessage.markdown().parse(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().group_doesnt_exist));
+ } else
+ CommandWhitelistWaterfall.getAudiences().sender(sender).sendMessage(Component.text("/cw remove "));
+ return;
+ case HELP:
+ default:
+ // send help
+ }
+
+ } catch (IllegalArgumentException e) {
+ // send help
+ }
+ return;
+ }
+
+ @Override
+ public Iterable onTabComplete(CommandSender sender, String[] args) {
+ return null;
+ }
+}
diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java
new file mode 100644
index 0000000..907d14f
--- /dev/null
+++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java
@@ -0,0 +1,48 @@
+package eu.endermite.commandwhitelist.waterfall.listeners;
+
+import eu.endermite.commandwhitelist.common.CommandUtil;
+import eu.endermite.commandwhitelist.common.ConfigCache;
+import eu.endermite.commandwhitelist.waterfall.CommandWhitelistWaterfall;
+import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
+import net.kyori.adventure.text.minimessage.MiniMessage;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+import net.md_5.bungee.api.plugin.Listener;
+import net.md_5.bungee.event.EventHandler;
+
+import java.util.HashSet;
+
+public class BungeeChatEventListener implements Listener {
+
+ @EventHandler
+ public void onChatEvent(net.md_5.bungee.api.event.ChatEvent event) {
+ if (event.isCancelled())
+ return;
+ if (!(event.getSender() instanceof ProxiedPlayer))
+ return;
+ if (!event.isProxyCommand())
+ return;
+ ProxiedPlayer player = (ProxiedPlayer) event.getSender();
+ if (player.hasPermission("commandwhitelist.bypass"))
+ return;
+ String command = event.getMessage().toLowerCase();
+ ConfigCache configCache = CommandWhitelistWaterfall.getConfigCache();
+ BungeeAudiences audiences = CommandWhitelistWaterfall.getAudiences();
+
+ String label = CommandUtil.getCommandLabel(command);
+ HashSet commands = CommandWhitelistWaterfall.getCommands(player, configCache.getGroupList());
+ if (!commands.contains(label)) {
+ event.setCancelled(true);
+ CommandWhitelistWaterfall.getAudiences().player(player).sendMessage(MiniMessage.markdown().parse(configCache.prefix + configCache.command_denied));
+ return;
+ }
+
+ HashSet bannedSubCommands = CommandWhitelistWaterfall.getSuggestions(player, configCache.getGroupList());
+ for (String bannedSubCommand : bannedSubCommands) {
+ if (command.toLowerCase().substring(1).startsWith(bannedSubCommand)) {
+ event.setCancelled(true);
+ audiences.player(player).sendMessage(MiniMessage.markdown().parse(configCache.prefix + configCache.subcommand_denied));
+ return;
+ }
+ }
+ }
+}
diff --git a/src/main/java/eu/endermite/commandwhitelist/bungee/listeners/WaterfallDefineCommandsListener.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java
similarity index 74%
rename from src/main/java/eu/endermite/commandwhitelist/bungee/listeners/WaterfallDefineCommandsListener.java
rename to CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java
index a1d85e1..17de0c0 100644
--- a/src/main/java/eu/endermite/commandwhitelist/bungee/listeners/WaterfallDefineCommandsListener.java
+++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java
@@ -1,7 +1,6 @@
-package eu.endermite.commandwhitelist.bungee.listeners;
+package eu.endermite.commandwhitelist.waterfall.listeners;
-import eu.endermite.commandwhitelist.common.CommandsList;
-import eu.endermite.commandwhitelist.bungee.CommandWhitelistBungee;
+import eu.endermite.commandwhitelist.waterfall.CommandWhitelistWaterfall;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.Listener;
@@ -18,8 +17,8 @@ public class WaterfallDefineCommandsListener implements Listener {
if (player.hasPermission("commandwhitelist.bypass"))
return;
HashMap commandHashMap = new HashMap<>();
- CommandsList.getCommands(player).forEach(cmdName ->
- CommandWhitelistBungee.getPlugin().getProxy().getPluginManager().getCommands()
+ CommandWhitelistWaterfall.getCommands(player, CommandWhitelistWaterfall.getConfigCache().getGroupList()).forEach(cmdName ->
+ CommandWhitelistWaterfall.getPlugin().getProxy().getPluginManager().getCommands()
.stream()
.filter(commandEntry -> cmdName.equalsIgnoreCase(commandEntry.getValue().getName()))
.forEach(commandEntry -> commandHashMap.put(commandEntry.getKey(), commandEntry.getValue())));
diff --git a/src/main/java/eu/endermite/commandwhitelist/bungee/metrics/BungeeMetrics.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/metrics/BungeeMetrics.java
similarity index 99%
rename from src/main/java/eu/endermite/commandwhitelist/bungee/metrics/BungeeMetrics.java
rename to CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/metrics/BungeeMetrics.java
index 9b46138..6842480 100644
--- a/src/main/java/eu/endermite/commandwhitelist/bungee/metrics/BungeeMetrics.java
+++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/metrics/BungeeMetrics.java
@@ -1,4 +1,4 @@
-package eu.endermite.commandwhitelist.bungee.metrics;
+package eu.endermite.commandwhitelist.waterfall.metrics;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
diff --git a/pom.xml b/pom.xml
index d05739d..ab6c942 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,8 +6,14 @@
eu.endermite
CommandWhitelist
- 2.0-SNAPSHOT
- jar
+ 2.0
+
+ CommandWhitelistCommon
+ CommandWhitelistBukkit
+ CommandWhitelistVelocity
+ CommandWhitelistWaterfall
+
+ pom
CommandWhitelist
@@ -54,62 +60,28 @@
-
- spigotmc-repo
- https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
sonatype
https://oss.sonatype.org/content/groups/public/
- jitpack.io
- https://jitpack.io
-
-
- dmulloy2-repo
- https://repo.dmulloy2.net/nexus/repository/public/
-
-
- papermc
- https://papermc.io/repo/repository/maven-public/
-
-
- velocity
- https://repo.velocitypowered.com/snapshots/
+ minecraft-repo
+ https://libraries.minecraft.net/
- org.spigotmc
- spigot-api
- 1.16.5-R0.1-SNAPSHOT
- provided
+ net.kyori
+ adventure-api
+ 4.7.0
+ compile
- net.md-5
- bungeecord-api
- 1.15-SNAPSHOT
- provided
-
-
- io.github.waterfallmc
- waterfall-api
- 1.16-R0.4-SNAPSHOT
- provided
-
-
- com.velocitypowered
- velocity-api
- 1.1.0-SNAPSHOT
- provided
-
-
- com.comphenix.protocol
- ProtocolLib
- 4.6.0
- provided
+ net.kyori
+ adventure-text-minimessage
+ 4.1.0-SNAPSHOT
+ compile
diff --git a/src/main/java/eu/endermite/commandwhitelist/bungee/CommandWhitelistBungee.java b/src/main/java/eu/endermite/commandwhitelist/bungee/CommandWhitelistBungee.java
deleted file mode 100644
index cc40abc..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/bungee/CommandWhitelistBungee.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package eu.endermite.commandwhitelist.bungee;
-
-import com.google.common.io.ByteStreams;
-import eu.endermite.commandwhitelist.bungee.command.BungeeMainCommand;
-import eu.endermite.commandwhitelist.bungee.config.BungeeConfigCache;
-import eu.endermite.commandwhitelist.bungee.listeners.BungeeChatEventListener;
-import eu.endermite.commandwhitelist.bungee.listeners.WaterfallDefineCommandsListener;
-import eu.endermite.commandwhitelist.bungee.metrics.BungeeMetrics;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.plugin.Plugin;
-import net.md_5.bungee.config.Configuration;
-import net.md_5.bungee.config.ConfigurationProvider;
-import net.md_5.bungee.config.YamlConfiguration;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public final class CommandWhitelistBungee extends Plugin {
-
- private static CommandWhitelistBungee plugin;
- private static BungeeConfigCache configCache;
-
- @Override
- public void onEnable() {
- plugin = this;
- getLogger().info("Running on "+ ChatColor.DARK_AQUA+getProxy().getName());
- loadConfig();
- this.getProxy().getPluginManager().registerListener(this, new BungeeChatEventListener());
- try {
- Class.forName("io.github.waterfallmc.waterfall.conf.WaterfallConfiguration");
- this.getProxy().getPluginManager().registerListener(this, new WaterfallDefineCommandsListener());
- } catch (ClassNotFoundException e) {
- getLogger().severe(ChatColor.DARK_RED+"Bungee tab completion blocker requires Waterfall other Waterfall fork.");
- }
-
- getProxy().getPluginManager().registerCommand(this, new BungeeMainCommand("bcw"));
-
- int pluginId = 8704;
- new BungeeMetrics(this, pluginId);
- }
-
- public static CommandWhitelistBungee getPlugin() {
- return plugin;
- }
- public static BungeeConfigCache getConfigCache() {
- return configCache;
- }
-
- public void loadConfig() {
- try {
- if (!getDataFolder().exists()) {
- getDataFolder().mkdir();
- }
-
- File file = new File(getDataFolder(), "config.yml");
-
- if (!file.exists()) {
- file.createNewFile();
- try (InputStream in = getResourceAsStream("bungeeconfig.yml");
- OutputStream out = new FileOutputStream(file)) {
- ByteStreams.copy(in, out);
- }
- }
- final Configuration config = ConfigurationProvider.getProvider(YamlConfiguration.class).load(file);
- ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, new File(getDataFolder(), "config.yml"));
- configCache = new BungeeConfigCache(config);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public void loadConfigAsync(CommandSender sender) {
- getProxy().getScheduler().runAsync(this, () -> {
- loadConfig();
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + CommandWhitelistBungee.getConfigCache().getConfigReloaded()));
- });
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/bungee/command/BungeeMainCommand.java b/src/main/java/eu/endermite/commandwhitelist/bungee/command/BungeeMainCommand.java
deleted file mode 100644
index 0c7454d..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/bungee/command/BungeeMainCommand.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package eu.endermite.commandwhitelist.bungee.command;
-
-import eu.endermite.commandwhitelist.bungee.CommandWhitelistBungee;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.api.plugin.TabExecutor;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class BungeeMainCommand extends Command implements TabExecutor {
-
- public BungeeMainCommand(String name) {
- super(name);
- }
-
- public void execute(CommandSender sender, String[] args) {
- if (args.length > 0) {
- if (args[0].equalsIgnoreCase("reload")) {
- if (sender.hasPermission("commandwhitelist.reload")) {
- CommandWhitelistBungee.getPlugin().loadConfigAsync(sender);
- } else {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + CommandWhitelistBungee.getConfigCache().getNoPermission()));
- }
- } else if (args[0].equalsIgnoreCase("add")) {
- if (!sender.hasPermission("commandwhitelist.admin")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + CommandWhitelistBungee.getConfigCache().getNoPermission()));
- return;
- }
- if (args.length >= 3) {
- if (CommandWhitelistBungee.getConfigCache().addCommand(args[2], args[1])) {
- String msg = String.format(CommandWhitelistBungee.getConfigCache().getWhitelistedCommand(), args[2], args[1]);
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
- } else {
- String msg = CommandWhitelistBungee.getConfigCache().getNoSuchGroup();
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
- }
- } else {
- sender.sendMessage("/bcw add ");
- }
- return;
- } else if (args[0].equalsIgnoreCase("remove")) {
-
- if (!sender.hasPermission("commandwhitelist.admin")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + CommandWhitelistBungee.getConfigCache().getNoPermission()));
- return;
- }
- if (args.length >= 3) {
- if (CommandWhitelistBungee.getConfigCache().removeCommand(args[2], args[1])) {
- String msg = String.format(CommandWhitelistBungee.getConfigCache().getRemovedWhitelistedCommand(), args[2], args[1]);
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
- } else {
- String msg = CommandWhitelistBungee.getConfigCache().getNoSuchGroup();
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
- }
- } else {
- sender.sendMessage("/bcw remove ");
- }
-
- } else {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + CommandWhitelistBungee.getConfigCache().getNoSubCommand()));
- }
- } else {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bCommand Whitelist by YouHaveTrouble"));
- if (sender.hasPermission("commandwhitelist.reload")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9/bcw reload &b- Reload bungee plugin configuration"));
- }
- }
- }
-
- @Override
- public Iterable onTabComplete(CommandSender sender, String[] args) {
- List list = new ArrayList<>();
- if (args.length == 1) {
- if ("reload".startsWith(args[0]) && sender.hasPermission("commandwhitelist.reload")) {
- list.add("reload");
- }
- if ("add".startsWith(args[0]) && sender.hasPermission("commandwhitelist.admin")) {
- list.add("add");
- }
- if ("remove".startsWith(args[0]) && sender.hasPermission("commandwhitelist.admin")) {
- list.add("remove");
- }
- } else if (args.length == 2) {
- if (args[0].equalsIgnoreCase("add") || args[0].equalsIgnoreCase("remove")) {
- if (!sender.hasPermission("commandwhitelist.admin"))
- return list;
- for (Map.Entry> s : CommandWhitelistBungee.getConfigCache().getPermList().entrySet()) {
- if (s.getKey().startsWith(args[1])) {
- list.add(s.getKey());
- }
- }
- }
- } else if (args.length == 3) {
- if (args[0].equalsIgnoreCase("remove")) {
- if (!sender.hasPermission("commandwhitelist.admin"))
- return list;
- try {
- for (String s : CommandWhitelistBungee.getConfigCache().getPermList().get(args[1])) {
- if (s.startsWith(args[2])) {
- list.add(s);
- }
- }
- } catch (NullPointerException ignored) {
- }
- return list;
- }
- if (args[0].equalsIgnoreCase("add")) {
- if (!sender.hasPermission("commandwhitelist.admin"))
- return list;
-
- for (Map.Entry command : CommandWhitelistBungee.getPlugin().getProxy().getPluginManager().getCommands()) {
- if (command.getKey().startsWith("/"))
- continue;
-
- if (CommandWhitelistBungee.getConfigCache().getPermList().get(args[1]).contains(command.getKey()))
- continue;
-
- if (command.getKey().startsWith(args[2]))
- list.add(command.getKey());
- }
- }
- }
- return list;
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/bungee/config/BungeeConfigCache.java b/src/main/java/eu/endermite/commandwhitelist/bungee/config/BungeeConfigCache.java
deleted file mode 100644
index 1e278ae..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/bungee/config/BungeeConfigCache.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package eu.endermite.commandwhitelist.bungee.config;
-
-import eu.endermite.commandwhitelist.bungee.CommandWhitelistBungee;
-import net.md_5.bungee.config.Configuration;
-import net.md_5.bungee.config.ConfigurationProvider;
-import net.md_5.bungee.config.YamlConfiguration;
-import java.io.File;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-
-public class BungeeConfigCache {
-
- private final Configuration config;
- private final HashMap> permList = new HashMap<>();
- private final String prefix, commandDenied, noPermission, noSubCommand, configReloaded, whitelistedCommand,
- removedWhitelistedCommand, noSuchGroup;
- private List commandDeniedList;
-
- public BungeeConfigCache(Configuration config) {
-
- this.config = config;
-
- prefix = config.getString("messages.prefix");
- commandDenied = config.getString("messages.command-denied", null);
- commandDeniedList = config.getStringList("messages.command-denied");
- noPermission = config.getString("messages.no-permission");
- noSubCommand = config.getString("messages.no-such-subcommand");
- configReloaded = config.getString("messages.config-reloaded");
- whitelistedCommand = config.getString("messages.added-to-whitelist", "&eWhitelisted command &6%s &efor permission &6%s");
- removedWhitelistedCommand = config.getString("messages.removed-from-whitelist", "&eRemoved command &6%s &efrom permission &6%s");
- noSuchGroup = config.getString("messages.group-doesnt-exist", "&cGroup %s doesn't exist");
-
- Collection perms = config.getSection("commands").getKeys();
- for (String s : perms) {
- this.permList.put(s, config.getStringList("commands."+s));
- }
- }
-
- public HashMap> getPermList() {
- return permList;
- }
- public boolean addCommand(String command, String group) {
- try {
- this.permList.get(group).add(command);
- this.config.set("commands."+group, permList.get(group));
- ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, new File(CommandWhitelistBungee.getPlugin().getDataFolder(), "config.yml"));
- return true;
- } catch (Exception e) {
- return false;
- }
- }
- public boolean removeCommand(String command, String group) {
- try {
- this.permList.get(group).remove(command);
- this.config.set("commands."+group, permList.get(group));
- ConfigurationProvider.getProvider(YamlConfiguration.class).save(config, new File(CommandWhitelistBungee.getPlugin().getDataFolder(), "config.yml"));
- return true;
- } catch (Exception e) {
- return false;
- }
- }
- public String getPrefix() {return prefix;}
- public String getCommandDenied() {return commandDenied;}
- public List getCommandDeniedList() {
- return commandDeniedList;
- }
- public String getNoPermission() {return noPermission;}
- public String getNoSubCommand() {return noSubCommand;}
- public String getConfigReloaded() {return configReloaded;}
- public String getWhitelistedCommand() {
- return whitelistedCommand;
- }
- public String getRemovedWhitelistedCommand() {
- return removedWhitelistedCommand;
- }
- public String getNoSuchGroup() {
- return noSuchGroup;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/eu/endermite/commandwhitelist/bungee/listeners/BungeeChatEventListener.java b/src/main/java/eu/endermite/commandwhitelist/bungee/listeners/BungeeChatEventListener.java
deleted file mode 100644
index 33e4f2d..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/bungee/listeners/BungeeChatEventListener.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package eu.endermite.commandwhitelist.bungee.listeners;
-
-import eu.endermite.commandwhitelist.bungee.CommandWhitelistBungee;
-import eu.endermite.commandwhitelist.bungee.config.BungeeConfigCache;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.plugin.Listener;
-import net.md_5.bungee.event.EventHandler;
-import java.util.List;
-import java.util.Map;
-
-public class BungeeChatEventListener implements Listener {
-
- @EventHandler
- public void onChatEvent(net.md_5.bungee.api.event.ChatEvent event) {
- if (event.isCancelled())
- return;
- if (!(event.getSender() instanceof ProxiedPlayer))
- return;
- if (!event.isProxyCommand())
- return;
- ProxiedPlayer player = (ProxiedPlayer) event.getSender();
- if (player.hasPermission("commandwhitelist.bypass"))
- return;
- String command = event.getMessage().toLowerCase();
- boolean found = false;
- for (Map.Entry> s : CommandWhitelistBungee.getConfigCache().getPermList().entrySet()) {
- if (!player.hasPermission("commandwhitelist.commands." + s.getKey()))
- continue;
- for (String comm : s.getValue()) {
- comm = comm.toLowerCase();
- if (command.equalsIgnoreCase("/" + comm)) {
- found = true;
- break;
- } else if (command.startsWith("/" + comm + " ")) {
- found = true;
- break;
- }
- }
- }
- if (!found) {
- event.setCancelled(true);
- BungeeConfigCache config = CommandWhitelistBungee.getConfigCache();
- player.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelistBungee.getConfigCache().getPrefix() + config.getCommandDenied()));
- }
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/common/CommandsList.java b/src/main/java/eu/endermite/commandwhitelist/common/CommandsList.java
deleted file mode 100644
index c4c4d04..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/common/CommandsList.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package eu.endermite.commandwhitelist.common;
-
-import eu.endermite.commandwhitelist.bungee.CommandWhitelistBungee;
-import eu.endermite.commandwhitelist.spigot.CommandWhitelist;
-import eu.endermite.commandwhitelist.velocity.CommandWhitelistVelocity;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class CommandsList {
-
- public static List getCommands(org.bukkit.entity.Player player) {
- List commandList = new ArrayList<>();
- for (Map.Entry s : CommandWhitelist.getConfigCache().getGroupList().entrySet()) {
- if (s.getKey().equalsIgnoreCase("default"))
- commandList.addAll(s.getValue().getCommands());
- else if (player.hasPermission("commandwhitelist.group." + s.getKey()))
- commandList.addAll(s.getValue().getCommands());
- }
- return commandList;
- }
-
- public static List getCommands(net.md_5.bungee.api.connection.ProxiedPlayer player) {
- List commandList = new ArrayList<>();
- for (Map.Entry> s : CommandWhitelistBungee.getConfigCache().getPermList().entrySet()) {
- if (s.getKey().equalsIgnoreCase("default"))
- commandList.addAll(s.getValue());
- else if (player.hasPermission("commandwhitelist.commands." + s.getKey()))
- commandList.addAll(s.getValue());
- }
- return commandList;
- }
-
- public static List getCommands(com.velocitypowered.api.proxy.Player player) {
- List commandList = new ArrayList<>();
- for (Map.Entry> s : CommandWhitelistVelocity.getConfigCache().getPermList().entrySet()) {
- if (s.getKey().equalsIgnoreCase("default"))
- commandList.addAll(s.getValue());
- else if (player.hasPermission("commandwhitelist.commands." + s.getKey()))
- commandList.addAll(s.getValue());
- }
- return commandList;
- }
-
- public static List getSuggestions(org.bukkit.entity.Player player) {
- List suggestionList = new ArrayList<>();
- for (Map.Entry s : CommandWhitelist.getConfigCache().getGroupList().entrySet()) {
- if (player.hasPermission("commandwhitelist.subcommands." + s.getKey()))
- continue;
- suggestionList.addAll(s.getValue().getSubCommands());
- }
- return suggestionList;
- }
-
- public static String getLastArgument(String cmd) {
- String[] parts = cmd.split(" ");
- if (parts.length <= 1)
- return "";
- String last = "";
- for (String part : parts) {
- last = part;
- }
- return last;
- }
-
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/CommandWhitelist.java b/src/main/java/eu/endermite/commandwhitelist/spigot/CommandWhitelist.java
deleted file mode 100644
index 55e83a8..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/CommandWhitelist.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package eu.endermite.commandwhitelist.spigot;
-
-import eu.endermite.commandwhitelist.common.ConfigCache;
-import eu.endermite.commandwhitelist.spigot.command.MainCommand;
-import eu.endermite.commandwhitelist.spigot.listeners.*;
-import eu.endermite.commandwhitelist.spigot.metrics.BukkitMetrics;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import java.io.File;
-
-public class CommandWhitelist extends JavaPlugin {
-
- private static CommandWhitelist commandWhitelist;
- private static ConfigCache configCache;
- private static boolean isLegacy;
-
- @Override
- public void onEnable() {
-
- commandWhitelist = this;
-
- reloadPluginConfig();
-
- Plugin protocollib = getServer().getPluginManager().getPlugin("ProtocolLib");
-
- if (!getConfigCache().useProtocolLib || protocollib == null || !protocollib.isEnabled()) {
- getServer().getPluginManager().registerEvents(new PlayerCommandPreProcessListener(), this);
- getServer().getPluginManager().registerEvents(new PlayerCommandSendListener(), this);
- } else {
- PacketCommandSendListener.protocol(this);
- getLogger().info(ChatColor.AQUA + "Using ProtocolLib for command filter!");
- }
- getServer().getPluginManager().registerEvents(new TabCompleteBlockerListener(), this);
-
-
- getCommand("commandwhitelist").setExecutor(new MainCommand());
-
- int pluginId = 8705;
- new BukkitMetrics(this, pluginId);
- }
-
- public void reloadPluginConfig() {
- File configFile = new File("plugins/CommandWhitelist/config.yml");
- configCache = new ConfigCache(configFile, true);
-
-
- }
-
- public void reloadPluginConfig(CommandSender sender) {
- getServer().getScheduler().runTaskAsynchronously(this, () -> {
- reloadPluginConfig();
- for (Player p : Bukkit.getOnlinePlayers()) {
- p.updateCommands();
- }
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelist.getConfigCache().prefix + CommandWhitelist.getConfigCache().config_reloaded));
- });
- }
-
- public static CommandWhitelist getPlugin() {
- return commandWhitelist;
- }
-
- public static ConfigCache getConfigCache() {
- return configCache;
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/command/MainCommand.java b/src/main/java/eu/endermite/commandwhitelist/spigot/command/MainCommand.java
deleted file mode 100644
index 9a62e67..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/command/MainCommand.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package eu.endermite.commandwhitelist.spigot.command;
-
-import eu.endermite.commandwhitelist.spigot.CommandWhitelist;
-import org.bukkit.ChatColor;
-import org.bukkit.command.Command;
-import org.bukkit.command.CommandExecutor;
-import org.bukkit.command.CommandSender;
-
-
-public class MainCommand implements CommandExecutor {
-
- @Override
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
- if (args.length > 0) {
- if (args[0].equalsIgnoreCase("reload")) {
- if (!sender.hasPermission("commandwhitelist.reload")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelist.getConfigCache().prefix + CommandWhitelist.getConfigCache().no_permission));
- return true;
- }
- CommandWhitelist.getPlugin().reloadPluginConfig(sender);
-
- } else if (args[0].equalsIgnoreCase("add")) {
-
- if (!sender.hasPermission("commandwhitelist.admin")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelist.getConfigCache().prefix + CommandWhitelist.getConfigCache().no_permission));
- return true;
- }
- if (args.length >= 3) {
-
- } else {
- sender.sendMessage("/cw add ");
- }
-
- } else if (args[0].equalsIgnoreCase("remove")) {
-
- if (!sender.hasPermission("commandwhitelist.admin")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelist.getConfigCache().prefix + CommandWhitelist.getConfigCache().no_permission));
- return true;
- }
- if (args.length >= 3) {
-
- } else {
- sender.sendMessage("/cw remove ");
- }
- } else {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandWhitelist.getConfigCache().prefix + CommandWhitelist.getConfigCache().no_such_subcommand));
- }
- } else {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bCommand Whitelist by YouHaveTrouble"));
- if (sender.hasPermission("commandwhitelist.reload")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9/cw reload &b- Reload plugin configuration"));
- }
- if (sender.hasPermission("commandwhitelist.admin")) {
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9/cw add &b- Add command to group"));
- sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&9/cw remove &b- Remove command from a group"));
- }
- }
- return true;
- }
-
-
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/LegacyPlayerTabChatCompleteListener.java b/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/LegacyPlayerTabChatCompleteListener.java
deleted file mode 100644
index 705c01f..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/LegacyPlayerTabChatCompleteListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package eu.endermite.commandwhitelist.spigot.listeners;
-
-import com.comphenix.protocol.PacketType;
-import com.comphenix.protocol.ProtocolLibrary;
-import com.comphenix.protocol.ProtocolManager;
-import com.comphenix.protocol.events.ListenerPriority;
-import com.comphenix.protocol.events.PacketAdapter;
-import com.comphenix.protocol.events.PacketContainer;
-import com.comphenix.protocol.events.PacketEvent;
-import eu.endermite.commandwhitelist.common.CommandsList;
-import eu.endermite.commandwhitelist.spigot.CommandWhitelist;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
-import java.util.ArrayList;
-import java.util.List;
-
-public class LegacyPlayerTabChatCompleteListener {
-
- public static void protocol(CommandWhitelist plugin) {
- ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
- tabCompleteServerBound(protocolManager, plugin);
- }
-
- public static void tabCompleteServerBound(ProtocolManager protocolManager, Plugin plugin) {
- protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.TAB_COMPLETE) {
- @Override
- public void onPacketSending(PacketEvent event) {
- try {
- Player player = event.getPlayer();
- if (player.hasPermission("commandwhitelist.bypass"))
- return;
- PacketContainer packet = event.getPacket();
- String[] message = packet.getSpecificModifier(String[].class).read(0);
- List commandList = CommandsList.getCommands(player);
- List finalList = new ArrayList<>();
- int components = 0;
- for (String cmd : message) {
- for (String cmdFromList : commandList) {
- if (cmd.equalsIgnoreCase("/" + cmdFromList) || !cmd.startsWith("/")) {
- finalList.add(components++, cmd);
- break;
- }
- }
- }
- String[] toWrite = new String[components];
- int counter = 0;
- for (String cmd : finalList) {
- toWrite[counter++] = cmd;
- }
- packet.getSpecificModifier(String[].class).write(0, toWrite);
- } catch (Exception ignored) {}
- }
- });
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PacketCommandSendListener.java b/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PacketCommandSendListener.java
deleted file mode 100644
index 8e6d0c5..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PacketCommandSendListener.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package eu.endermite.commandwhitelist.spigot.listeners;
-
-import com.comphenix.protocol.PacketType;
-import com.comphenix.protocol.ProtocolLibrary;
-import com.comphenix.protocol.ProtocolManager;
-import com.comphenix.protocol.events.ListenerPriority;
-import com.comphenix.protocol.events.PacketAdapter;
-import com.comphenix.protocol.events.PacketContainer;
-import com.comphenix.protocol.events.PacketEvent;
-import eu.endermite.commandwhitelist.common.CWGroup;
-import eu.endermite.commandwhitelist.common.CommandsList;
-import eu.endermite.commandwhitelist.common.ConfigCache;
-import eu.endermite.commandwhitelist.spigot.CommandWhitelist;
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
-import java.util.List;
-import java.util.Map;
-
-public class PacketCommandSendListener {
-
- public static void protocol(CommandWhitelist plugin) {
- ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
- commandExecListener(protocolManager, plugin);
- }
-
- public static void commandExecListener(ProtocolManager protocolManager, Plugin plugin) {
- protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.CHAT) {
- @Override
- public void onPacketReceiving(PacketEvent event) {
- PacketContainer packet = event.getPacket();
- String string = packet.getStrings().read(0);
- if (!string.startsWith("/"))
- return;
- Player player = event.getPlayer();
- if (player.hasPermission("commandwhitelist.bypass"))
- return;
- String cmd = string.replace("/", "");
- String[] split = cmd.split("\\s+");
- String command = split[0].toLowerCase();
- for (Map.Entry s : CommandWhitelist.getConfigCache().getGroupList().entrySet()) {
- if (!player.hasPermission("commandwhitelist.commands." + s.getKey()))
- continue;
- for (String comm : s.getValue().getCommands()) {
- comm = comm.toLowerCase();
- if (command.equalsIgnoreCase(comm) || command.startsWith(comm + " ")) {
- List bannedSubCommands = CommandsList.getSuggestions(player);
- for (String bannedSubCommand : bannedSubCommands) {
- if (cmd.startsWith(bannedSubCommand)) {
- event.setCancelled(true);
- ConfigCache config = CommandWhitelist.getConfigCache();
- player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.prefix + config.subcommand_denied));
- return;
- }
- }
- return;
- }
- }
- }
-
- event.setCancelled(true);
- ConfigCache config = CommandWhitelist.getConfigCache();
- player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.prefix + config.command_denied));
-
- }
- });
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandPreProcessListener.java b/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandPreProcessListener.java
deleted file mode 100644
index 6b019c0..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandPreProcessListener.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package eu.endermite.commandwhitelist.spigot.listeners;
-
-import eu.endermite.commandwhitelist.common.CWGroup;
-import eu.endermite.commandwhitelist.common.CommandsList;
-import eu.endermite.commandwhitelist.spigot.CommandWhitelist;
-import eu.endermite.commandwhitelist.common.ConfigCache;
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import java.util.List;
-import java.util.Map;
-
-public class PlayerCommandPreProcessListener implements Listener {
- @EventHandler(priority = EventPriority.HIGHEST)
- public void PlayerCommandSendEvent(org.bukkit.event.player.PlayerCommandPreprocessEvent event) {
- Player player = event.getPlayer();
- if (player.hasPermission("commandwhitelist.bypass"))
- return;
- String command = event.getMessage().toLowerCase();
- for (Map.Entry s : CommandWhitelist.getConfigCache().getGroupList().entrySet()) {
- if (!player.hasPermission("commandwhitelist.commands." + s.getKey()))
- continue;
- for (String comm : s.getValue().getCommands()) {
- comm = comm.toLowerCase();
- if (command.equalsIgnoreCase("/" + comm) || command.startsWith("/" + comm + " ")) {
- String rawCmd = event.getMessage();
- List bannedSubCommands = CommandsList.getSuggestions(player);
- for (String bannedSubCommand : bannedSubCommands) {
- if (rawCmd.startsWith("/"+bannedSubCommand)) {
- event.setCancelled(true);
- ConfigCache config = CommandWhitelist.getConfigCache();
- player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.prefix + config.subcommand_denied));
- return;
- }
- }
- return;
- }
- }
- }
- event.setCancelled(true);
- ConfigCache config = CommandWhitelist.getConfigCache();
- player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.prefix + config.command_denied));
- }
-}
diff --git a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/TabCompleteBlockerListener.java b/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/TabCompleteBlockerListener.java
deleted file mode 100644
index 96b7dae..0000000
--- a/src/main/java/eu/endermite/commandwhitelist/spigot/listeners/TabCompleteBlockerListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package eu.endermite.commandwhitelist.spigot.listeners;
-
-import eu.endermite.commandwhitelist.common.CommandsList;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import java.util.List;
-
-public class TabCompleteBlockerListener implements Listener {
- @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
- public void onCommandTabComplete(org.bukkit.event.server.TabCompleteEvent event) {
- if (!(event.getSender() instanceof Player))
- return;
- Player player = (Player) event.getSender();
- String buffer = event.getBuffer();
- String cmd = buffer.replace(CommandsList.getLastArgument(buffer), "");
- List blockedCommands = CommandsList.getSuggestions(player);
- List suggestions = event.getCompletions();
- for (String s : blockedCommands) {
- String slast = CommandsList.getLastArgument(s);
- String scommand = s.replace(slast, "");
- cmd = cmd.replace(CommandsList.getLastArgument(cmd), "");
- if (cmd.startsWith("/" + scommand)) {
- try {
- while (suggestions.contains(slast))
- suggestions.remove(slast);
- } catch (Exception ignored) {}
- }
- }
- event.setCompletions(suggestions);
- }
-}
diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml
deleted file mode 100644
index 6839dfd..0000000
--- a/src/main/resources/bungee.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-name: CommandWhitelistBungee
-version: ${project.version}
-main: eu.endermite.commandwhitelist.bungee.CommandWhitelistBungee
-author: YouHaveTrouble
diff --git a/src/main/resources/bungeeconfig.yml b/src/main/resources/bungeeconfig.yml
deleted file mode 100644
index 3473f40..0000000
--- a/src/main/resources/bungeeconfig.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# This is bungeecord version of the config.
-messages:
- prefix: "CommandWhitelist > "
- command-denied: "No such command."
- no-permission: "&cYou don't have permission to do this."
- no-such-subcommand: "&cNo subcommand by that name."
- config-reloaded: "&eConfiguration reloaded."
- added-to-whitelist: "&eWhitelisted command &6%s &efor permission &6%s"
- removed-from-whitelist: "&eRemoved command &6%s &efrom permission &6%s"
- group-doesnt-exist: "&cGroup doesn't exist or error occured"
-
-commands:
- # Permissions that control what commands players can use
- # you can add unlimited amount of whitelists
-
- # this will be automatically given to players by default
- default:
- - glist
- - server
- # commandwhitelist.commands.example
- example:
- - example
\ No newline at end of file
diff --git a/src/main/resources/config.toml b/src/main/resources/config.toml
deleted file mode 100644
index 8d43452..0000000
--- a/src/main/resources/config.toml
+++ /dev/null
@@ -1,24 +0,0 @@
-# This is velocity version of the config.
-[messages]
-prefix="CommandWhitelist > "
-command-denied="No such command."
-subcommand-denied="You cannot use this subcommand"
-no-permission="&cYou don't have permission to do this."
-no-such-subcommand="&cNo subcommand by that name."
-config-reloaded="&eConfiguration reloaded."
-added-to-whitelist="&eWhitelisted command &6%s &efor permission &6%s"
-removed-from-whitelist="&eRemoved command &6%s &efrom permission &6%s"
-group-doesnt-exist="&cGroup doesn't exist or error occured"
-
-# Permissions that control what commands players can use
-# you can add unlimited amount of whitelists
-[commands]
-# this will be automatically given to players by default
-default= [
- "velocity",
- "server",
-]
-# commandwhitelist.commands.example
-example= [
- "example"
-]
\ No newline at end of file
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
deleted file mode 100644
index 5830e94..0000000
--- a/src/main/resources/config.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-messages:
- prefix: "CommandWhitelist > "
- command-denied: "No such command."
- subcommand-denied: "You cannot use this subcommand"
- no-permission: "&cYou don't have permission to do this."
- no-such-subcommand: "&cNo subcommand by that name."
- config-reloaded: "&eConfiguration reloaded."
- added-to-whitelist: "&eWhitelisted command &6%s &efor permission &6%s"
- removed-from-whitelist: "&eRemoved command &6%s &efrom permission &6%s"
- group-doesnt-exist: "&cGroup doesn't exist or error occured"
-
-# To cover the 1% of plugins that don't register their commands and/or aliases properly.
-# Do not enable if you don't have issues with aliased commands.
-# This requires server restart to take effect.
-use-protocollib-to-detect-commands: false
-
-commands:
- # Permissions that control what commands players can use
- # you can add unlimited amount of whitelists
-
- # this will be automatically given to players by default
- default:
- - help
- - spawn
- - bal
- - balance
- - baltop
- - pay
- - r
- - msg
- - tpa
- - tpahere
- - tpaccept
- - tpdeny
- - warp
- # commandwhitelist.commands.example
- example:
- - example
-
-tabcompletions:
- # This one is working as a blacklist. Player will not be able
- # to see/use listed subcommands unless they have specified permission
- # commandwhitelist.subcommands.example
- example:
- - help about
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
deleted file mode 100644
index 1dac641..0000000
--- a/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-name: CommandWhitelist
-prefix: CommandWhitelist
-version: ${project.version}
-api-version: 1.13
-main: eu.endermite.commandwhitelist.spigot.CommandWhitelist
-authors: [YouHaveTrouble]
-softdepend:
- - ProtocolLib
-description: Control what commands players can use
-commands:
- commandwhitelist:
- aliases:
- - cw
- usage: /commandwhitelist [args]
-permissions:
- commandwhitelist.reload:
- default: op
- commandwhitelist.admin:
- default: op
- commandwhitelist.bypass:
- default: op
\ No newline at end of file