SteamWar/SpigotCore
Archiviert
13
0

Add Argument.tabCompletes to Supplier for dynamic use

Dieser Commit ist enthalten in:
jojo 2020-12-28 23:26:25 +01:00
Ursprung b87b192351
Commit b179eeb5df

Datei anzeigen

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