diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java index 568ddcf..ffcadfc 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java @@ -61,8 +61,10 @@ public class CommandWhitelistBukkit extends JavaPlugin { private void reloadPluginConfig() { File configFile = new File("plugins/CommandWhitelist/config.yml"); - configCache = new ConfigCache(configFile, true); - + if (configCache == null) + configCache = new ConfigCache(configFile, true, getSLF4JLogger()); + else + configCache.reloadConfig(); } public void reloadPluginConfig(CommandSender sender) { @@ -91,8 +93,9 @@ public class CommandWhitelistBukkit extends JavaPlugin { * @param player Bukkit Player * @return commands available to the player */ - public static HashSet getCommands(org.bukkit.entity.Player player, HashMap groups) { + public static HashSet getCommands(org.bukkit.entity.Player player) { HashSet commandList = new HashSet<>(); + HashMap groups = configCache.getGroupList(); for (Map.Entry s : groups.entrySet()) { if (s.getKey().equalsIgnoreCase("default")) commandList.addAll(s.getValue().getCommands()); @@ -106,13 +109,13 @@ public class CommandWhitelistBukkit extends JavaPlugin { * @param player Bukkit Player * @return subcommands unavailable for the player */ - public static HashSet getSuggestions(org.bukkit.entity.Player player, HashMap groups) { + public static HashSet getSuggestions(org.bukkit.entity.Player player) { HashSet suggestionList = new HashSet<>(); + HashMap groups = configCache.getGroupList(); for (Map.Entry s : groups.entrySet()) { if (s.getKey().equalsIgnoreCase("default")) suggestionList.addAll(s.getValue().getSubCommands()); - if (player.hasPermission("commandwhitelist.group." + s.getKey())) - continue; + 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/listeners/PacketCommandPreProcessListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java index 6ae6045..610f65e 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java @@ -28,16 +28,12 @@ public class PacketCommandPreProcessListener { public void onPacketReceiving(PacketEvent event) { PacketContainer packet = event.getPacket(); String string = packet.getStrings().read(0); - if (!string.startsWith("/")) - return; + if (!string.startsWith("/")) return; Player player = event.getPlayer(); - if (player.hasPermission("commandwhitelist.bypass")) - return; - - ConfigCache configCache = CommandWhitelistBukkit.getConfigCache(); + if (player.hasPermission("commandwhitelist.bypass")) return; String label = CommandUtil.getCommandLabel(string.toLowerCase()); - HashSet commands = CommandWhitelistBukkit.getCommands(player, configCache.getGroupList()); + HashSet commands = CommandWhitelistBukkit.getCommands(player); if (!commands.contains(label)) { event.setCancelled(true); ConfigCache config = CommandWhitelistBukkit.getConfigCache(); @@ -45,7 +41,7 @@ public class PacketCommandPreProcessListener { return; } - HashSet bannedSubCommands = CommandWhitelistBukkit.getSuggestions(player, configCache.getGroupList()); + HashSet bannedSubCommands = CommandWhitelistBukkit.getSuggestions(player); for (String bannedSubCommand : bannedSubCommands) { if (string.toLowerCase().substring(1).startsWith(bannedSubCommand)) { event.setCancelled(true); 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 index 8bc3e52..1ccef66 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandPreProcessListener.java @@ -15,14 +15,12 @@ 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; + 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()); + HashSet commands = CommandWhitelistBukkit.getCommands(player); if (!commands.contains(label)) { event.setCancelled(true); ConfigCache config = CommandWhitelistBukkit.getConfigCache(); @@ -30,7 +28,7 @@ public class PlayerCommandPreProcessListener implements Listener { return; } - HashSet bannedSubCommands = CommandWhitelistBukkit.getSuggestions(player, configCache.getGroupList()); + HashSet bannedSubCommands = CommandWhitelistBukkit.getSuggestions(player); for (String bannedSubCommand : bannedSubCommands) { if (event.getMessage().toLowerCase().substring(1).startsWith(bannedSubCommand)) { event.setCancelled(true); diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java index a591db4..0869678 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PlayerCommandSendListener.java @@ -8,12 +8,11 @@ import org.bukkit.event.Listener; import java.util.*; public class PlayerCommandSendListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.NORMAL) public void PlayerCommandSendEvent(org.bukkit.event.player.PlayerCommandSendEvent event) { Player player = event.getPlayer(); - if (player.hasPermission("commandwhitelist.bypass")) - return; - HashSet commandList = CommandWhitelistBukkit.getCommands(player, CommandWhitelistBukkit.getConfigCache().getGroupList()); + if (player.hasPermission("commandwhitelist.bypass")) return; + HashSet commandList = CommandWhitelistBukkit.getCommands(player); 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 index d6f2d16..9b61efb 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java @@ -8,16 +8,15 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; public class TabCompleteBlockerListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGHEST) public void onCommandTabComplete(org.bukkit.event.server.TabCompleteEvent event) { - if (!(event.getSender() instanceof Player)) - return; + 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()) + CommandWhitelistBukkit.getSuggestions(player) ) ); } diff --git a/CommandWhitelistCommon/pom.xml b/CommandWhitelistCommon/pom.xml index bf84da6..8dea14a 100644 --- a/CommandWhitelistCommon/pom.xml +++ b/CommandWhitelistCommon/pom.xml @@ -47,15 +47,42 @@ + + + jitpack.io + https://jitpack.io + + + velocitypowered-repo + https://repo.velocitypowered.com/releases/ + + + - - org.yaml - snakeyaml - 1.28 + com.github.Thatsmusic99 + ConfigurationMaster + v2.0.0-ALPHA-2 compile - + + com.velocitypowered + velocity-api + 1.1.0 + provided + + + com.destroystokyo.paper + paper-api + 1.16.5-R0.1-SNAPSHOT + provided + + + io.github.waterfallmc + waterfall-api + 1.16-R0.5-SNAPSHOT + provided + \ No newline at end of file diff --git a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java index 724c7d0..3c3b980 100644 --- a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java +++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java @@ -8,18 +8,22 @@ public class CommandUtil { /** * Filters blocked command suggestions from provided collection of strings - * @param buffer Command buffer - * @param suggestions Full suggestions list + * + * @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 slast = getLastArgument(s); String scommand = s.replace(slast, ""); - cmd = cmd.replace(getLastArgument(cmd), ""); - if (cmd.substring(1).startsWith("/" + scommand)) { + String[] cmdSplit = buffer.split(" "); + StringBuilder cmdBuilder = new StringBuilder(); + for (int i = 0; i <= cmdSplit.length - 1; i++) + cmdBuilder.append(cmdSplit[i]).append(" "); + String cmd = cmdBuilder.toString(); + if (cmd.startsWith("/" + scommand)) { while (suggestions.contains(slast)) suggestions.remove(slast); } @@ -33,8 +37,7 @@ public class CommandUtil { */ public static String getLastArgument(String cmd) { String[] parts = cmd.split(" "); - if (parts.length <= 1) - return ""; + if (parts.length <= 1) return ""; String last = ""; for (String part : parts) { last = part; diff --git a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java index 097496c..6c4b7f0 100644 --- a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java +++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/ConfigCache.java @@ -1,36 +1,62 @@ package eu.endermite.commandwhitelist.common; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; +import io.github.thatsmusic99.configurationmaster.api.ConfigFile; +import io.github.thatsmusic99.configurationmaster.api.ConfigSection; + import java.io.*; import java.util.*; public class ConfigCache { private final File configFile; + private ConfigFile config; + private final Object logger; 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) { + public ConfigCache(File configFile, boolean canDoProtocolLib, Object logger){ this.configFile = configFile; this.canDoProtocolLib = canDoProtocolLib; - if (!reloadConfig()) - reloadConfig(); + this.logger = logger; + + reloadConfig(); } - public void saveDefaultConfig(Map data, File configFile, boolean canDoProtocolLib) { + public boolean reloadConfig() { - data.put("messages", processMessages()); + boolean firstLoad = createFiles(); + config = ConfigFile.loadConfig(configFile); - if (canDoProtocolLib) { - data.put("use_protocollib_to_detect_commands", useProtocolLib); + config.addDefault("messages.prefix", "CommandWhitelist > "); + config.addDefault("messages.command_denied", "No such command."); + config.addDefault("messages.subcommand_denied", "You cannot use this subcommand"); + config.addDefault("messages.no_permission", "You don't have permission to do this."); + config.addDefault("messages.no_such_subcommand", "No subcommand by that name."); + config.addDefault("messages.config_reloaded", "Configuration reloaded."); + config.addDefault("messages.added_to_whitelist", "Whitelisted command %s for permission %s"); + config.addDefault("messages.removed_from_whitelist", "Removed command %s from permission %s"); + config.addDefault("messages.group_doesnt_exist", "Group doesn't exist or error occured"); + + config.addComment("messages", "Messages use MiniMessage formatting (https://docs.adventure.kyori.net/minimessage.html#format)"); + + if (canDoProtocolLib) + config.addDefault("use_protocollib", false, "Do not enable if you don't have issues with aliased commands.\nThis requires server restart to take effect."); + + if (firstLoad) { + List exampleCommands = new ArrayList<>(); + exampleCommands.add("example"); + List exampleSubCommands = new ArrayList<>(); + exampleSubCommands.add("example of"); + + config.addDefault("groups.example.commands", exampleCommands, "This is the WHITELIST of commands that players will be able to see/use in the group \"example\""); + config.addDefault("groups.example.subcommands", exampleSubCommands, "This is the BLACKLIST of subcommands that players will NOT be able to see/use in the group \"example\""); + config.addComment("groups.example", "All groups except from default require commandwhitelist.group. permission\ncommandwhitelist.group.example in this case\n If you wish to leave the list empty, put \"commands: []\" or \"subcommands: []\""); } List defaultCommands = new ArrayList<>(); - List defaultSubcommands = new ArrayList<>(); defaultCommands.add("help"); defaultCommands.add("spawn"); defaultCommands.add("bal"); @@ -44,73 +70,69 @@ public class ConfigCache { defaultCommands.add("tpaccept"); defaultCommands.add("tpdeny"); defaultCommands.add("warp"); - + List defaultSubcommands = new ArrayList<>(); defaultSubcommands.add("help about"); - HashMap groups = new LinkedHashMap<>(); + config.addDefault("groups.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()); - //TODO find a way to update groups - data.putIfAbsent("groups", groups); - - DumperOptions dumperOptions = new DumperOptions(); - dumperOptions.setPrettyFlow(true); - dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - dumperOptions.setAllowUnicode(true); - Yaml yaml = new Yaml(dumperOptions); - try { - FileWriter writer = new FileWriter(configFile.getPath()); - yaml.dump(data, writer); - } catch (IOException e) { - e.printStackTrace(); + prefix = config.getString("messages.prefix"); + command_denied = config.getString("messages.command_denied"); + subcommand_denied = config.getString("messages.subcommand_denied"); + no_permission = config.getString("messages.no_permission"); + no_such_subcommand = config.getString("messages.no_such_subcommand"); + config_reloaded = config.getString("messages.config_reloaded"); + added_to_whitelist = config.getString("messages.added_to_whitelist"); + removed_from_whitelist = config.getString("messages.removed_from_whitelist"); + group_doesnt_exist = config.getString("messages.group_doesnt_exist"); + + ConfigSection groupSection = config.getConfigSection("groups"); + for (String key : groupSection.getKeys(false)) { + groupList.put("key", loadCWGroup(key, groupSection)); } + return saveConfig(); } - public boolean reloadConfig() { - HashMap config = new LinkedHashMap<>(); - Yaml yaml = new Yaml(); + private boolean saveConfig() { try { - FileInputStream fileInputStream = new FileInputStream(configFile); - config = yaml.load(fileInputStream); - } catch (FileNotFoundException ignored) { - saveDefaultConfig(config, configFile, canDoProtocolLib); + config.save(); + return true; + } catch (IOException e) { return false; } - - HashMap messages = (HashMap) config.get("messages"); - this.prefix = messages.get("prefix"); - this.command_denied = messages.get("command_denied"); - this.no_such_subcommand = messages.get("no_such_subcommand"); - this.no_permission = messages.get("no_permission"); - this.config_reloaded = messages.get("config_reloaded"); - this.added_to_whitelist = messages.get("added_to_whitelist"); - this.removed_from_whitelist = messages.get("removed_from_whitelist"); - this.group_doesnt_exist = messages.get("group_doesnt_exist"); - this.subcommand_denied = messages.get("subcommand_denied"); - - if (canDoProtocolLib) - this.useProtocolLib = (boolean) config.get("use_protocollib_to_detect_commands"); - - - - HashMap> groups = (HashMap>) config.get("groups"); - for (Map.Entry> entry : groups.entrySet()) { - groupList.put(entry.getKey(), loadCWGroup(entry.getKey(), entry.getValue())); - } - - saveDefaultConfig(config, configFile, canDoProtocolLib); - - return true; } - public CWGroup loadCWGroup(String id, HashMap map) { - List subCommands = new ArrayList<>((Collection) map.get("subcommands")); - List commands = new ArrayList<>((Collection) map.get("commands")); + private boolean createFiles() { + boolean creatingFiles = false; + try { + File parent = new File(configFile.getParent()); + if (!parent.exists()) + parent.mkdir(); + if (!configFile.exists()) { + configFile.createNewFile(); + creatingFiles = true; + } + return creatingFiles; + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + public CWGroup loadCWGroup(String id, ConfigSection section) { + HashSet commands = new HashSet<>(); + for (String cmd : section.getStringList(id+".commands")) { + if (cmd.contains(" ")) { + String[] cmdSplit = cmd.split(" "); + warn("CommandWhitelist - \""+cmd+"\" is not a command. Loading it as \""+cmdSplit[0]+"\"."); + cmd = cmdSplit[0]; + } + + if (commands.contains(cmd)) continue; + commands.add(cmd); + } + + List subCommands = section.getStringList(id+".subcommands"); return new CWGroup(id, commands, subCommands); } @@ -118,25 +140,15 @@ public class ConfigCache { return groupList; } - public HashMap processMessages() { - HashMap messages = new LinkedHashMap<>(); - messages.put("prefix", stringOrDefault(prefix, "CommandWhitelist > ")); - messages.put("command_denied", stringOrDefault(command_denied, "No such command.")); - messages.put("subcommand_denied", stringOrDefault(subcommand_denied, "You cannot use this subcommand")); - messages.put("no_permission", stringOrDefault(no_permission, "You don't have permission to do this.")); - messages.put("no_such_subcommand", stringOrDefault(no_such_subcommand, "No subcommand by that name.")); - messages.put("config_reloaded", stringOrDefault(config_reloaded, "Configuration reloaded.")); - messages.put("added_to_whitelist", stringOrDefault(added_to_whitelist, "Whitelisted command %s for permission %s")); - messages.put("removed_from_whitelist", stringOrDefault(removed_from_whitelist, "Removed command %s from permission %s")); - messages.put("group_doesnt_exist", stringOrDefault(group_doesnt_exist, "Group doesn't exist or error occured")); - return messages; - } - - public String stringOrDefault(String value, String def) { - if (value != null) - return value; - else - return def; + private void warn(String log) { + if (logger instanceof org.slf4j.Logger) { + ((org.slf4j.Logger) logger).warn(log); + return; + } + if (logger instanceof java.util.logging.Logger) { + ((java.util.logging.Logger) logger).warning(log); + return; + } } } diff --git a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java index e1933c0..658492e 100644 --- a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java +++ b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java @@ -15,6 +15,7 @@ import eu.endermite.commandwhitelist.velocity.command.VelocityMainCommand; 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.nio.file.Path; @@ -28,16 +29,23 @@ public class CommandWhitelistVelocity { private static ProxyServer server; private static ConfigCache configCache; private static Path folder; + private static Logger logger; @Inject public CommandWhitelistVelocity(ProxyServer server, Logger logger, @DataDirectory final Path folder) { CommandWhitelistVelocity.server = server; CommandWhitelistVelocity.folder = folder; CommandWhitelistVelocity.plugin = this; + CommandWhitelistVelocity.logger = logger; + } private static void reloadConfig() { - configCache = new ConfigCache(new File(String.valueOf(folder), "config.yml"), false); + if (configCache == null) + configCache = new ConfigCache(new File(String.valueOf(folder), "config.yml"), false, logger); + else + configCache.reloadConfig(); + } public static void reloadConfig(CommandSource source) { @@ -56,9 +64,9 @@ public class CommandWhitelistVelocity { @Subscribe public void onUserCommandSendEvent(PlayerAvailableCommandsEvent event) { - if (event.getPlayer().hasPermission("commandwhitelist.bypass")) - return; - HashSet allowedCommands = CommandWhitelistVelocity.getCommands(event.getPlayer(), configCache.getGroupList()); + Player player = event.getPlayer(); + if (player.hasPermission("commandwhitelist.bypass")) return; + HashSet allowedCommands = CommandWhitelistVelocity.getCommands(player); event.getRootNode().getChildren().removeIf((commandNode) -> server.getCommandManager().hasCommand(commandNode.getName()) && !allowedCommands.contains(commandNode.getName()) @@ -67,14 +75,12 @@ public class CommandWhitelistVelocity { @Subscribe public void onUserCommandExecuteEvent(com.velocitypowered.api.event.command.CommandExecuteEvent event) { - if (!(event.getCommandSource() instanceof Player)) - return; + if (!(event.getCommandSource() instanceof Player)) return; Player player = (Player) event.getCommandSource(); - if (player.hasPermission("commandwhitelist.bypass")) - return; + if (player.hasPermission("commandwhitelist.bypass")) return; - HashSet allowedCommands = CommandWhitelistVelocity.getCommands(player, configCache.getGroupList()); + HashSet allowedCommands = CommandWhitelistVelocity.getCommands(player); String command = event.getCommand().split(" ")[0]; if (server.getCommandManager().hasCommand(command) && !allowedCommands.contains(command)) @@ -89,7 +95,8 @@ public class CommandWhitelistVelocity { * @param player Velocity Player * @return commands available to the player */ - public static HashSet getCommands(Player player, HashMap groups) { + public static HashSet getCommands(Player player) { + HashMap groups = configCache.getGroupList(); HashSet commandList = new HashSet<>(); for (Map.Entry s : groups.entrySet()) { if (s.getKey().equalsIgnoreCase("default")) diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java index 6a58002..8dde3ad 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java @@ -55,15 +55,10 @@ public final class CommandWhitelistWaterfall extends Plugin { } public void loadConfig() { - try { - if (!getDataFolder().exists()) { - getDataFolder().mkdir(); - } - - configCache = new ConfigCache(new File(getDataFolder(), "config.yml"), false); - } catch (Exception e) { - e.printStackTrace(); - } + if (configCache == null) + configCache = new ConfigCache(new File(getDataFolder(), "config.yml"), false, getLogger()); + else + configCache.reloadConfig(); } public void loadConfigAsync(CommandSender sender) { @@ -77,8 +72,9 @@ public final class CommandWhitelistWaterfall extends Plugin { * @param player Bungee Player * @return commands available to the player */ - public static HashSet getCommands(ProxiedPlayer player, HashMap groups) { + public static HashSet getCommands(ProxiedPlayer player) { HashSet commandList = new HashSet<>(); + HashMap groups = configCache.getGroupList(); for (Map.Entry s : groups.entrySet()) { if (s.getKey().equalsIgnoreCase("default")) commandList.addAll(s.getValue().getCommands()); @@ -92,7 +88,8 @@ public final class CommandWhitelistWaterfall extends Plugin { * @param player Bungee Player * @return subcommands unavailable for the player */ - public static HashSet getSuggestions(ProxiedPlayer player, HashMap groups) { + public static HashSet getSuggestions(ProxiedPlayer player) { + HashMap groups = configCache.getGroupList(); HashSet suggestionList = new HashSet<>(); for (Map.Entry s : groups.entrySet()) { if (s.getKey().equalsIgnoreCase("default")) 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 index 907d14f..d50f7df 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeChatEventListener.java @@ -29,14 +29,14 @@ public class BungeeChatEventListener implements Listener { BungeeAudiences audiences = CommandWhitelistWaterfall.getAudiences(); String label = CommandUtil.getCommandLabel(command); - HashSet commands = CommandWhitelistWaterfall.getCommands(player, configCache.getGroupList()); + HashSet commands = CommandWhitelistWaterfall.getCommands(player); 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()); + HashSet bannedSubCommands = CommandWhitelistWaterfall.getSuggestions(player); for (String bannedSubCommand : bannedSubCommands) { if (command.toLowerCase().substring(1).startsWith(bannedSubCommand)) { event.setCancelled(true); diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java index 17de0c0..107cdfc 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/WaterfallDefineCommandsListener.java @@ -17,7 +17,7 @@ public class WaterfallDefineCommandsListener implements Listener { if (player.hasPermission("commandwhitelist.bypass")) return; HashMap commandHashMap = new HashMap<>(); - CommandWhitelistWaterfall.getCommands(player, CommandWhitelistWaterfall.getConfigCache().getGroupList()).forEach(cmdName -> + CommandWhitelistWaterfall.getCommands(player).forEach(cmdName -> CommandWhitelistWaterfall.getPlugin().getProxy().getPluginManager().getCommands() .stream() .filter(commandEntry -> cmdName.equalsIgnoreCase(commandEntry.getValue().getName())) diff --git a/pom.xml b/pom.xml index ab6c942..ccf9b64 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,7 @@ net.kyori adventure-api - 4.7.0 + 4.8.0 compile