From 34d47146252fa30caa42d7ac5d156ccbd23b6f76 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 1 Jun 2022 19:26:47 +0200 Subject: [PATCH] Moves permission nodes and command names to an enum to reduce redundancy Also fixes some cases where tab completions are provided even if all arguments have been supplied --- pom.xml | 2 +- .../command/CommandConfig.java | 7 +- .../stargatecommand/command/CommandDial.java | 3 +- .../command/CommandStarGateCommand.java | 9 +-- .../command/CommandVisualizer.java | 3 +- .../command/ConfigTabCompleter.java | 12 +++- .../command/DialTabCompleter.java | 11 ++- .../command/StargateCommandTabCompleter.java | 25 +++---- .../command/TabCommandInfo.java | 3 +- .../command/VisualizerTabCompleter.java | 6 ++ .../property/StargateCommandCommand.java | 71 +++++++++++++++++++ 11 files changed, 122 insertions(+), 30 deletions(-) create mode 100644 src/main/java/net/knarcraft/stargatecommand/property/StargateCommandCommand.java diff --git a/pom.xml b/pom.xml index 66bc8f6..62f7e04 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ org.jetbrains annotations - RELEASE + 23.0.0 compile diff --git a/src/main/java/net/knarcraft/stargatecommand/command/CommandConfig.java b/src/main/java/net/knarcraft/stargatecommand/command/CommandConfig.java index 58a386d..f0e4562 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/CommandConfig.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/CommandConfig.java @@ -6,6 +6,7 @@ import net.TheDgtl.Stargate.config.OptionDataType; import net.knarcraft.stargatecommand.formatting.StringFormatter; import net.knarcraft.stargatecommand.formatting.TranslatableMessage; import net.knarcraft.stargatecommand.formatting.Translator; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import net.md_5.bungee.api.ChatColor; import org.apache.commons.lang.StringUtils; import org.bukkit.command.Command; @@ -45,7 +46,7 @@ public class CommandConfig implements CommandExecutor { public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { if (commandSender instanceof Player player) { - if (!player.hasPermission("stargate.command.config")) { + if (!player.hasPermission(StargateCommandCommand.CONFIG.getPermissionNode())) { player.sendMessage(getTranslatedErrorMessage(TranslatableMessage.PERMISSION_DENIED)); return true; } @@ -262,8 +263,8 @@ public class CommandConfig implements CommandExecutor { stringValue = "[" + StringUtils.join((String[]) defaultValue, ",") + "]"; } return StringFormatter.replacePlaceholders(Translator.getTranslatedMessage( - TranslatableMessage.CONFIG_OPTION_DESCRIPTION), new String[]{"{name}", "{description}", "{value}"}, - new String[]{option.name(), option.getDescription(), stringValue}); + TranslatableMessage.CONFIG_OPTION_DESCRIPTION), new String[]{"{name}", "{description}", + "{value}"}, new String[]{option.name(), option.getDescription(), stringValue}); } } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java b/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java index dae3a30..e6ad748 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/CommandDial.java @@ -7,6 +7,7 @@ import net.TheDgtl.Stargate.network.RegistryAPI; import net.TheDgtl.Stargate.network.portal.RealPortal; import net.knarcraft.stargatecommand.StargateCommand; import net.knarcraft.stargatecommand.manager.OverrideManager; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import net.knarcraft.stargatecommand.util.PortalFinderHelper; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -40,7 +41,7 @@ public class CommandDial implements CommandExecutor { commandSender.sendMessage("This command can only be used by players"); return true; } - if (!player.hasPermission("stargate.command.dial")) { + if (!player.hasPermission(StargateCommandCommand.DIAL.getPermissionNode())) { player.sendMessage("Permission Denied"); return true; } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/CommandStarGateCommand.java b/src/main/java/net/knarcraft/stargatecommand/command/CommandStarGateCommand.java index 3a70a2e..92a0e56 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/CommandStarGateCommand.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/CommandStarGateCommand.java @@ -2,6 +2,7 @@ package net.knarcraft.stargatecommand.command; import net.TheDgtl.Stargate.api.StargateAPI; import net.TheDgtl.Stargate.config.ConfigurationOption; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import org.apache.commons.lang.ArrayUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -34,14 +35,14 @@ public class CommandStarGateCommand implements CommandExecutor { @NotNull String[] args) { if (args.length > 0) { String[] subArgs = (String[]) ArrayUtils.remove(args, 0); - if (args[0].equalsIgnoreCase("config")) { + if (args[0].equalsIgnoreCase(StargateCommandCommand.CONFIG.getName())) { return new CommandConfig(stargateAPI.getConfigurationAPI(), bannedConfigOptions).onCommand( commandSender, command, s, subArgs); - } else if (args[0].equalsIgnoreCase("dial")) { + } else if (args[0].equalsIgnoreCase(StargateCommandCommand.DIAL.getName())) { return new CommandDial(stargateAPI).onCommand(commandSender, command, s, subArgs); - } else if (args[0].equalsIgnoreCase("visualizer")) { + } else if (args[0].equalsIgnoreCase(StargateCommandCommand.VISUALIZER.getName())) { return new CommandVisualizer(stargateAPI.getRegistry()).onCommand(commandSender, command, s, subArgs); - } else if (args[0].equalsIgnoreCase("info")) { + } else if (args[0].equalsIgnoreCase(StargateCommandCommand.INFO.getName())) { return new TabCommandInfo(stargateAPI.getRegistry()).onCommand(commandSender, command, s, subArgs); } } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java b/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java index 8a85d88..115e0c7 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/CommandVisualizer.java @@ -6,6 +6,7 @@ import net.TheDgtl.Stargate.network.portal.FixedPortal; import net.TheDgtl.Stargate.network.portal.Portal; import net.TheDgtl.Stargate.network.portal.PortalFlag; import net.knarcraft.stargatecommand.StargateCommand; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -31,7 +32,7 @@ public class CommandVisualizer implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { - if (!commandSender.hasPermission("stargate.command.visualizer")) { + if (!commandSender.hasPermission(StargateCommandCommand.VISUALIZER.getPermissionNode())) { commandSender.sendMessage("Permission Denied"); return true; } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/ConfigTabCompleter.java b/src/main/java/net/knarcraft/stargatecommand/command/ConfigTabCompleter.java index aab2f81..2966b4f 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/ConfigTabCompleter.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/ConfigTabCompleter.java @@ -2,6 +2,7 @@ package net.knarcraft.stargatecommand.command; import net.TheDgtl.Stargate.config.ConfigurationOption; import net.TheDgtl.Stargate.config.OptionDataType; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -37,10 +38,18 @@ public class ConfigTabCompleter implements TabCompleter { @Override public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + //Don't display any info to non-authorized users + if (!commandSender.hasPermission(StargateCommandCommand.CONFIG.getPermissionNode())) { + return new ArrayList<>(); + } + if (booleans == null || integers == null || chatColors == null) { initializeAutoCompleteLists(); } - if (args.length > 1) { + + if (args.length > 2) { + return new ArrayList<>(); + } else if (args.length > 1) { ConfigurationOption selectedOption; try { selectedOption = ConfigurationOption.valueOf(args[0].toUpperCase()); @@ -146,7 +155,6 @@ public class ConfigTabCompleter implements TabCompleter { doubles.add("0.1"); } - /** * Initializes the list of chat colors */ diff --git a/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java b/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java index 837a1fc..778ce27 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/DialTabCompleter.java @@ -7,6 +7,7 @@ import net.TheDgtl.Stargate.network.RegistryAPI; import net.TheDgtl.Stargate.network.portal.Portal; import net.TheDgtl.Stargate.network.portal.RealPortal; import net.knarcraft.stargatecommand.StargateCommand; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -44,8 +45,12 @@ public class DialTabCompleter implements TabCompleter { @Override public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + //Don't display any info to non-authorized users + if (!commandSender.hasPermission(StargateCommandCommand.DIAL.getPermissionNode())) { + return new ArrayList<>(); + } + if (!(commandSender instanceof Player player)) { - commandSender.sendMessage("This command can only be used by players"); return new ArrayList<>(); } @@ -57,7 +62,9 @@ public class DialTabCompleter implements TabCompleter { //Populate the collections with available networks and portals populateNetworksAndPortals(permissionManager, availableNetworks, availablePortals); - if (args.length > 1) { + if (args.length > 2) { + return new ArrayList<>(); + } else if (args.length > 1) { Network network = registryAPI.getNetwork(args[0].replace(spaceReplacement, ' '), false); if (network != null && availablePortals.containsKey(network)) { return filterMatching(availablePortals.get(network), args[1].replace(spaceReplacement, ' ')); diff --git a/src/main/java/net/knarcraft/stargatecommand/command/StargateCommandTabCompleter.java b/src/main/java/net/knarcraft/stargatecommand/command/StargateCommandTabCompleter.java index 6a59b8f..a6e2e91 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/StargateCommandTabCompleter.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/StargateCommandTabCompleter.java @@ -2,6 +2,7 @@ package net.knarcraft.stargatecommand.command; import net.TheDgtl.Stargate.api.StargateAPI; import net.TheDgtl.Stargate.config.ConfigurationOption; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import org.apache.commons.lang.ArrayUtils; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -48,13 +49,13 @@ public class StargateCommandTabCompleter implements TabCompleter { //Get the actual arguments for the specified sub-command String[] subArgs = (String[]) ArrayUtils.remove(args, 0); - if (args[0].equalsIgnoreCase("config")) { + if (args[0].equalsIgnoreCase(StargateCommandCommand.CONFIG.getName())) { return new ConfigTabCompleter(bannedConfigOptions).onTabComplete(commandSender, command, s, subArgs); - } else if (args[0].equalsIgnoreCase("dial")) { + } else if (args[0].equalsIgnoreCase(StargateCommandCommand.DIAL.getName())) { return new DialTabCompleter(stargateAPI).onTabComplete(commandSender, command, s, subArgs); - } else if (args[0].equalsIgnoreCase("visualizer")) { + } else if (args[0].equalsIgnoreCase(StargateCommandCommand.VISUALIZER.getName())) { return new VisualizerTabCompleter(stargateAPI.getRegistry()).onTabComplete(commandSender, command, s, subArgs); - } else if (args[0].equalsIgnoreCase("info")) { + } else if (args[0].equalsIgnoreCase(StargateCommandCommand.INFO.getName())) { return new TabCommandInfo(stargateAPI.getRegistry()).onTabComplete(commandSender, command, s, subArgs); } } @@ -69,17 +70,11 @@ public class StargateCommandTabCompleter implements TabCompleter { */ private List getAvailableCommands(CommandSender commandSender) { List commands = new ArrayList<>(); - if (!(commandSender instanceof Player player) || player.hasPermission("stargate.command.config")) { - commands.add("config"); - } - if (commandSender instanceof Player player && player.hasPermission("stargate.command.dial")) { - commands.add("dial"); - } - if (commandSender instanceof Player player && player.hasPermission("stargate.command.visualizer")) { - commands.add("visualizer"); - } - if (commandSender instanceof Player player && player.hasPermission("stargate.command.info")) { - commands.add("info"); + for (StargateCommandCommand command : StargateCommandCommand.values()) { + if ((!command.requiresPlayer() || commandSender instanceof Player) && + commandSender.hasPermission(command.getPermissionNode())) { + commands.add(command.getName()); + } } return commands; } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/TabCommandInfo.java b/src/main/java/net/knarcraft/stargatecommand/command/TabCommandInfo.java index 8179478..7ce8943 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/TabCommandInfo.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/TabCommandInfo.java @@ -3,6 +3,7 @@ package net.knarcraft.stargatecommand.command; import net.TheDgtl.Stargate.network.RegistryAPI; import net.TheDgtl.Stargate.network.portal.Portal; import net.TheDgtl.Stargate.network.portal.PortalFlag; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import net.knarcraft.stargatecommand.util.PortalFinderHelper; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; @@ -40,7 +41,7 @@ public class TabCommandInfo implements TabExecutor { commandSender.sendMessage("This command can only be used by a player"); return true; } - if (!player.hasPermission("stargate.command.info")) { + if (!player.hasPermission(StargateCommandCommand.INFO.getPermissionNode())) { player.sendMessage("Permission Denied"); return true; } diff --git a/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java b/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java index 515b92f..e3055c2 100644 --- a/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java +++ b/src/main/java/net/knarcraft/stargatecommand/command/VisualizerTabCompleter.java @@ -2,6 +2,7 @@ package net.knarcraft.stargatecommand.command; import net.TheDgtl.Stargate.network.RegistryAPI; import net.knarcraft.stargatecommand.StargateCommand; +import net.knarcraft.stargatecommand.property.StargateCommandCommand; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -33,6 +34,11 @@ public class VisualizerTabCompleter implements TabCompleter { @Override public List onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + //Don't display any info to non-authorized users + if (!commandSender.hasPermission(StargateCommandCommand.VISUALIZER.getPermissionNode())) { + return new ArrayList<>(); + } + if (args.length < 2) { List networkNames = new ArrayList<>(); registryAPI.getNetworkMap().values().forEach(item -> networkNames.add(item.getName().replace(' ', diff --git a/src/main/java/net/knarcraft/stargatecommand/property/StargateCommandCommand.java b/src/main/java/net/knarcraft/stargatecommand/property/StargateCommandCommand.java new file mode 100644 index 0000000..25be9a4 --- /dev/null +++ b/src/main/java/net/knarcraft/stargatecommand/property/StargateCommandCommand.java @@ -0,0 +1,71 @@ +package net.knarcraft.stargatecommand.property; + +/** + * An enum representing the commands of this plugin + */ +public enum StargateCommandCommand { + + /** + * The config command + */ + CONFIG("config", "stargate.command.config", false), + + /** + * The dial command + */ + DIAL("dial", "stargate.command.dial", true), + + /** + * The visualizer command + */ + VISUALIZER("visualizer", "stargate.command.visualizer", false), + + /** + * The info command + */ + INFO("info", "stargate.command.info", true); + + private final String name; + private final String permissionNode; + private final boolean requiresPlayer; + + /** + * Instantiates a new Stargate-Command Command + * + * @param name

The name of the new command

+ * @param permissionNode

The permission node required for using the command

+ */ + StargateCommandCommand(String name, String permissionNode, boolean requiresPlayer) { + this.name = name; + this.permissionNode = permissionNode; + this.requiresPlayer = requiresPlayer; + } + + /** + * Gets the name of this command (the string after /sgc) + * + * @return

The name of this command

+ */ + public String getName() { + return this.name; + } + + /** + * Gets the permission node required for this command + * + * @return

The permission node required for this command

+ */ + public String getPermissionNode() { + return permissionNode; + } + + /** + * Gets whether this command requires usage by a player + * + * @return

True if this command can only be used by a player

+ */ + public boolean requiresPlayer() { + return requiresPlayer; + } + +}