From 20d426e315d370adf59388461093023e1d8c8963 Mon Sep 17 00:00:00 2001 From: xGinko Date: Tue, 9 Jul 2024 02:50:18 +0200 Subject: [PATCH] use PluginCommand after all to stay reloadable --- .../commands/SubCommand.java | 11 ++--- .../commands/VillagerOptimizerCommand.java | 48 +++++-------------- .../optimizevillagers/OptVillagersRadius.java | 21 ++++---- .../UnOptVillagersRadius.java | 21 ++++---- .../VillagerOptimizerCmd.java | 24 +++++----- .../subcommands/DisableSubCmd.java | 15 +++--- .../subcommands/ReloadSubCmd.java | 15 +++--- .../subcommands/VersionSubCmd.java | 15 +++--- src/main/resources/plugin.yml | 22 ++++++++- 9 files changed, 91 insertions(+), 101 deletions(-) diff --git a/src/main/java/me/xginko/villageroptimizer/commands/SubCommand.java b/src/main/java/me/xginko/villageroptimizer/commands/SubCommand.java index 5ac9edb..200b972 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/SubCommand.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/SubCommand.java @@ -1,19 +1,14 @@ package me.xginko.villageroptimizer.commands; import net.kyori.adventure.text.TextComponent; -import org.bukkit.command.CommandException; -import org.bukkit.command.CommandSender; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.TabCompleter; import org.jetbrains.annotations.NotNull; -import java.util.List; - -public abstract class SubCommand { +public abstract class SubCommand implements CommandExecutor, TabCompleter { public abstract @NotNull String label(); public abstract @NotNull TextComponent description(); public abstract @NotNull TextComponent syntax(); - public abstract @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException; - public abstract boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args); } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/VillagerOptimizerCommand.java b/src/main/java/me/xginko/villageroptimizer/commands/VillagerOptimizerCommand.java index cb95d91..2467cfb 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/VillagerOptimizerCommand.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/VillagerOptimizerCommand.java @@ -3,14 +3,10 @@ package me.xginko.villageroptimizer.commands; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.utils.Disableable; import me.xginko.villageroptimizer.utils.Enableable; -import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.PluginIdentifiableCommand; +import org.bukkit.command.PluginCommand; import org.bukkit.command.TabCompleter; -import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.reflections.Reflections; import org.reflections.scanners.Scanners; @@ -22,17 +18,16 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -public abstract class VillagerOptimizerCommand extends Command - implements Enableable, Disableable, PluginIdentifiableCommand, CommandExecutor, TabCompleter { +public abstract class VillagerOptimizerCommand implements Enableable, Disableable, CommandExecutor, TabCompleter { public static final Set COMMANDS = new HashSet<>(); public static final List RADIUS_SUGGESTIONS = Arrays.asList("5", "10", "25", "50"); public static final Reflections COMMANDS_PACKAGE = new Reflections(VillagerOptimizerCommand.class.getPackage().getName()); - protected VillagerOptimizerCommand( - @NotNull String name, @NotNull String description, @NotNull String usageMessage, @NotNull List aliases - ) { - super(name, description, usageMessage, aliases); + public final String label; + + protected VillagerOptimizerCommand(@NotNull String name) { + this.label = name; } public static void reloadCommands() { @@ -57,38 +52,17 @@ public abstract class VillagerOptimizerCommand extends Command } @Override - public @Nullable List onTabComplete( - @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args - ) { - return tabComplete(sender, commandLabel, args); - } - - @Override - public boolean onCommand( - @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args - ) { - return execute(sender, commandLabel, args); - } - - @Override - public @NotNull Plugin getPlugin() { - return VillagerOptimizer.getInstance(); - } - - @Override - @SuppressWarnings({"deprecation", "DataFlowIssue"}) + @SuppressWarnings("DataFlowIssue") public void enable() { - VillagerOptimizer plugin = VillagerOptimizer.getInstance(); - VillagerOptimizer.commandRegistration().getServerCommandMap() - .register(plugin.getDescription().getName().toLowerCase(), this); - plugin.getCommand(getName()).setExecutor(this); - plugin.getCommand(getName()).setTabCompleter(this); + PluginCommand pluginCommand = VillagerOptimizer.getInstance().getCommand(label); + pluginCommand.setExecutor(this); + pluginCommand.setTabCompleter(this); } @Override @SuppressWarnings("DataFlowIssue") public void disable() { - VillagerOptimizer.getInstance().getCommand(getName()) + VillagerOptimizer.getInstance().getCommand(label) .unregister(VillagerOptimizer.commandRegistration().getServerCommandMap()); } } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java b/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java index 45e8b9d..69add1d 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java @@ -13,15 +13,15 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.command.CommandException; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -31,12 +31,7 @@ public class OptVillagersRadius extends VillagerOptimizerCommand { private final int max_radius; public OptVillagersRadius() { - super( - "optimizevillagers", - "Optmize villagers in a radius around you", - "/unoptimizevillagers ", - Arrays.asList("optvils", "noai") - ); + super("optimizevillagers"); Config config = VillagerOptimizer.config(); this.max_radius = config.getInt("optimization-methods.commands.optimizevillagers.max-block-radius", 100); this.cooldown = config.getInt("optimization-methods.commands.optimizevillagers.cooldown-seconds", 600, @@ -45,14 +40,16 @@ public class OptVillagersRadius extends VillagerOptimizerCommand { } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException - { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { return args.length == 1 ? RADIUS_SUGGESTIONS : Collections.emptyList(); } @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + public boolean onCommand( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (!sender.hasPermission(Permissions.Commands.OPTIMIZE_RADIUS.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; diff --git a/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java b/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java index 0ab7e83..ebfdca5 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java @@ -12,15 +12,15 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; -import org.bukkit.command.CommandException; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -29,25 +29,22 @@ public class UnOptVillagersRadius extends VillagerOptimizerCommand { private final int max_radius; public UnOptVillagersRadius() { - super( - "unoptimizevillagers", - "Unoptmize villagers in a radius around you", - "/optimizevillagers ", - Arrays.asList("unoptvils", "noaiundo") - ); + super("unoptimizevillagers"); this.max_radius = VillagerOptimizer.config() .getInt("optimization-methods.commands.unoptimizevillagers.max-block-radius", 100); } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException - { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { return args.length == 1 ? RADIUS_SUGGESTIONS : Collections.emptyList(); } @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + public boolean onCommand( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (!sender.hasPermission(Permissions.Commands.UNOPTIMIZE_RADIUS.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java index 4aa71f6..32cc2a2 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java @@ -10,9 +10,10 @@ import me.xginko.villageroptimizer.utils.KyoriUtil; import me.xginko.villageroptimizer.utils.Util; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.command.CommandException; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collections; @@ -25,20 +26,15 @@ public class VillagerOptimizerCmd extends VillagerOptimizerCommand { private final List tabCompletes; public VillagerOptimizerCmd() { - super( - "villageroptimizer", - "VillagerOptimizer admin commands", - "/villageroptimizer [ reload, version, disable ]", - Arrays.asList("voptimizer", "vo") - ); + super("villageroptimizer"); subCommands = Arrays.asList(new ReloadSubCmd(), new VersionSubCmd(), new DisableSubCmd()); tabCompletes = subCommands.stream().map(SubCommand::label).collect(Collectors.toList()); } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException - { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (args.length == 1) { return tabCompletes; } @@ -46,7 +42,7 @@ public class VillagerOptimizerCmd extends VillagerOptimizerCommand { if (args.length >= 2) { for (SubCommand subCommand : subCommands) { if (args[0].equalsIgnoreCase(subCommand.label())) { - return subCommand.tabComplete(sender, alias, args); + return subCommand.onTabComplete(sender, command, commandLabel, args); } } } @@ -55,11 +51,13 @@ public class VillagerOptimizerCmd extends VillagerOptimizerCommand { } @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + public boolean onCommand( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (args.length >= 1) { for (SubCommand subCommand : subCommands) { if (args[0].equalsIgnoreCase(subCommand.label())) { - return subCommand.execute(sender, commandLabel, args); + return subCommand.onCommand(sender, command, commandLabel, args); } } } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java index f2259ff..5adca41 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java @@ -4,14 +4,15 @@ import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.Util; import me.xginko.villageroptimizer.utils.KyoriUtil; +import me.xginko.villageroptimizer.utils.Util; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.command.CommandException; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; @@ -34,14 +35,16 @@ public class DisableSubCmd extends SubCommand { } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException - { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { return Collections.emptyList(); } @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + public boolean onCommand( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (!sender.hasPermission(Permissions.Commands.DISABLE.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java index 110e4e0..a40794f 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java @@ -3,14 +3,15 @@ package me.xginko.villageroptimizer.commands.villageroptimizer.subcommands; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; import me.xginko.villageroptimizer.enums.Permissions; -import me.xginko.villageroptimizer.utils.Util; import me.xginko.villageroptimizer.utils.KyoriUtil; +import me.xginko.villageroptimizer.utils.Util; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.command.CommandException; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; @@ -33,14 +34,16 @@ public class ReloadSubCmd extends SubCommand { } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException - { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { return Collections.emptyList(); } @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + public boolean onCommand( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (!sender.hasPermission(Permissions.Commands.RELOAD.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java index fa4a317..5d1356c 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java @@ -4,16 +4,17 @@ import io.papermc.paper.plugin.configuration.PluginMeta; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; import me.xginko.villageroptimizer.enums.Permissions; -import me.xginko.villageroptimizer.utils.Util; import me.xginko.villageroptimizer.utils.KyoriUtil; +import me.xginko.villageroptimizer.utils.Util; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.format.NamedTextColor; -import org.bukkit.command.CommandException; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.plugin.PluginDescriptionFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; @@ -36,14 +37,16 @@ public class VersionSubCmd extends SubCommand { } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) - throws CommandException, IllegalArgumentException - { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { return Collections.emptyList(); } @Override - public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + public boolean onCommand( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, @NotNull String[] args + ) { if (!sender.hasPermission(Permissions.Commands.VERSION.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 4d09a77..6382929 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -5,4 +5,24 @@ authors: [ xGinko ] description: ${project.description} website: ${project.url} api-version: '1.16' -folia-supported: true \ No newline at end of file +folia-supported: true + +commands: + villageroptimizer: + usage: /villageroptimizer [ reload, version, disable ] + description: VillagerOptimizer admin commands + aliases: + - voptimizer + - vo + optimizevillagers: + usage: /optimizevillagers + description: Optmize villagers in a radius around you + aliases: + - optvils + - noai + unoptimizevillagers: + usage: /unoptimizevillagers + description: Unoptmize villagers in a radius around you + aliases: + - unoptvils + - noaiundo \ No newline at end of file