From e850e0d53e33c5561d19c2384b3147c5237e61b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Gon=C3=A7alves?= Date: Thu, 22 May 2025 22:10:51 +0100 Subject: [PATCH 1/2] feat: extra information about invalid arguments. --- pom.xml | 2 +- .../commands/BukkitDevCommand.java | 25 +++++++++---- .../dev_command/commands/IDevCommand.java | 36 +++++++++++++++++++ .../DefaultAutoValidationConfiguration.java | 2 +- 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 08ef802..37a53e3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.hugog.minecraft dev-command - 0.0.7 + 0.0.8-SNAPSHOT 11 diff --git a/src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java b/src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java index 8726eef..784b699 100644 --- a/src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java +++ b/src/main/java/dev/hugog/minecraft/dev_command/commands/BukkitDevCommand.java @@ -1,21 +1,22 @@ package dev.hugog.minecraft.dev_command.commands; +import dev.hugog.minecraft.dev_command.DevCommand; import dev.hugog.minecraft.dev_command.arguments.CommandArgument; +import dev.hugog.minecraft.dev_command.arguments.parsers.ICommandArgumentParser; import dev.hugog.minecraft.dev_command.commands.data.BukkitCommandData; +import dev.hugog.minecraft.dev_command.dependencies.DependencyHandler; +import dev.hugog.minecraft.dev_command.exceptions.ArgumentsConfigException; import dev.hugog.minecraft.dev_command.exceptions.InvalidArgumentsException; import dev.hugog.minecraft.dev_command.exceptions.InvalidDependencyException; +import dev.hugog.minecraft.dev_command.exceptions.PermissionConfigException; +import dev.hugog.minecraft.dev_command.factories.ArgumentParserFactory; import dev.hugog.minecraft.dev_command.validation.IAutoValidationConfiguration; import lombok.Generated; import lombok.Getter; -import dev.hugog.minecraft.dev_command.DevCommand; -import dev.hugog.minecraft.dev_command.dependencies.DependencyHandler; -import dev.hugog.minecraft.dev_command.exceptions.ArgumentsConfigException; -import dev.hugog.minecraft.dev_command.exceptions.PermissionConfigException; -import dev.hugog.minecraft.dev_command.factories.ArgumentParserFactory; -import dev.hugog.minecraft.dev_command.arguments.parsers.ICommandArgumentParser; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.text.MessageFormat; import java.util.Arrays; import java.util.Optional; @@ -135,7 +136,10 @@ public boolean performAutoValidation(IAutoValidationConfiguration configuration) } if (commandData.getAutoValidationData().validateArguments() && commandData.getArguments() != null) { if (!hasValidArgs()) { - getCommandSender().sendMessage(configuration.getInvalidArgumentsMessage(this)); + CommandArgument firstInvalidArgument = Arrays.stream(getInvalidArguments()).findFirst() + .orElseThrow(() -> new InvalidArgumentsException("Unable to find the first invalid argument. This should never happen.")); + getCommandSender().sendMessage(MessageFormat.format(configuration.getInvalidArgumentsMessage(this), + firstInvalidArgument.name(), String.valueOf(firstInvalidArgument.position() + 1))); return false; } } @@ -153,4 +157,11 @@ public T getDependency(Class dependencyClass) throws InvalidDependencyExc return (T) dependencyHandler.getDependencyInstance(commandData.getIntegration(), dependencyClass); } + @Override + public CommandArgument[] getInvalidArguments() { + return Arrays.stream(commandData.getArguments()) + .filter(commandArgument -> !getArgumentParser(commandArgument.position()).isValid()) + .toArray(CommandArgument[]::new); + } + } \ No newline at end of file diff --git a/src/main/java/dev/hugog/minecraft/dev_command/commands/IDevCommand.java b/src/main/java/dev/hugog/minecraft/dev_command/commands/IDevCommand.java index fa2bc3e..ffcba21 100644 --- a/src/main/java/dev/hugog/minecraft/dev_command/commands/IDevCommand.java +++ b/src/main/java/dev/hugog/minecraft/dev_command/commands/IDevCommand.java @@ -1,5 +1,6 @@ package dev.hugog.minecraft.dev_command.commands; +import dev.hugog.minecraft.dev_command.arguments.CommandArgument; import dev.hugog.minecraft.dev_command.arguments.parsers.ICommandArgumentParser; import dev.hugog.minecraft.dev_command.validation.IAutoValidationConfiguration; @@ -29,14 +30,49 @@ public interface IDevCommand { */ Optional> getOptionalArgumentParser(int argumentPosition); + /** + * Check if the player has permission to execute the command. + * + * @return true if the player has permission, false otherwise + */ boolean hasPermissionToExecuteCommand(); + /** + * Check if all arguments provided are valid. + * + * @return true if all arguments are valid, false otherwise + */ boolean hasValidArgs(); + /** + * Check if the command sender can execute the command. + * + * @return true if the command sender can execute the command, false otherwise + */ boolean canSenderExecuteCommand(); + /** + * Perform auto-validation of the command. + * + * @param configuration the configuration for auto-validation + * @return true if the command is valid, false otherwise + */ boolean performAutoValidation(IAutoValidationConfiguration configuration); + /** + * Get a dependency injected into the command. + * + * @param dependencyClass the class of the dependency to get + * @param the type of the dependency + * @return the dependency instance + */ T getDependency(Class dependencyClass); + /** + * Get all invalid arguments for the command. + * + * @return an array of invalid arguments, or an empty array if all arguments are valid + */ + CommandArgument[] getInvalidArguments(); + } diff --git a/src/main/java/dev/hugog/minecraft/dev_command/validation/DefaultAutoValidationConfiguration.java b/src/main/java/dev/hugog/minecraft/dev_command/validation/DefaultAutoValidationConfiguration.java index 23b96a4..096dc4b 100644 --- a/src/main/java/dev/hugog/minecraft/dev_command/validation/DefaultAutoValidationConfiguration.java +++ b/src/main/java/dev/hugog/minecraft/dev_command/validation/DefaultAutoValidationConfiguration.java @@ -10,7 +10,7 @@ public String getNoPermissionMessage(BukkitDevCommand command) { @Override public String getInvalidArgumentsMessage(BukkitDevCommand command) { - return "You have provided invalid arguments. Please try again."; + return "You have provided invalid arguments. The argument {0} on position {1} is invalid."; } @Override From f71da8ab056a22fcb18759b404ce2c002230f34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Gon=C3=A7alves?= Date: Thu, 22 May 2025 22:12:02 +0100 Subject: [PATCH 2/2] chore: updated version to remove snapshot. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 37a53e3..7dd5dbe 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ dev.hugog.minecraft dev-command - 0.0.8-SNAPSHOT + 0.0.8 11