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 org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
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 {
|
public class ArgumentUtils {
|
||||||
|
|
||||||
|
private ArgumentUtils() {
|
||||||
|
throw new IllegalStateException("Utility class");
|
||||||
|
}
|
||||||
|
|
||||||
public static Argument<String> of(String argument) {
|
public static Argument<String> of(String argument) {
|
||||||
return new Argument<>(ArgumentType.STRING, string -> string.equals(argument), 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));
|
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 org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -37,17 +36,6 @@ public class SWCommand {
|
|||||||
this.executor = executor;
|
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) {
|
public Optional<Boolean> execute(Player player, String[] args) {
|
||||||
if (args.length != arguments.length) {
|
if (args.length != arguments.length) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
|
@ -43,6 +43,11 @@ public class SWCommandBundle {
|
|||||||
return this;
|
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) {
|
public Optional<Boolean> execute(Player player, String[] args) {
|
||||||
for (SWCommand swCommand : swCommandList) {
|
for (SWCommand swCommand : swCommandList) {
|
||||||
Optional<Boolean> optionalBoolean = swCommand.execute(player, args);
|
Optional<Boolean> optionalBoolean = swCommand.execute(player, args);
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren