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 parseForCommands(StringReader reader) throws CommandSyntaxException; CompletableFuture parseForSuggestions(SuggestionsBuilder builder); default CommandArgumentParser mapResult(Function mapper) { return new CommandArgumentParser() { @Override public S parseForCommands(StringReader reader) throws CommandSyntaxException { return (S)mapper.apply(CommandArgumentParser.this.parseForCommands(reader)); } @Override public CompletableFuture parseForSuggestions(SuggestionsBuilder builder) { return CommandArgumentParser.this.parseForSuggestions(builder); } }; } default CommandArgumentParser withCodec(DynamicOps ops, CommandArgumentParser parser, Codec codec, DynamicCommandExceptionType error) { return new CommandArgumentParser() { @Override public T parseForCommands(StringReader reader) throws CommandSyntaxException { int i = reader.getCursor(); O object = parser.parseForCommands(reader); DataResult dataResult = codec.parse(ops, object); return dataResult.getOrThrow(string -> { reader.setCursor(i); return error.createWithContext(reader, string); }); } @Override public CompletableFuture parseForSuggestions(SuggestionsBuilder builder) { return CommandArgumentParser.this.parseForSuggestions(builder); } }; } }