Add Argument.tabCompletes to Supplier for dynamic use
Dieser Commit ist enthalten in:
Ursprung
b87b192351
Commit
b179eeb5df
@ -22,10 +22,12 @@
|
|||||||
package de.steamwar.command;
|
package de.steamwar.command;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class Argument<T> {
|
public class Argument<T> {
|
||||||
@ -36,18 +38,18 @@ public class Argument<T> {
|
|||||||
public static final Argument<Float> FLOAT = new Argument<>(ArgumentType.FLOAT, f -> true);
|
public static final Argument<Float> FLOAT = new Argument<>(ArgumentType.FLOAT, f -> true);
|
||||||
public static final Argument<Double> DOUBLE = new Argument<>(ArgumentType.DOUBLE, d -> true);
|
public static final Argument<Double> DOUBLE = new Argument<>(ArgumentType.DOUBLE, d -> true);
|
||||||
public static final Argument<String> STRING = new Argument<>(ArgumentType.STRING, string -> true);
|
public static final Argument<String> STRING = new Argument<>(ArgumentType.STRING, string -> true);
|
||||||
public static final Argument<String> PLAYER = new Argument<>(ArgumentType.STRING, string -> Bukkit.getPlayer(string) == null, Bukkit::getPlayer);
|
public static final Argument<String> PLAYER = new Argument<>(ArgumentType.STRING, string -> Bukkit.getPlayer(string) == null, Bukkit::getPlayer, () -> Bukkit.getOnlinePlayers().stream().map(Player::getName).toArray(String[]::new));
|
||||||
|
|
||||||
private ArgumentType<T> argumentType;
|
private ArgumentType<T> argumentType;
|
||||||
private Predicate<T> constraint;
|
private Predicate<T> constraint;
|
||||||
private String[] tabCompletes;
|
private Supplier<String[]> tabCompletes;
|
||||||
private Function<T, ?> valueMapper;
|
private Function<T, ?> valueMapper;
|
||||||
|
|
||||||
public Argument(ArgumentType<T> argumentType, Predicate<T> constraint, String... tabCompletes) {
|
public Argument(ArgumentType<T> argumentType, Predicate<T> constraint, String... tabCompletes) {
|
||||||
this(argumentType, constraint, o -> o, tabCompletes);
|
this(argumentType, constraint, o -> o, () -> tabCompletes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <M> Argument(ArgumentType<T> argumentType, Predicate<T> constraint, Function<T, M> valueMapper, String... tabCompletes) {
|
public <M> Argument(ArgumentType<T> argumentType, Predicate<T> constraint, Function<T, M> valueMapper, Supplier<String[]> tabCompletes) {
|
||||||
this.argumentType = argumentType;
|
this.argumentType = argumentType;
|
||||||
this.constraint = constraint;
|
this.constraint = constraint;
|
||||||
this.valueMapper = valueMapper;
|
this.valueMapper = valueMapper;
|
||||||
@ -76,7 +78,7 @@ public class Argument<T> {
|
|||||||
// Check number constraints if needed
|
// Check number constraints if needed
|
||||||
if (argumentType.number && !constraint.test(argumentMapped)) return Optional.empty();
|
if (argumentType.number && !constraint.test(argumentMapped)) return Optional.empty();
|
||||||
}
|
}
|
||||||
List<String> strings = Arrays.stream(tabCompletes).filter(t -> t.startsWith(s)).collect(Collectors.toList());
|
List<String> strings = Arrays.stream(tabCompletes.get()).filter(t -> t.startsWith(s)).collect(Collectors.toList());
|
||||||
if (strings.isEmpty()) strings.add(s);
|
if (strings.isEmpty()) strings.add(s);
|
||||||
return Optional.of(strings);
|
return Optional.of(strings);
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
@ -156,7 +158,7 @@ public class Argument<T> {
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Argument{" +
|
return "Argument{" +
|
||||||
"tabCompletes=" + Arrays.toString(tabCompletes) +
|
"tabCompletes=" + Arrays.toString(tabCompletes.get()) +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren