From 07165147871d6e2b918953e394a1857875af6b31 Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Tue, 19 Apr 2022 20:33:47 +0200 Subject: [PATCH] add full commands list dump command --- .../bukkit/CommandWhitelistBukkit.java | 23 ++++++++--- ...ecutor.java => BukkitCommandExecutor.java} | 41 +++++++++++-------- .../commandwhitelist/common/CommandUtil.java | 31 ++++++++++++++ .../common/commands/CWCommand.java | 5 ++- .../velocity/CommandWhitelistVelocity.java | 9 ++++ .../velocity/command/VelocityMainCommand.java | 25 ++++++++++- .../waterfall/CommandWhitelistWaterfall.java | 13 ++++-- .../waterfall/command/BungeeMainCommand.java | 27 +++++++++--- 8 files changed, 140 insertions(+), 34 deletions(-) rename CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/{MainCommandExecutor.java => BukkitCommandExecutor.java} (76%) 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 caa5390..026615e 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java @@ -1,6 +1,6 @@ package eu.endermite.commandwhitelist.bukkit; -import eu.endermite.commandwhitelist.bukkit.command.MainCommandExecutor; +import eu.endermite.commandwhitelist.bukkit.command.BukkitCommandExecutor; import eu.endermite.commandwhitelist.bukkit.listeners.AsyncTabCompleteBlockerListener; import eu.endermite.commandwhitelist.bukkit.listeners.PlayerCommandPreProcessListener; import eu.endermite.commandwhitelist.bukkit.listeners.PlayerCommandSendListener; @@ -17,13 +17,12 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; import org.bukkit.entity.Player; +import org.bukkit.help.HelpTopic; 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; +import java.util.*; public class CommandWhitelistBukkit extends JavaPlugin { @@ -59,7 +58,7 @@ public class CommandWhitelistBukkit extends JavaPlugin { PluginCommand command = getCommand("commandwhitelist"); if (command != null) { - MainCommandExecutor executor = new MainCommandExecutor(); + BukkitCommandExecutor executor = new BukkitCommandExecutor(); command.setExecutor(executor); command.setTabCompleter(executor); } @@ -151,4 +150,18 @@ public class CommandWhitelistBukkit extends JavaPlugin { } return commandDeniedMessage; } + + public static ArrayList getServerCommands() { + try { + return new ArrayList<>(Bukkit.getCommandMap().getKnownCommands().keySet()); + } catch (NoSuchMethodError error) { + HashSet commands = new HashSet<>(); + for (HelpTopic topic : Bukkit.getHelpMap().getHelpTopics()) { + String cmd = topic.getName(); + if (Character.isUpperCase(cmd.charAt(0))) continue; + commands.add(topic.getName()); + } + return new ArrayList<>(commands); + } + } } diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommandExecutor.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandExecutor.java similarity index 76% rename from CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommandExecutor.java rename to CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandExecutor.java index e10db46..f71b81b 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/MainCommandExecutor.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/command/BukkitCommandExecutor.java @@ -2,20 +2,18 @@ package eu.endermite.commandwhitelist.bukkit.command; import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit; import eu.endermite.commandwhitelist.common.CWPermission; +import eu.endermite.commandwhitelist.common.CommandUtil; import eu.endermite.commandwhitelist.common.commands.CWCommand; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; -import org.bukkit.help.HelpTopic; -import java.util.ArrayList; -import java.util.HashSet; +import java.io.File; import java.util.List; -public class MainCommandExecutor implements TabExecutor { +public class BukkitCommandExecutor implements TabExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -62,6 +60,18 @@ public class MainCommandExecutor implements TabExecutor { } else audiences.sender(sender).sendMessage(Component.text("/" + label + " remove ")); return true; + case DUMP: + if (!sender.hasPermission(CWPermission.ADMIN.permission())) { + audiences.sender(sender).sendMessage(CWCommand.miniMessage.deserialize(CommandWhitelistBukkit.getConfigCache().prefix + CommandWhitelistBukkit.getConfigCache().no_permission)); + return true; + } + audiences.sender(sender).sendMessage(Component.text("Dumping all available commands to a file...")); + if (CommandUtil.dumpAllBukkitCommands(CommandWhitelistBukkit.getServerCommands(), new File("plugins/CommandWhitelist/config.yml"))) { + audiences.sender(sender).sendMessage(Component.text("Commands dumped to command_dump.yml")); + } else { + audiences.sender(sender).sendMessage(Component.text("Failed to save the file.")); + } + return true; case HELP: default: audiences.sender(sender).sendMessage(CWCommand.helpComponent(label, sender.hasPermission(CWPermission.RELOAD.permission()), sender.hasPermission(CWPermission.ADMIN.permission()))); @@ -74,18 +84,13 @@ public class MainCommandExecutor implements TabExecutor { @Override public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { - List serverCommands; - try { - serverCommands = new ArrayList<>(Bukkit.getCommandMap().getKnownCommands().keySet()); - } catch (NoSuchMethodError error) { - HashSet commands = new HashSet<>(); - for (HelpTopic topic : Bukkit.getHelpMap().getHelpTopics()) { - String cmd = topic.getName(); - if (Character.isUpperCase(cmd.charAt(0))) continue; - commands.add(topic.getName()); - } - serverCommands = new ArrayList<>(commands); - } - return CWCommand.commandSuggestions(CommandWhitelistBukkit.getConfigCache(), serverCommands, args, sender.hasPermission(CWPermission.RELOAD.permission()), sender.hasPermission(CWPermission.ADMIN.permission()), CWCommand.ImplementationType.BUKKIT); + return CWCommand.commandSuggestions( + CommandWhitelistBukkit.getConfigCache(), + CommandWhitelistBukkit.getServerCommands(), + args, + sender.hasPermission(CWPermission.RELOAD.permission()), + sender.hasPermission(CWPermission.ADMIN.permission()), + CWCommand.ImplementationType.BUKKIT + ); } } 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 0e6ac9a..1bc9e0a 100644 --- a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java +++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/CommandUtil.java @@ -1,5 +1,9 @@ package eu.endermite.commandwhitelist.common; +import io.github.thatsmusic99.configurationmaster.api.ConfigFile; + +import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -63,4 +67,31 @@ public class CommandUtil { return parts[0]; } + /** + * Dumps command list to a file + * + * @param serverCommands Commands to dump + * @return True on successful file save + */ + public static boolean dumpAllBukkitCommands(ArrayList serverCommands, File file) { + try { + File parent = new File(file.getParent()); + if (!parent.exists()) + parent.mkdir(); + if (!file.exists()) + file.createNewFile(); + } catch (IOException e) { + return false; + } + + ConfigFile dumpFile = ConfigFile.loadConfig(file); + dumpFile.set("commands", serverCommands); + try { + dumpFile.save(); + } catch (IOException e) { + return false; + } + return true; + } + } 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 index 4af426b..eedd54c 100644 --- a/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/commands/CWCommand.java +++ b/CommandWhitelistCommon/src/main/java/eu/endermite/commandwhitelist/common/commands/CWCommand.java @@ -63,7 +63,7 @@ public class CWCommand { } public enum CommandType { - ADD, REMOVE, HELP, RELOAD + ADD, REMOVE, HELP, RELOAD, DUMP } public enum ImplementationType { @@ -88,6 +88,7 @@ public class CWCommand { if (adminPerm) { list.add("add"); list.add("remove"); + list.add("dump"); } } return list; @@ -100,6 +101,8 @@ public class CWCommand { list.add("add"); if ("remove".startsWith(args[0]) && adminPerm) list.add("remove"); + if ("dump".startsWith(args[0]) && adminPerm) + list.add("dump"); return list; case 2: if (args[0].equalsIgnoreCase("add") || args[0].equalsIgnoreCase("remove")) { 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 149dd8a..aece787 100644 --- a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java +++ b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/CommandWhitelistVelocity.java @@ -22,6 +22,7 @@ import org.slf4j.Logger; import javax.inject.Inject; import java.io.File; import java.nio.file.Path; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -97,6 +98,10 @@ public class CommandWhitelistVelocity { return configCache; } + public static Path getConfigPath() { + return folder; + } + /** * @param player Velocity Player * @return commands available to the player @@ -129,4 +134,8 @@ public class CommandWhitelistVelocity { return suggestionList; } + public static ArrayList getServerCommands() { + return new ArrayList<>(server.getCommandManager().getAliases()); + } + } diff --git a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java index b2b305a..7e035f5 100644 --- a/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java +++ b/CommandWhitelistVelocity/src/main/java/eu/endermite/commandwhitelist/velocity/command/VelocityMainCommand.java @@ -3,10 +3,12 @@ package eu.endermite.commandwhitelist.velocity.command; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.command.SimpleCommand; import eu.endermite.commandwhitelist.common.CWPermission; +import eu.endermite.commandwhitelist.common.CommandUtil; import eu.endermite.commandwhitelist.common.commands.CWCommand; import eu.endermite.commandwhitelist.velocity.CommandWhitelistVelocity; import net.kyori.adventure.text.Component; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -60,6 +62,18 @@ public class VelocityMainCommand implements SimpleCommand { } else sender.sendMessage(Component.text("/" + label + " remove ")); return; + case DUMP: + if (!sender.hasPermission(CWPermission.ADMIN.permission())) { + sender.sendMessage(CWCommand.miniMessage.deserialize(CommandWhitelistVelocity.getConfigCache().prefix + CommandWhitelistVelocity.getConfigCache().no_permission)); + return; + } + sender.sendMessage(Component.text("Dumping all available commands to a file...")); + if (CommandUtil.dumpAllBukkitCommands(CommandWhitelistVelocity.getServerCommands(), new File(String.valueOf(CommandWhitelistVelocity.getConfigPath()), "command_dump.yml"))) { + sender.sendMessage(Component.text("Commands dumped to command_dump.yml")); + } else { + sender.sendMessage(Component.text("Failed to save the file.")); + } + return; case HELP: default: sender.sendMessage(CWCommand.helpComponent(label, sender.hasPermission(CWPermission.RELOAD.permission()), sender.hasPermission(CWPermission.ADMIN.permission()))); @@ -76,8 +90,15 @@ public class VelocityMainCommand implements SimpleCommand { CommandSource source = invocation.source(); String[] args = invocation.arguments(); return CompletableFuture.supplyAsync(() -> { - List serverCommands = new ArrayList<>(); - return CWCommand.commandSuggestions(CommandWhitelistVelocity.getConfigCache(), serverCommands, args, source.hasPermission(CWPermission.RELOAD.permission()), source.hasPermission(CWPermission.ADMIN.permission()), CWCommand.ImplementationType.VELOCITY); + List serverCommands = CommandWhitelistVelocity.getServerCommands(); + return CWCommand.commandSuggestions( + CommandWhitelistVelocity.getConfigCache(), + serverCommands, + args, + source.hasPermission(CWPermission.RELOAD.permission()), + source.hasPermission(CWPermission.ADMIN.permission()), + CWCommand.ImplementationType.VELOCITY + ); }); } } 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 ad394ae..fd6be02 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/CommandWhitelistWaterfall.java @@ -11,14 +11,13 @@ import net.kyori.adventure.platform.bungeecord.BungeeAudiences; 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.Command; import net.md_5.bungee.api.plugin.Plugin; import org.bstats.bungeecord.Metrics; import org.bstats.charts.SimplePie; import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; +import java.util.*; public final class CommandWhitelistWaterfall extends Plugin { @@ -122,4 +121,12 @@ public final class CommandWhitelistWaterfall extends Plugin { } return commandDeniedMessage; } + + public static ArrayList getServerCommands() { + ArrayList serverCommands = new ArrayList<>(); + for (Map.Entry command : CommandWhitelistWaterfall.getPlugin().getProxy().getPluginManager().getCommands()) { + serverCommands.add(command.getValue().getName()); + } + return serverCommands; + } } 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 index a29f91a..ca6725f 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/command/BungeeMainCommand.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/command/BungeeMainCommand.java @@ -1,6 +1,7 @@ package eu.endermite.commandwhitelist.waterfall.command; import eu.endermite.commandwhitelist.common.CWPermission; +import eu.endermite.commandwhitelist.common.CommandUtil; import eu.endermite.commandwhitelist.common.ConfigCache; import eu.endermite.commandwhitelist.common.commands.CWCommand; import eu.endermite.commandwhitelist.waterfall.CommandWhitelistWaterfall; @@ -10,6 +11,7 @@ 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.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -67,6 +69,18 @@ public class BungeeMainCommand extends Command implements TabExecutor { } else audiences.sender(sender).sendMessage(Component.text("/" + label + " remove ")); return; + case DUMP: + if (!sender.hasPermission(CWPermission.ADMIN.permission())) { + audiences.sender(sender).sendMessage(CWCommand.miniMessage.deserialize(CommandWhitelistWaterfall.getConfigCache().prefix + CommandWhitelistWaterfall.getConfigCache().no_permission)); + return; + } + audiences.sender(sender).sendMessage(Component.text("Dumping all available commands to a file...")); + if (CommandUtil.dumpAllBukkitCommands(CommandWhitelistWaterfall.getServerCommands(), new File("plugins/CommandWhitelist/config.yml"))) { + audiences.sender(sender).sendMessage(Component.text("Commands dumped to command_dump.yml")); + } else { + audiences.sender(sender).sendMessage(Component.text("Failed to save the file.")); + } + return; case HELP: default: audiences.sender(sender).sendMessage(CWCommand.helpComponent(label, sender.hasPermission(CWPermission.RELOAD.permission()), sender.hasPermission(CWPermission.ADMIN.permission()))); @@ -80,10 +94,13 @@ public class BungeeMainCommand extends Command implements TabExecutor { @Override public Iterable onTabComplete(CommandSender sender, String[] args) { - List serverCommands = new ArrayList<>(); - for (Map.Entry command : CommandWhitelistWaterfall.getPlugin().getProxy().getPluginManager().getCommands()) { - serverCommands.add(command.getValue().getName()); - } - return CWCommand.commandSuggestions(CommandWhitelistWaterfall.getConfigCache(), serverCommands, args, sender.hasPermission(CWPermission.RELOAD.permission()), sender.hasPermission(CWPermission.ADMIN.permission()), CWCommand.ImplementationType.WATERFALL); + return CWCommand.commandSuggestions( + CommandWhitelistWaterfall.getConfigCache(), + CommandWhitelistWaterfall.getServerCommands(), + args, + sender.hasPermission(CWPermission.RELOAD.permission()), + sender.hasPermission(CWPermission.ADMIN.permission()), + CWCommand.ImplementationType.WATERFALL + ); } }