aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java b/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
index 4a615ecc..475e9055 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
@@ -1,11 +1,39 @@
package me.xmrvizzy.skyblocker.config;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
import dev.isxander.yacl3.api.Option;
+import dev.isxander.yacl3.api.controller.DropdownStringControllerBuilder;
import dev.isxander.yacl3.api.controller.EnumControllerBuilder;
public class ConfigUtils {
- @SuppressWarnings("unchecked")
- public static <E extends Enum<E>> EnumControllerBuilder<E> createEnumCyclingListController(Option<E> opt) {
- return EnumControllerBuilder.create(opt).enumClass((Class<E>) opt.binding().defaultValue().getClass());
- }
+ @SuppressWarnings("unchecked")
+ public static <E extends Enum<E>> EnumControllerBuilder<E> createEnumCyclingListController(Option<E> opt) {
+ return EnumControllerBuilder.create(opt).enumClass((Class<E>) opt.binding().defaultValue().getClass());
+ }
+
+ /**
+ * Searches through enum constants in {@code enumClass} for one whose {@link Enum#toString()} result equals {@code expectedValue}
+ *
+ * @return The enum constant associated with the {@code expectedValue}
+ * @throws IllegalStateException Thrown when a constant couldn't be found
+ *
+ * @implNote The return value of {@link Enum#toString()} on each enum constant should be unique in order to ensure accuracy
+ */
+ public static <E extends Enum<E>> E enumConstantFromToString(Class<E> enumClass, String expectedValue) {
+ for (E constant : enumClass.getEnumConstants()) {
+ if (constant.toString().equals(expectedValue))
+ return constant;
+ }
+
+ throw new IllegalStateException("Didn't find an enum constant matching: " + expectedValue);
+ }
+
+ public static <E extends Enum<E>> DropdownStringControllerBuilder createDropdownControllerFromEnum(Option<String> opt, Class<E> enumClass) {
+ List<String> stringifiedConstants = Arrays.stream(enumClass.getEnumConstants()).map(Enum::toString).collect(Collectors.toList());
+
+ return DropdownStringControllerBuilder.create(opt).allowAnyValue(false).allowEmptyValue(false).values(stringifiedConstants);
+ }
}