Make MaterialArgument's error message less annoying

This commit is contained in:
Alexander Söderberg 2020-10-08 13:26:23 +02:00
parent 882154a6a8
commit 3763eb40d4
No known key found for this signature in database
GPG key ID: FACEA5B0F4C1BF80

View file

@ -31,11 +31,9 @@ import org.bukkit.Material;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
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.function.BiFunction;
import java.util.stream.Collectors;
/** /**
* cloud argument type that parses Bukkit {@link Material materials} * cloud argument type that parses Bukkit {@link Material materials}
@ -118,17 +116,23 @@ public class MaterialArgument<C> extends CommandArgument<C, Material> {
final @NonNull CommandContext<C> commandContext, final @NonNull CommandContext<C> commandContext,
final @NonNull Queue<@NonNull String> inputQueue final @NonNull Queue<@NonNull String> inputQueue
) { ) {
final String input = inputQueue.peek(); String input = inputQueue.peek();
if (input == null) { if (input == null) {
return ArgumentParseResult.failure(new NullPointerException("No input was provided")); return ArgumentParseResult.failure(new NullPointerException("No input was provided"));
} }
/* Pre-process input */
if (input.contains("minecraft:")) {
input = input.substring("minecraft:".length());
}
input = input.toUpperCase();
try { try {
final Material material = Material.valueOf(input.replace("minecraft:", "").toUpperCase()); final Material material = Material.valueOf(input);
inputQueue.remove(); inputQueue.remove();
return ArgumentParseResult.success(material); return ArgumentParseResult.success(material);
} catch (final IllegalArgumentException exception) { } catch (final IllegalArgumentException exception) {
return ArgumentParseResult.failure(new MaterialParseException(input)); return ArgumentParseResult.failure(new MaterialParseException(inputQueue.peek()));
} }
} }
@ -159,8 +163,7 @@ public class MaterialArgument<C> extends CommandArgument<C, Material> {
@Override @Override
public String getMessage() { public String getMessage() {
return EnumSet.allOf(Material.class).stream().map(Material::name).map(String::toLowerCase) return String.format("'%s' is not a valid material name", this.input);
.collect(Collectors.joining(", "));
} }
} }