net.minestom.server.command.builder.arguments.ArgumentEnum Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of minestom-snapshots Show documentation
Show all versions of minestom-snapshots Show documentation
1.20.4 Lightweight Minecraft server
package net.minestom.server.command.builder.arguments;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.function.UnaryOperator;
@SuppressWarnings("rawtypes")
public class ArgumentEnum extends Argument {
public final static int NOT_ENUM_VALUE_ERROR = 1;
private final Class enumClass;
private final E[] values;
private Format format = Format.DEFAULT;
public ArgumentEnum(@NotNull String id, Class enumClass) {
super(id);
this.enumClass = enumClass;
this.values = enumClass.getEnumConstants();
}
public ArgumentEnum setFormat(@NotNull Format format) {
this.format = format;
return this;
}
@NotNull
@Override
public E parse(@NotNull CommandSender sender, @NotNull String input) throws ArgumentSyntaxException {
for (E value : this.values) {
if (this.format.formatter.apply(value.name()).equals(input)) {
return value;
}
}
throw new ArgumentSyntaxException("Not a " + this.enumClass.getSimpleName() + " value", input, NOT_ENUM_VALUE_ERROR);
}
@Override
public String parser() {
return null;
}
public List entries() {
return Arrays.stream(values).map(x -> format.formatter.apply(x.name())).toList();
}
public enum Format {
DEFAULT(name -> name),
LOWER_CASED(name -> name.toLowerCase(Locale.ROOT)),
UPPER_CASED(name -> name.toUpperCase(Locale.ROOT));
private final UnaryOperator formatter;
Format(@NotNull UnaryOperator formatter) {
this.formatter = formatter;
}
}
@Override
public String toString() {
return String.format("Enum<%s>", getId());
}
}