diff --git a/pom.xml b/pom.xml
index 0a2ede1..08ef802 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,11 +6,11 @@
dev.hugog.minecraft
dev-command
- 0.0.6
+ 0.0.7
- 21
- 21
+ 11
+ 11
UTF-8
@@ -26,7 +26,7 @@
org.spigotmc
spigot-api
- 1.20.6-R0.1-SNAPSHOT
+ 1.16.1-R0.1-SNAPSHOT
provided
@@ -107,8 +107,8 @@
maven-compiler-plugin
3.11.0
- 21
- 21
+ ${maven.compiler.source}
+ ${maven.compiler.target}
diff --git a/src/main/java/dev/hugog/minecraft/dev_command/arguments/CommandArgument.java b/src/main/java/dev/hugog/minecraft/dev_command/arguments/CommandArgument.java
index 022e675..17588f8 100644
--- a/src/main/java/dev/hugog/minecraft/dev_command/arguments/CommandArgument.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/arguments/CommandArgument.java
@@ -1,8 +1,31 @@
package dev.hugog.minecraft.dev_command.arguments;
import dev.hugog.minecraft.dev_command.arguments.parsers.CommandArgumentParser;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.Accessors;
-public record CommandArgument(String name, String description, int position,
- Class extends CommandArgumentParser>> validator,
- boolean optional
-) { }
+import java.util.Objects;
+
+@Getter
+@RequiredArgsConstructor
+@Accessors(fluent = true)
+public class CommandArgument {
+ private final String name;
+ private final String description;
+ private final int position;
+ private final Class extends CommandArgumentParser>> validator;
+ private final boolean optional;
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || getClass() != o.getClass()) return false;
+ CommandArgument that = (CommandArgument) o;
+ return position == that.position && optional == that.optional && Objects.equals(name, that.name) && Objects.equals(description, that.description) && Objects.equals(validator, that.validator);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, description, position, validator, optional);
+ }
+}
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 d2744c8..8726eef 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
@@ -17,6 +17,7 @@
import org.bukkit.entity.Player;
import java.util.Arrays;
+import java.util.Optional;
@Generated
@Getter
@@ -26,7 +27,7 @@ public abstract class BukkitDevCommand implements IDevCommand {
private final CommandSender commandSender;
private final String[] args;
- public BukkitDevCommand(BukkitCommandData commandData, CommandSender commandSender, String[] args) {
+ protected BukkitDevCommand(BukkitCommandData commandData, CommandSender commandSender, String[] args) {
this.commandData = commandData;
this.commandSender = commandSender;
this.args = args;
@@ -101,6 +102,19 @@ public ICommandArgumentParser> getArgumentParser(int argumentPosition) {
.orElseThrow();
}
+ @Override
+ public Optional> getOptionalArgumentParser(int argumentPosition) {
+ if (args.length <= argumentPosition) {
+ return Optional.empty();
+ }
+
+ return Optional.of(Arrays.stream(commandData.getArguments())
+ .filter(commandArgument -> commandArgument.position() == argumentPosition)
+ .findFirst()
+ .map(commandArgument -> new ArgumentParserFactory(args[argumentPosition]).generate(commandArgument.validator()))
+ .orElseThrow());
+ }
+
@Override
public boolean performAutoValidation(IAutoValidationConfiguration configuration) {
if (commandData.getAutoValidationData() == null) {
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 34a74ac..fa2bc3e 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
@@ -4,6 +4,7 @@
import dev.hugog.minecraft.dev_command.validation.IAutoValidationConfiguration;
import java.util.List;
+import java.util.Optional;
public interface IDevCommand {
@@ -11,11 +12,31 @@ public interface IDevCommand {
List onTabComplete(String[] args);
+ /**
+ * Get Argument Parser for a mandatory argument at the given position.
+ *
+ * @param argumentPosition the position of the argument
+ * @return the argument parser
+ * @throws IllegalArgumentException if the argument is not present
+ */
ICommandArgumentParser> getArgumentParser(int argumentPosition);
+
+ /**
+ * Get Argument Parser for an optional argument at the given position.
+ *
+ * @param argumentPosition the position of the argument
+ * @return an Optional containing the argument parser if the argument exists, or an empty Optional if not exists
+ */
+ Optional> getOptionalArgumentParser(int argumentPosition);
+
boolean hasPermissionToExecuteCommand();
+
boolean hasValidArgs();
+
boolean canSenderExecuteCommand();
+
boolean performAutoValidation(IAutoValidationConfiguration configuration);
+
T getDependency(Class dependencyClass);
}
diff --git a/src/main/java/dev/hugog/minecraft/dev_command/commands/handler/CommandHandler.java b/src/main/java/dev/hugog/minecraft/dev_command/commands/handler/CommandHandler.java
index 15c8075..a959596 100644
--- a/src/main/java/dev/hugog/minecraft/dev_command/commands/handler/CommandHandler.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/commands/handler/CommandHandler.java
@@ -18,6 +18,7 @@
import org.bukkit.command.CommandSender;
import java.util.*;
+import java.util.stream.Collectors;
@Log4j2
public class CommandHandler {
@@ -74,7 +75,8 @@ public List executeTabComplete(Integration integration, CommandSender co
IDevCommand command = commandFactory.generate((AbstractCommandData) lastArgumentNode.getExtraData());
return command.onTabComplete(commandArguments);
} else { // The tab completion should be handled by the DevCommand using info. about the command tree
- return lastArgumentNode.getChildren().stream().map(Tree.Node::getData).toList();
+ return lastArgumentNode.getChildren().stream().map(Tree.Node::getData)
+ .collect(Collectors.toUnmodifiableList());
}
}
diff --git a/src/main/java/dev/hugog/minecraft/dev_command/validation/AutoValidationData.java b/src/main/java/dev/hugog/minecraft/dev_command/validation/AutoValidationData.java
index 5bc6c7b..aaac52b 100644
--- a/src/main/java/dev/hugog/minecraft/dev_command/validation/AutoValidationData.java
+++ b/src/main/java/dev/hugog/minecraft/dev_command/validation/AutoValidationData.java
@@ -1,7 +1,16 @@
package dev.hugog.minecraft.dev_command.validation;
-public record AutoValidationData(
- boolean validatePermission,
- boolean validateArguments,
- boolean validateSender
-) { }
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.experimental.Accessors;
+
+@Getter
+@RequiredArgsConstructor
+@Accessors(fluent = true)
+public class AutoValidationData {
+ private final boolean validatePermission;
+ private final boolean validateArguments;
+ private final boolean validateSender;
+}
+
+