52 lines
1.9 KiB
Java
52 lines
1.9 KiB
Java
package net.minecraft.util.parsing.packrat.commands;
|
|
|
|
import com.mojang.brigadier.StringReader;
|
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
|
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
|
|
import com.mojang.brigadier.suggestion.Suggestions;
|
|
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
|
import com.mojang.serialization.Codec;
|
|
import com.mojang.serialization.DataResult;
|
|
import com.mojang.serialization.DynamicOps;
|
|
import java.util.concurrent.CompletableFuture;
|
|
import java.util.function.Function;
|
|
|
|
public interface CommandArgumentParser<T> {
|
|
T parseForCommands(StringReader reader) throws CommandSyntaxException;
|
|
|
|
CompletableFuture<Suggestions> parseForSuggestions(SuggestionsBuilder builder);
|
|
|
|
default <S> CommandArgumentParser<S> mapResult(Function<T, S> mapper) {
|
|
return new CommandArgumentParser<S>() {
|
|
@Override
|
|
public S parseForCommands(StringReader reader) throws CommandSyntaxException {
|
|
return (S)mapper.apply(CommandArgumentParser.this.parseForCommands(reader));
|
|
}
|
|
|
|
@Override
|
|
public CompletableFuture<Suggestions> parseForSuggestions(SuggestionsBuilder builder) {
|
|
return CommandArgumentParser.this.parseForSuggestions(builder);
|
|
}
|
|
};
|
|
}
|
|
|
|
default <T, O> CommandArgumentParser<T> withCodec(DynamicOps<O> ops, CommandArgumentParser<O> parser, Codec<T> codec, DynamicCommandExceptionType error) {
|
|
return new CommandArgumentParser<T>() {
|
|
@Override
|
|
public T parseForCommands(StringReader reader) throws CommandSyntaxException {
|
|
int i = reader.getCursor();
|
|
O object = parser.parseForCommands(reader);
|
|
DataResult<T> dataResult = codec.parse(ops, object);
|
|
return dataResult.getOrThrow(string -> {
|
|
reader.setCursor(i);
|
|
return error.createWithContext(reader, string);
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public CompletableFuture<Suggestions> parseForSuggestions(SuggestionsBuilder builder) {
|
|
return CommandArgumentParser.this.parseForSuggestions(builder);
|
|
}
|
|
};
|
|
}
|
|
}
|