Created
April 1, 2020 18:03
-
-
Save Lanse505/a2c415f4f2f658b18e5e975e825a08ca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.teamacronymcoders.essence.util.command.argument; | |
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.DynamicCommandExceptionType; | |
import com.mojang.brigadier.suggestion.Suggestions; | |
import com.mojang.brigadier.suggestion.SuggestionsBuilder; | |
import net.minecraft.command.ISuggestionProvider; | |
import net.minecraft.util.ResourceLocationException; | |
import net.minecraft.util.text.TranslationTextComponent; | |
import java.util.*; | |
import java.util.concurrent.CompletableFuture; | |
public class EssenceEnumArgumentType<E extends Enum<E>> implements ArgumentType<E> { | |
private final E[] eVal; | |
private final Class<E> eClass; | |
private final DynamicCommandExceptionType exceptionType = new DynamicCommandExceptionType((input) -> | |
new TranslationTextComponent("command.argument.essence.enum.invalid", input)); | |
public EssenceEnumArgumentType(Class<E> eVal) { | |
this.eVal = eVal.getEnumConstants(); | |
this.eClass = eVal; | |
} | |
@Override | |
public E parse(StringReader reader) throws CommandSyntaxException { | |
String input = read(reader); | |
return Optional.of(Enum.valueOf(eClass, input)) | |
.orElseThrow(() -> exceptionType.create(input)); | |
} | |
@Override | |
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) { | |
return ISuggestionProvider.suggest(Arrays.stream(eVal).map(Enum::name), builder); | |
} | |
public String read(StringReader reader) throws CommandSyntaxException { | |
int i = reader.getCursor(); | |
while (reader.canRead() && isValidCharacter(reader.peek())) { | |
reader.skip(); | |
} | |
String s = reader.getString().substring(i, reader.getCursor()); | |
try { | |
return s; | |
} catch (ResourceLocationException var4) { | |
reader.setCursor(i); | |
throw exceptionType.create(reader); | |
} | |
} | |
public static boolean isValidCharacter(char charIn) { | |
return charIn != ' '; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment