Fix datapack exception related to EnumArgument with siblings (#7686)

Invalid enum constants are now properly thrown as a CommandSyntaxException
This commit is contained in:
SizableShrimp authored and GitHub committed 2021-03-15 13:20:08 -07:00
1 parent aacba8e38e
commit 2a0d9e8dac
5 files changed
+106 -1

No files matched your search

@@ -24,18 +24,23 @@ import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.arguments.ArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.Dynamic2CommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import net.minecraft.command.ISuggestionProvider;
import net.minecraft.command.arguments.IArgumentSerializer;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.text.TranslationTextComponent;
import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class EnumArgument<T extends Enum<T>> implements ArgumentType<T> {
private static final Dynamic2CommandExceptionType INVALID_ENUM = new Dynamic2CommandExceptionType(
(found, constants) -> new TranslationTextComponent("commands.forge.arguments.enum.invalid", constants, found));
private final Class<T> enumClass;
public static <R extends Enum<R>> EnumArgument<R> enumArgument(Class<R> enumClass) {
@@ -47,7 +52,12 @@ public class EnumArgument<T extends Enum<T>> implements ArgumentType<T> {
@Override
public T parse(final StringReader reader) throws CommandSyntaxException {
return Enum.valueOf(enumClass, reader.readUnquotedString());
String name = reader.readUnquotedString();
try {
return Enum.valueOf(enumClass, name);
} catch (IllegalArgumentException e) {
throw INVALID_ENUM.createWithContext(reader, name, Arrays.toString(enumClass.getEnumConstants()));
}
}
@Override