mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
Fix datapack exception related to EnumArgument with siblings (#7686)
Invalid enum constants are now properly thrown as a CommandSyntaxException
This commit is contained in:
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
|
||||
|
||||
Reference in new issue
Block a user