diff --git a/SpigotCore_Main/src/de/steamwar/command/Argument.java b/SpigotCore_Main/src/de/steamwar/command/Argument.java index 64cdb76..4f80c92 100644 --- a/SpigotCore_Main/src/de/steamwar/command/Argument.java +++ b/SpigotCore_Main/src/de/steamwar/command/Argument.java @@ -21,7 +21,7 @@ package de.steamwar.command; -import com.sk89q.worldedit.extent.world.SurvivalModeExtent; +import com.mojang.datafixers.types.Func; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; @@ -69,7 +69,7 @@ public class Argument { private ArgumentType argumentType; private Predicate constraint; - private Supplier tabCompletes; + private Function tabCompletes; private Function valueMapper; public Argument(ArgumentType argumentType, Predicate constraint, String... tabCompletes) { @@ -80,7 +80,15 @@ public class Argument { this(argumentType, constraint, o -> o, tabCompletes); } + public Argument(ArgumentType argumentType, Predicate constraint, Function tabCompletes) { + this(argumentType, constraint, o -> o, tabCompletes); + } + public Argument(ArgumentType argumentType, Predicate constraint, Function valueMapper, Supplier tabCompletes) { + this(argumentType, constraint, valueMapper, s -> tabCompletes.get()); + } + + public Argument(ArgumentType argumentType, Predicate constraint, Function valueMapper, Function tabCompletes) { this.argumentType = argumentType; this.constraint = constraint; this.valueMapper = valueMapper; @@ -109,7 +117,7 @@ public class Argument { // Check number constraints if needed if (argumentType.number && !constraint.test(argumentMapped)) return Optional.empty(); } - List strings = Arrays.stream(tabCompletes.get()).filter(t -> t.startsWith(s)).collect(Collectors.toList()); + List strings = Arrays.stream(tabCompletes.apply(s)).filter(t -> t.startsWith(s)).collect(Collectors.toList()); if (strings.isEmpty()) strings.add(s); return Optional.of(strings); } catch (NumberFormatException e) { @@ -189,7 +197,7 @@ public class Argument { @Override public String toString() { return "Argument{" + - "tabCompletes=" + Arrays.toString(tabCompletes.get()) + + "tabCompletes=" + Arrays.toString(tabCompletes.apply("")) + '}'; } diff --git a/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java b/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java index 724de1e..6487576 100644 --- a/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java +++ b/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java @@ -21,6 +21,7 @@ package de.steamwar.command; +import javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec; import java.util.Arrays; import java.util.function.Predicate; @@ -43,6 +44,20 @@ public class ArgumentUtils { }, arguments); } + public static Argument of(String[] commands, String[] tabCompletes) { + return new Argument<>(ArgumentType.STRING, string -> { + for (String arg : commands){ + if (string.equals(arg)) return true; + } + return false; + }, s -> { + if (s.isEmpty()) { + return tabCompletes; + } + return commands; + }); + } + public static Argument ofIgnoreCase(String argument) { return new Argument<>(ArgumentType.STRING, string -> string.equalsIgnoreCase(argument), argument); } @@ -56,6 +71,20 @@ public class ArgumentUtils { }, arguments); } + public static Argument ofIgnoreCase(String[] commands, String[] tabCompletes) { + return new Argument<>(ArgumentType.STRING, string -> { + for (String arg : commands){ + if (string.equalsIgnoreCase(arg)) return true; + } + return false; + }, s -> { + if (s.isEmpty()) { + return tabCompletes; + } + return commands; + }); + } + public static Argument above(int minValue, int... tabValues) { return between(minValue, Integer.MAX_VALUE, tabValues); }