Add Argument.ArgumentBuilder
Add SWCommandBundle.addAll
Dieser Commit ist enthalten in:
Ursprung
b3fffe398a
Commit
b28100daed
@ -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<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public static class ArgumentBuilder {
|
||||
|
||||
private List<Argument<?>[]> 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<Argument<?>[]> apply(Argument<?>... arguments) {
|
||||
List<Argument<?>[]> args = new ArrayList<>();
|
||||
args.add(arguments);
|
||||
return apply(args);
|
||||
}
|
||||
|
||||
public List<Argument<?>[]> apply(List<Argument<?>[]> arguments) {
|
||||
List<Argument<?>[]> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -26,6 +26,10 @@ import java.util.function.Predicate;
|
||||
|
||||
public class ArgumentUtils {
|
||||
|
||||
private ArgumentUtils() {
|
||||
throw new IllegalStateException("Utility class");
|
||||
}
|
||||
|
||||
public static Argument<String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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<Boolean> execute(Player player, String[] args) {
|
||||
if (args.length != arguments.length) {
|
||||
return Optional.empty();
|
||||
|
@ -43,6 +43,11 @@ public class SWCommandBundle {
|
||||
return this;
|
||||
}
|
||||
|
||||
public SWCommandBundle addAll(Executor executor, List<Argument<?>[]> arguments) {
|
||||
arguments.forEach(args -> swCommandList.add(new SWCommand(executor, args)));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Optional<Boolean> execute(Player player, String[] args) {
|
||||
for (SWCommand swCommand : swCommandList) {
|
||||
Optional<Boolean> optionalBoolean = swCommand.execute(player, args);
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren