diff options
author | Kevin <92656833+kevinthegreat1@users.noreply.github.com> | 2023-10-08 00:01:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-08 00:01:34 -0400 |
commit | 0c9381191663a74a9ec3cff9aae1c8b523215f0e (patch) | |
tree | a649e4800fb2ef497b7f6986a2832f8ba9cda881 /src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java | |
parent | aed9c89764b84da3944e450e877a5707f430fe8b (diff) | |
download | Skyblocker-0c9381191663a74a9ec3cff9aae1c8b523215f0e.tar.gz Skyblocker-0c9381191663a74a9ec3cff9aae1c8b523215f0e.tar.bz2 Skyblocker-0c9381191663a74a9ec3cff9aae1c8b523215f0e.zip |
Add Support for Custom toString Function for Enum Dropdowns (#344)
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java b/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java index cf40c7d5..6db0028c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/controllers/EnumDropdownController.java @@ -8,16 +8,23 @@ import dev.isxander.yacl3.gui.controllers.dropdown.AbstractDropdownController; import org.jetbrains.annotations.NotNull; import java.util.Arrays; +import java.util.function.Function; import java.util.stream.Stream; public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownController<E> { - protected EnumDropdownController(Option<E> option) { + /** + * The function used to convert enum constants to strings used for display, suggestion, and validation. Defaults to {@link Enum#toString}. + */ + protected final Function<E, String> toString; + + protected EnumDropdownController(Option<E> option, Function<E, String> toString) { super(option); + this.toString = toString; } @Override public String getString() { - return option().pendingValue().toString(); + return toString.apply(option().pendingValue()); } @Override @@ -26,15 +33,15 @@ public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownC } /** - * Searches through enum constants for one whose {@link Enum#toString()} result equals {@code value} + * Searches through enum constants for one whose {@link #toString} result equals {@code value} * * @return The enum constant associated with the {@code value} or the pending value if none are found - * @implNote The return value of {@link Enum#toString()} on each enum constant should be unique in order to ensure accuracy + * @implNote The return value of {@link #toString} on each enum constant should be unique in order to ensure accuracy */ private E getEnumFromString(String value) { value = value.toLowerCase(); for (E constant : option().pendingValue().getDeclaringClass().getEnumConstants()) { - if (constant.toString().toLowerCase().equals(value)) return constant; + if (toString.apply(constant).toLowerCase().equals(value)) return constant; } return option().pendingValue(); @@ -44,7 +51,7 @@ public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownC public boolean isValueValid(String value) { value = value.toLowerCase(); for (E constant : option().pendingValue().getDeclaringClass().getEnumConstants()) { - if (constant.toString().equals(value)) return true; + if (toString.apply(constant).equals(value)) return true; } return false; @@ -59,16 +66,16 @@ public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownC } /** - * Filters and sorts through enum constants for those whose {@link Enum#toString()} result equals {@code value} + * Filters and sorts through enum constants for those whose {@link #toString} result equals {@code value} * * @return a sorted stream containing enum constants associated with the {@code value} - * @implNote The return value of {@link Enum#toString()} on each enum constant should be unique in order to ensure accuracy + * @implNote The return value of {@link #toString} on each enum constant should be unique in order to ensure accuracy */ @NotNull protected Stream<String> getValidEnumConstants(String value) { String valueLowerCase = value.toLowerCase(); return Arrays.stream(option().pendingValue().getDeclaringClass().getEnumConstants()) - .map(Enum::toString) + .map(this.toString) .filter(constant -> constant.toLowerCase().contains(valueLowerCase)) .sorted((s1, s2) -> { String s1LowerCase = s1.toLowerCase(); |