SteamWar/SpigotCore
Archiviert
13
0

Add Argument.ArgumentBuilder

Add SWCommandBundle.addAll
Dieser Commit ist enthalten in:
jojo 2020-12-28 16:17:25 +01:00
Ursprung b3fffe398a
Commit b28100daed
4 geänderte Dateien mit 53 neuen und 20 gelöschten Zeilen

Datei anzeigen

@ -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;
}
}
} }

Datei anzeigen

@ -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;
}
} }

Datei anzeigen

@ -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();

Datei anzeigen

@ -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);