diff --git a/SpigotCore_Main/src/de/steamwar/command/Argument.java b/SpigotCore_Main/src/de/steamwar/command/Argument.java index b7ec53b..674da8a 100644 --- a/SpigotCore_Main/src/de/steamwar/command/Argument.java +++ b/SpigotCore_Main/src/de/steamwar/command/Argument.java @@ -23,6 +23,7 @@ package de.steamwar.command; import org.bukkit.Bukkit; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -87,4 +88,47 @@ public class Argument { } } + public static class ArgumentBuilder { + + private List[]> options = new ArrayList<>(); + + public ArgumentBuilder(int min, int max, Argument... arguments) { + if (min < 0) min = 0; + if (max >= arguments.length) max = arguments.length - 1; + for (int i = min; i <= max; i++) { + generate(arguments, i, 0, new Argument[i]); + } + } + + private void generate(Argument[] arguments, int length, int startPosition, Argument[] result) { + if (length == 0) { + options.add(Arrays.copyOf(result, result.length)); + return; + } + for (int i = startPosition; i <= arguments.length - length; i++) { + result[result.length - length] = arguments[i]; + generate(arguments, length - 1, startPosition + 1, result); + } + } + + public List[]> apply(Argument... arguments) { + List[]> args = new ArrayList<>(); + args.add(arguments); + return apply(args); + } + + public List[]> apply(List[]> arguments) { + List[]> results = new ArrayList<>(); + arguments.forEach(args -> { + for (Argument[] option : options) { + Argument[] result = Arrays.copyOf(args, args.length + option.length); + System.arraycopy(option, 0, result, args.length, option.length); + results.add(result); + } + }); + return results; + } + + } + } diff --git a/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java b/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java index 1ebfb78..724de1e 100644 --- a/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java +++ b/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java @@ -26,6 +26,10 @@ import java.util.function.Predicate; public class ArgumentUtils { + private ArgumentUtils() { + throw new IllegalStateException("Utility class"); + } + public static Argument of(String argument) { return new Argument<>(ArgumentType.STRING, string -> string.equals(argument), argument); } @@ -120,12 +124,4 @@ public class ArgumentUtils { return new Argument<>(ArgumentType.DOUBLE, predicate, Arrays.stream(tabValues).mapToObj(d -> d + "").toArray(String[]::new)); } - private static String[] toStringArray(Object[] objects) { - String[] strings = new String[objects.length]; - for (int i = 0; i < objects.length; i++) { - strings[i] = objects[i].toString(); - } - return strings; - } - } diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java index 001605a..4d73c31 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java +++ b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java @@ -23,7 +23,6 @@ package de.steamwar.command; import org.bukkit.entity.Player; -import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -37,17 +36,6 @@ public class SWCommand { this.executor = executor; } - public boolean checkValidity(String[] args) { - if (args.length != arguments.length) { - return false; - } - for (int i = 0; i < args.length; i++) { - Optional optional = arguments[i].valueSupplier(args[i]); - if (!optional.isPresent()) return false; - } - return true; - } - public Optional execute(Player player, String[] args) { if (args.length != arguments.length) { return Optional.empty(); diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommandBundle.java b/SpigotCore_Main/src/de/steamwar/command/SWCommandBundle.java index 44f9bdf..c5dcde0 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SWCommandBundle.java +++ b/SpigotCore_Main/src/de/steamwar/command/SWCommandBundle.java @@ -43,6 +43,11 @@ public class SWCommandBundle { return this; } + public SWCommandBundle addAll(Executor executor, List[]> arguments) { + arguments.forEach(args -> swCommandList.add(new SWCommand(executor, args))); + return this; + } + public Optional execute(Player player, String[] args) { for (SWCommand swCommand : swCommandList) { Optional optionalBoolean = swCommand.execute(player, args);