Allow overriding of all argument suggestions
This commit is contained in:
parent
62bc4dc005
commit
95f903bb1f
15 changed files with 156 additions and 46 deletions
|
|
@ -299,18 +299,18 @@ public final class CommandTree<C> {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
// return child.getValue().getParser().suggestions(commandContext, "");
|
// return child.getValue().getParser().suggestions(commandContext, "");
|
||||||
} else if (child.isLeaf() && commandQueue.size() < 2) {
|
} else if (child.isLeaf() && commandQueue.size() < 2) {
|
||||||
return child.getValue().getParser().suggestions(commandContext, commandQueue.peek());
|
return child.getValue().getSuggestionsProvider().apply(commandContext, commandQueue.peek());
|
||||||
} else if (child.isLeaf()) {
|
} else if (child.isLeaf()) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
} else if (commandQueue.peek().isEmpty()) {
|
} else if (commandQueue.peek().isEmpty()) {
|
||||||
return child.getValue().getParser().suggestions(commandContext, commandQueue.remove());
|
return child.getValue().getSuggestionsProvider().apply(commandContext, commandQueue.remove());
|
||||||
}
|
}
|
||||||
final ArgumentParseResult<?> result = child.getValue().getParser().parse(commandContext, commandQueue);
|
final ArgumentParseResult<?> result = child.getValue().getParser().parse(commandContext, commandQueue);
|
||||||
if (result.getParsedValue().isPresent()) {
|
if (result.getParsedValue().isPresent()) {
|
||||||
commandContext.store(child.getValue().getName(), result.getParsedValue().get());
|
commandContext.store(child.getValue().getName(), result.getParsedValue().get());
|
||||||
return this.getSuggestions(commandContext, commandQueue, child);
|
return this.getSuggestions(commandContext, commandQueue, child);
|
||||||
} else if (result.getFailure().isPresent()) {
|
} else if (result.getFailure().isPresent()) {
|
||||||
return child.getValue().getParser().suggestions(commandContext, commandQueue.peek());
|
return child.getValue().getSuggestionsProvider().apply(commandContext, commandQueue.peek());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -336,8 +336,8 @@ public final class CommandTree<C> {
|
||||||
if (argument.getValue() == null || this.isPermitted(commandContext.getSender(), argument) != null) {
|
if (argument.getValue() == null || this.isPermitted(commandContext.getSender(), argument) != null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
suggestions.addAll(
|
suggestions.addAll(argument.getValue().getSuggestionsProvider()
|
||||||
argument.getValue().getParser().suggestions(commandContext, stringOrEmpty(commandQueue.peek())));
|
.apply(commandContext, stringOrEmpty(commandQueue.peek())));
|
||||||
}
|
}
|
||||||
return suggestions;
|
return suggestions;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,10 +29,13 @@ import com.intellectualsites.commands.CommandManager;
|
||||||
import com.intellectualsites.commands.arguments.parser.ArgumentParseResult;
|
import com.intellectualsites.commands.arguments.parser.ArgumentParseResult;
|
||||||
import com.intellectualsites.commands.arguments.parser.ArgumentParser;
|
import com.intellectualsites.commands.arguments.parser.ArgumentParser;
|
||||||
import com.intellectualsites.commands.arguments.parser.ParserParameters;
|
import com.intellectualsites.commands.arguments.parser.ParserParameters;
|
||||||
|
import com.intellectualsites.commands.context.CommandContext;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -75,23 +78,29 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
* The type that is produces by the argument's parser
|
* The type that is produces by the argument's parser
|
||||||
*/
|
*/
|
||||||
private final Class<T> valueType;
|
private final Class<T> valueType;
|
||||||
|
/**
|
||||||
|
* Suggestion provider
|
||||||
|
*/
|
||||||
|
private final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider;
|
||||||
|
|
||||||
private Command<C> owningCommand;
|
private Command<C> owningCommand;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new command argument
|
* Construct a new command argument
|
||||||
*
|
*
|
||||||
* @param required Whether or not the argument is required
|
* @param required Whether or not the argument is required
|
||||||
* @param name The argument name
|
* @param name The argument name
|
||||||
* @param parser The argument parser
|
* @param parser The argument parser
|
||||||
* @param defaultValue Default value used when no value is provided by the command sender
|
* @param defaultValue Default value used when no value is provided by the command sender
|
||||||
* @param valueType Type produced by the parser
|
* @param valueType Type produced by the parser
|
||||||
|
* @param suggestionsProvider Suggestions provider
|
||||||
*/
|
*/
|
||||||
public CommandArgument(final boolean required,
|
public CommandArgument(final boolean required,
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
@Nonnull final ArgumentParser<C, T> parser,
|
@Nonnull final ArgumentParser<C, T> parser,
|
||||||
@Nonnull final String defaultValue,
|
@Nonnull final String defaultValue,
|
||||||
@Nonnull final Class<T> valueType) {
|
@Nonnull final Class<T> valueType,
|
||||||
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
this.required = required;
|
this.required = required;
|
||||||
this.name = Objects.requireNonNull(name, "Name may not be null");
|
this.name = Objects.requireNonNull(name, "Name may not be null");
|
||||||
if (!NAME_PATTERN.asPredicate().test(name)) {
|
if (!NAME_PATTERN.asPredicate().test(name)) {
|
||||||
|
|
@ -100,6 +109,9 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
this.parser = Objects.requireNonNull(parser, "Parser may not be null");
|
this.parser = Objects.requireNonNull(parser, "Parser may not be null");
|
||||||
this.defaultValue = defaultValue;
|
this.defaultValue = defaultValue;
|
||||||
this.valueType = valueType;
|
this.valueType = valueType;
|
||||||
|
this.suggestionsProvider = suggestionsProvider == null
|
||||||
|
? buildDefaultSuggestionsProvider(this)
|
||||||
|
: suggestionsProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -114,7 +126,12 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
@Nonnull final ArgumentParser<C, T> parser,
|
@Nonnull final ArgumentParser<C, T> parser,
|
||||||
@Nonnull final Class<T> valueType) {
|
@Nonnull final Class<T> valueType) {
|
||||||
this(required, name, parser, "", valueType);
|
this(required, name, parser, "", valueType, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <C> BiFunction<CommandContext<C>, String, List<String>> buildDefaultSuggestionsProvider(
|
||||||
|
@Nonnull final CommandArgument<C, ?> argument) {
|
||||||
|
return (context, s) -> argument.getParser().suggestions(context, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -190,6 +207,16 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
this.owningCommand = owningCommand;
|
this.owningCommand = owningCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the argument suggestions provider
|
||||||
|
*
|
||||||
|
* @return Suggestions provider
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
public final BiFunction<CommandContext<C>, String, List<String>> getSuggestionsProvider() {
|
||||||
|
return this.suggestionsProvider;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean equals(final Object o) {
|
public final boolean equals(final Object o) {
|
||||||
if (this == o) {
|
if (this == o) {
|
||||||
|
|
@ -269,6 +296,7 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
private boolean required = true;
|
private boolean required = true;
|
||||||
private ArgumentParser<C, T> parser;
|
private ArgumentParser<C, T> parser;
|
||||||
private String defaultValue = "";
|
private String defaultValue = "";
|
||||||
|
private BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider;
|
||||||
|
|
||||||
protected Builder(@Nonnull final Class<T> valueType,
|
protected Builder(@Nonnull final Class<T> valueType,
|
||||||
@Nonnull final String name) {
|
@Nonnull final String name) {
|
||||||
|
|
@ -348,6 +376,19 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the suggestions provider
|
||||||
|
*
|
||||||
|
* @param suggestionsProvider Suggestions provider
|
||||||
|
* @return Builder instance
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
public Builder<C, T> withSuggestionsProvider(
|
||||||
|
@Nonnull final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
this.suggestionsProvider = suggestionsProvider;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a command argument from the builder settings
|
* Construct a command argument from the builder settings
|
||||||
*
|
*
|
||||||
|
|
@ -363,7 +404,11 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
this.parser = (c, i) -> ArgumentParseResult
|
this.parser = (c, i) -> ArgumentParseResult
|
||||||
.failure(new UnsupportedOperationException("No parser was specified"));
|
.failure(new UnsupportedOperationException("No parser was specified"));
|
||||||
}
|
}
|
||||||
return new CommandArgument<>(this.required, this.name, this.parser, this.defaultValue, this.valueType);
|
if (suggestionsProvider == null) {
|
||||||
|
suggestionsProvider = this.parser::suggestions;
|
||||||
|
}
|
||||||
|
return new CommandArgument<>(this.required, this.name, this.parser,
|
||||||
|
this.defaultValue, this.valueType, this.suggestionsProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
|
@ -384,6 +429,12 @@ public class CommandArgument<C, T> implements Comparable<CommandArgument<?, ?>>
|
||||||
protected final String getDefaultValue() {
|
protected final String getDefaultValue() {
|
||||||
return this.defaultValue;
|
return this.defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
protected final BiFunction<CommandContext<C>, String, List<String>> getSuggestionsProvider() {
|
||||||
|
return this.suggestionsProvider;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,17 +29,20 @@ import com.intellectualsites.commands.arguments.parser.ArgumentParser;
|
||||||
import com.intellectualsites.commands.context.CommandContext;
|
import com.intellectualsites.commands.context.CommandContext;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class BooleanArgument<C> extends CommandArgument<C, Boolean> {
|
public final class BooleanArgument<C> extends CommandArgument<C, Boolean> {
|
||||||
private final boolean liberal;
|
private final boolean liberal;
|
||||||
|
|
||||||
private BooleanArgument(final boolean required, @Nonnull final String name,
|
private BooleanArgument(final boolean required, @Nonnull final String name,
|
||||||
final boolean liberal, @Nonnull final String defaultValue) {
|
final boolean liberal, @Nonnull final String defaultValue,
|
||||||
super(required, name, new BooleanParser<>(liberal), defaultValue, Boolean.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new BooleanParser<>(liberal), defaultValue, Boolean.class, suggestionsProvider);
|
||||||
this.liberal = liberal;
|
this.liberal = liberal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -130,7 +133,8 @@ public final class BooleanArgument<C> extends CommandArgument<C, Boolean> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public BooleanArgument<C> build() {
|
public BooleanArgument<C> build() {
|
||||||
return new BooleanArgument<>(this.isRequired(), this.getName(), this.liberal, this.getDefaultValue());
|
return new BooleanArgument<>(this.isRequired(), this.getName(), this.liberal,
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,10 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class ByteArgument<C> extends CommandArgument<C, Byte> {
|
public final class ByteArgument<C> extends CommandArgument<C, Byte> {
|
||||||
|
|
@ -40,8 +42,9 @@ public final class ByteArgument<C> extends CommandArgument<C, Byte> {
|
||||||
private final byte max;
|
private final byte max;
|
||||||
|
|
||||||
private ByteArgument(final boolean required, @Nonnull final String name, final byte min,
|
private ByteArgument(final boolean required, @Nonnull final String name, final byte min,
|
||||||
final byte max, final String defaultValue) {
|
final byte max, final String defaultValue,
|
||||||
super(required, name, new ByteParser<>(min, max), defaultValue, Byte.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new ByteParser<>(min, max), defaultValue, Byte.class, suggestionsProvider);
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
@ -155,7 +158,8 @@ public final class ByteArgument<C> extends CommandArgument<C, Byte> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ByteArgument<C> build() {
|
public ByteArgument<C> build() {
|
||||||
return new ByteArgument<>(this.isRequired(), this.getName(), this.min, this.max, this.getDefaultValue());
|
return new ByteArgument<>(this.isRequired(), this.getName(), this.min, this.max,
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,14 +29,18 @@ import com.intellectualsites.commands.arguments.parser.ArgumentParser;
|
||||||
import com.intellectualsites.commands.context.CommandContext;
|
import com.intellectualsites.commands.context.CommandContext;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class CharArgument<C> extends CommandArgument<C, Character> {
|
public final class CharArgument<C> extends CommandArgument<C, Character> {
|
||||||
|
|
||||||
private CharArgument(final boolean required, @Nonnull final String name,
|
private CharArgument(final boolean required, @Nonnull final String name,
|
||||||
@Nonnull final String defaultValue) {
|
@Nonnull final String defaultValue, @Nullable
|
||||||
super(required, name, new CharacterParser<>(), defaultValue, Character.class);
|
final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new CharacterParser<>(), defaultValue, Character.class, suggestionsProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -104,7 +108,8 @@ public final class CharArgument<C> extends CommandArgument<C, Character> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public CharArgument<C> build() {
|
public CharArgument<C> build() {
|
||||||
return new CharArgument<>(this.isRequired(), this.getName(), this.getDefaultValue());
|
return new CharArgument<>(this.isRequired(), this.getName(),
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,10 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class DoubleArgument<C> extends CommandArgument<C, Double> {
|
public final class DoubleArgument<C> extends CommandArgument<C, Double> {
|
||||||
|
|
@ -42,8 +45,9 @@ public final class DoubleArgument<C> extends CommandArgument<C, Double> {
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
final double min,
|
final double min,
|
||||||
final double max,
|
final double max,
|
||||||
final String defaultValue) {
|
final String defaultValue,
|
||||||
super(required, name, new DoubleParser<>(min, max), defaultValue, Double.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new DoubleParser<>(min, max), defaultValue, Double.class, suggestionsProvider);
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
@ -157,7 +161,8 @@ public final class DoubleArgument<C> extends CommandArgument<C, Double> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public DoubleArgument<C> build() {
|
public DoubleArgument<C> build() {
|
||||||
return new DoubleArgument<>(this.isRequired(), this.getName(), this.min, this.max, this.getDefaultValue());
|
return new DoubleArgument<>(this.isRequired(), this.getName(), this.min, this.max,
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,11 @@ import com.intellectualsites.commands.arguments.parser.ArgumentParser;
|
||||||
import com.intellectualsites.commands.context.CommandContext;
|
import com.intellectualsites.commands.context.CommandContext;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -46,8 +48,9 @@ public class EnumArgument<C, E extends Enum<E>> extends CommandArgument<C, E> {
|
||||||
protected EnumArgument(@Nonnull final Class<E> enumClass,
|
protected EnumArgument(@Nonnull final Class<E> enumClass,
|
||||||
final boolean required,
|
final boolean required,
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
@Nonnull final String defaultValue) {
|
@Nonnull final String defaultValue,
|
||||||
super(required, name, new EnumParser<>(enumClass), defaultValue, enumClass);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new EnumParser<>(enumClass), defaultValue, enumClass, suggestionsProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -124,7 +127,8 @@ public class EnumArgument<C, E extends Enum<E>> extends CommandArgument<C, E> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public CommandArgument<C, E> build() {
|
public CommandArgument<C, E> build() {
|
||||||
return new EnumArgument<>(this.enumClass, this.isRequired(), this.getName(), this.getDefaultValue());
|
return new EnumArgument<>(this.enumClass, this.isRequired(), this.getName(),
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,10 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class FloatArgument<C> extends CommandArgument<C, Float> {
|
public final class FloatArgument<C> extends CommandArgument<C, Float> {
|
||||||
|
|
@ -42,8 +45,9 @@ public final class FloatArgument<C> extends CommandArgument<C, Float> {
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
final float min,
|
final float min,
|
||||||
final float max,
|
final float max,
|
||||||
final String defaultValue) {
|
final String defaultValue,
|
||||||
super(required, name, new FloatParser<>(min, max), defaultValue, Float.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new FloatParser<>(min, max), defaultValue, Float.class, suggestionsProvider);
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
@ -157,7 +161,8 @@ public final class FloatArgument<C> extends CommandArgument<C, Float> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public FloatArgument<C> build() {
|
public FloatArgument<C> build() {
|
||||||
return new FloatArgument<>(this.isRequired(), this.getName(), this.min, this.max, this.getDefaultValue());
|
return new FloatArgument<>(this.isRequired(), this.getName(), this.min, this.max,
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,12 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
|
@ -50,8 +52,9 @@ public final class IntegerArgument<C> extends CommandArgument<C, Integer> {
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
final int min,
|
final int min,
|
||||||
final int max,
|
final int max,
|
||||||
final String defaultValue) {
|
final String defaultValue,
|
||||||
super(required, name, new IntegerParser<>(min, max), defaultValue, Integer.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new IntegerParser<>(min, max), defaultValue, Integer.class, suggestionsProvider);
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +168,8 @@ public final class IntegerArgument<C> extends CommandArgument<C, Integer> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public IntegerArgument<C> build() {
|
public IntegerArgument<C> build() {
|
||||||
return new IntegerArgument<>(this.isRequired(), this.getName(), this.min, this.max, this.getDefaultValue());
|
return new IntegerArgument<>(this.isRequired(), this.getName(), this.min, this.max,
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,10 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class LongArgument<C> extends CommandArgument<C, Long> {
|
public final class LongArgument<C> extends CommandArgument<C, Long> {
|
||||||
|
|
@ -43,8 +45,9 @@ public final class LongArgument<C> extends CommandArgument<C, Long> {
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
final long min,
|
final long min,
|
||||||
final long max,
|
final long max,
|
||||||
final String defaultValue) {
|
final String defaultValue,
|
||||||
super(required, name, new LongParser<>(min, max), defaultValue, Long.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new LongParser<>(min, max), defaultValue, Long.class, suggestionsProvider);
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +161,8 @@ public final class LongArgument<C> extends CommandArgument<C, Long> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public LongArgument<C> build() {
|
public LongArgument<C> build() {
|
||||||
return new LongArgument<>(this.isRequired(), this.getName(), this.min, this.max, this.getDefaultValue());
|
return new LongArgument<>(this.isRequired(), this.getName(), this.min,
|
||||||
|
this.max, this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,10 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
import com.intellectualsites.commands.exceptions.parsing.NumberParseException;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public final class ShortArgument<C> extends CommandArgument<C, Short> {
|
public final class ShortArgument<C> extends CommandArgument<C, Short> {
|
||||||
|
|
@ -43,8 +45,9 @@ public final class ShortArgument<C> extends CommandArgument<C, Short> {
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
final short min,
|
final short min,
|
||||||
final short max,
|
final short max,
|
||||||
final String defaultValue) {
|
final String defaultValue,
|
||||||
super(required, name, new ShortParser<>(min, max), defaultValue, Short.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new ShortParser<>(min, max), defaultValue, Short.class, suggestionsProvider);
|
||||||
this.min = min;
|
this.min = min;
|
||||||
this.max = max;
|
this.max = max;
|
||||||
}
|
}
|
||||||
|
|
@ -158,7 +161,8 @@ public final class ShortArgument<C> extends CommandArgument<C, Short> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ShortArgument<C> build() {
|
public ShortArgument<C> build() {
|
||||||
return new ShortArgument<>(this.isRequired(), this.getName(), this.min, this.max, this.getDefaultValue());
|
return new ShortArgument<>(this.isRequired(), this.getName(), this.min, this.max,
|
||||||
|
this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,8 @@ public final class StringArgument<C> extends CommandArgument<C, String> {
|
||||||
@Nonnull final StringMode stringMode,
|
@Nonnull final StringMode stringMode,
|
||||||
@Nonnull final String defaultValue,
|
@Nonnull final String defaultValue,
|
||||||
@Nonnull final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
@Nonnull final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
super(required, name, new StringParser<>(stringMode, suggestionsProvider), defaultValue, String.class);
|
super(required, name, new StringParser<>(stringMode, suggestionsProvider),
|
||||||
|
defaultValue, String.class, suggestionsProvider);
|
||||||
this.stringMode = stringMode;
|
this.stringMode = stringMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,11 @@ public class CommandSuggestionsTest {
|
||||||
.argument(IntegerArgument.<TestCommandSender>newBuilder("num")
|
.argument(IntegerArgument.<TestCommandSender>newBuilder("num")
|
||||||
.withMin(1).withMax(95).asOptional().build())
|
.withMin(1).withMax(95).asOptional().build())
|
||||||
.build());
|
.build());
|
||||||
|
manager.command(manager.commandBuilder("test")
|
||||||
|
.literal("alt")
|
||||||
|
.argument(IntegerArgument.<TestCommandSender>newBuilder("num")
|
||||||
|
.withSuggestionsProvider((c, s) -> Arrays.asList("3", "33", "333")).build())
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -106,6 +111,13 @@ public class CommandSuggestionsTest {
|
||||||
Assertions.assertEquals(Arrays.asList("9", "90", "91", "92", "93", "94", "95"), suggestions3);
|
Assertions.assertEquals(Arrays.asList("9", "90", "91", "92", "93", "94", "95"), suggestions3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testAltered() {
|
||||||
|
final String input = "test alt ";
|
||||||
|
final List<String> suggestions = manager.suggest(new TestCommandSender(), input);
|
||||||
|
Assertions.assertEquals(Arrays.asList("3", "33", "333"), suggestions);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public enum TestEnum {
|
public enum TestEnum {
|
||||||
FOO,
|
FOO,
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,11 @@ import com.intellectualsites.commands.context.CommandContext;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -43,8 +46,9 @@ public class MaterialArgument<C> extends CommandArgument<C, Material> {
|
||||||
|
|
||||||
protected MaterialArgument(final boolean required,
|
protected MaterialArgument(final boolean required,
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
@Nonnull final String defaultValue) {
|
@Nonnull final String defaultValue,
|
||||||
super(required, name, new MaterialParser<>(), defaultValue, Material.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new MaterialParser<>(), defaultValue, Material.class, suggestionsProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -31,8 +31,10 @@ import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -44,8 +46,9 @@ public class WorldArgument<C> extends CommandArgument<C, World> {
|
||||||
|
|
||||||
protected WorldArgument(final boolean required,
|
protected WorldArgument(final boolean required,
|
||||||
@Nonnull final String name,
|
@Nonnull final String name,
|
||||||
@Nonnull final String defaultValue) {
|
@Nonnull final String defaultValue,
|
||||||
super(required, name, new WorldParser<>(), defaultValue, World.class);
|
@Nullable final BiFunction<CommandContext<C>, String, List<String>> suggestionsProvider) {
|
||||||
|
super(required, name, new WorldParser<>(), defaultValue, World.class, suggestionsProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -108,7 +111,7 @@ public class WorldArgument<C> extends CommandArgument<C, World> {
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public CommandArgument<C, World> build() {
|
public CommandArgument<C, World> build() {
|
||||||
return new WorldArgument<>(this.isRequired(), this.getName(), this.getDefaultValue());
|
return new WorldArgument<>(this.isRequired(), this.getName(), this.getDefaultValue(), this.getSuggestionsProvider());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue