From d4396fdba2046716e20c6f7e4118b8ac7d022cd7 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sun, 25 Apr 2021 19:01:27 +0200 Subject: [PATCH] reorganize stuff --- CommandWhitelistBukkit/pom.xml | 98 ++++++++++++++ .../bukkit/CommandWhitelistBukkit.java | 114 ++++++++++++++++ .../bukkit/command/BukkitCommandHandler.java | 42 ++++++ .../bukkit/command/MainCommand.java | 66 +++++++++ .../PacketCommandPreProcessListener.java | 60 +++++++++ .../PlayerCommandPreProcessListener.java | 45 +++++++ .../listeners/PlayerCommandSendListener.java | 6 +- .../listeners/TabCompleteBlockerListener.java | 24 ++++ .../bukkit}/metrics/BukkitMetrics.java | 2 +- CommandWhitelistCommon/pom.xml | 60 +++++++++ .../commandwhitelist/common/CWGroup.java | 0 .../commandwhitelist/common/CommandUtil.java | 56 ++++++++ .../commandwhitelist/common/ConfigCache.java | 19 ++- .../common/commands/CWCommand.java | 53 ++++++++ CommandWhitelistVelocity/pom.xml | 103 ++++++++++++++ .../velocity/CommandWhitelistVelocity.java | 76 ++++++----- .../velocity/command/VelocityMainCommand.java | 3 +- .../velocity/config/VelocityConfigCache.java | 0 .../src}/main/resources/velocity-plugin.json | 2 +- CommandWhitelistWaterfall/pom.xml | 91 +++++++++++++ .../waterfall/CommandWhitelistWaterfall.java | 106 +++++++++++++++ .../waterfall/command/BungeeMainCommand.java | 74 ++++++++++ .../listeners/BungeeChatEventListener.java | 48 +++++++ .../WaterfallDefineCommandsListener.java | 9 +- .../waterfall}/metrics/BungeeMetrics.java | 2 +- pom.xml | 64 +++------ .../bungee/CommandWhitelistBungee.java | 80 ----------- .../bungee/command/BungeeMainCommand.java | 127 ------------------ .../bungee/config/BungeeConfigCache.java | 80 ----------- .../listeners/BungeeChatEventListener.java | 47 ------- .../commandwhitelist/common/CommandsList.java | 66 --------- .../spigot/CommandWhitelist.java | 71 ---------- .../spigot/command/MainCommand.java | 62 --------- .../LegacyPlayerTabChatCompleteListener.java | 55 -------- .../listeners/PacketCommandSendListener.java | 68 ---------- .../PlayerCommandPreProcessListener.java | 46 ------- .../listeners/TabCompleteBlockerListener.java | 33 ----- src/main/resources/bungee.yml | 4 - src/main/resources/bungeeconfig.yml | 22 --- src/main/resources/config.toml | 24 ---- src/main/resources/config.yml | 45 ------- src/main/resources/plugin.yml | 21 --- 42 files changed, 1125 insertions(+), 949 deletions(-) create mode 100644 CommandWhitelistBukkit/pom.xml create mode 100644 CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java create mode 100644 CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandHandler.java create mode 100644 CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommand.java create mode 100644 CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java create mode 100644 CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java rename {src/main/java/eu/endermite/commandwhitelist/spigot => CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit}/listeners/PlayerCommandSendListener.java (68%) create mode 100644 CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java rename {src/main/java/eu/endermite/commandwhitelist/spigot => CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit}/metrics/BukkitMetrics.java (99%) create mode 100644 CommandWhitelistCommon/pom.xml rename {src => CommandWhitelistCommon/src}/main/java/eu/endermite/commandwhitelist/common/CWGroup.java (100%) create mode 100644 CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java rename {src => CommandWhitelistCommon/src}/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java (90%) create mode 100644 CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/commands/CWCommand.java create mode 100644 CommandWhitelistVelocity/pom.xml rename {src => CommandWhitelistVelocity/src}/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java (60%) rename {src => CommandWhitelistVelocity/src}/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java (96%) rename {src => CommandWhitelistVelocity/src}/main/java/eu/endermite/commandwhitelist/velocity/config/VelocityConfigCache.java (100%) rename {src => CommandWhitelistVelocity/src}/main/resources/velocity-plugin.json (70%) create mode 100644 CommandWhitelistWaterfall/pom.xml create mode 100644 CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java create mode 100644 CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/command/BungeeMainCommand.java create mode 100644 CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java rename {src/main/java/eu/endermite/commandwhitelist/bungee => CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall}/listeners/WaterfallDefineCommandsListener.java (74%) rename {src/main/java/eu/endermite/commandwhitelist/bungee => CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall}/metrics/BungeeMetrics.java (99%) delete mode 100644 src/main/java/eu/endermite/commandwhitelist/bungee/CommandWhitelistBungee.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/bungee/command/BungeeMainCommand.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/bungee/config/BungeeConfigCache.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/bungee/listeners/BungeeChatEventListener.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/common/CommandsList.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/spigot/CommandWhitelist.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/spigot/command/MainCommand.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/spigot/listeners/LegacyPlayerTabChatCompleteListener.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PacketCommandSendListener.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/spigot/listeners/PlayerCommandPreProcessListener.java delete mode 100644 src/main/java/eu/endermite/commandwhitelist/spigot/listeners/TabCompleteBlockerListener.java delete mode 100644 src/main/resources/bungee.yml delete mode 100644 src/main/resources/bungeeconfig.yml delete mode 100644 src/main/resources/config.toml delete mode 100644 src/main/resources/config.yml delete mode 100644 src/main/resources/plugin.yml 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