diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2023-10-01 01:48:46 -0400 |
---|---|---|
committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2023-10-01 01:48:46 -0400 |
commit | cb7100cbd8b4ee1187cfd91712c3403a8860d70c (patch) | |
tree | de29f871a5f289584a6162f92647578852652174 /src/main/java/me/xmrvizzy | |
parent | be8e307391d95e0bdc981411f94626978a88b0a5 (diff) | |
download | Skyblocker-cb7100cbd8b4ee1187cfd91712c3403a8860d70c.tar.gz Skyblocker-cb7100cbd8b4ee1187cfd91712c3403a8860d70c.tar.bz2 Skyblocker-cb7100cbd8b4ee1187cfd91712c3403a8860d70c.zip |
Config Tweaks
Diffstat (limited to 'src/main/java/me/xmrvizzy')
3 files changed, 61 insertions, 24 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); + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java index 92a7ddec..f48c8344 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java @@ -151,34 +151,34 @@ public class DungeonsCategory { newValue -> config.locations.dungeons.dungeonChestProfit.neutralThreshold = newValue) .controller(IntegerFieldControllerBuilder::create) .build()) - .option(Option.<FormattingOption>createBuilder() + .option(Option.<String>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.neutralColor")) - .binding(defaults.locations.dungeons.dungeonChestProfit.neutralColor, - () -> config.locations.dungeons.dungeonChestProfit.neutralColor, - newValue -> config.locations.dungeons.dungeonChestProfit.neutralColor = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .binding(defaults.locations.dungeons.dungeonChestProfit.neutralColor.toString(), + () -> config.locations.dungeons.dungeonChestProfit.neutralColor.toString(), + newValue -> config.locations.dungeons.dungeonChestProfit.neutralColor = ConfigUtils.enumConstantFromToString(FormattingOption.class, newValue)) + .controller(opt -> ConfigUtils.createDropdownControllerFromEnum(opt, FormattingOption.class)) .build()) - .option(Option.<FormattingOption>createBuilder() + .option(Option.<String>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.profitColor")) - .binding(defaults.locations.dungeons.dungeonChestProfit.profitColor, - () -> config.locations.dungeons.dungeonChestProfit.profitColor, - newValue -> config.locations.dungeons.dungeonChestProfit.profitColor = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .binding(defaults.locations.dungeons.dungeonChestProfit.profitColor.toString(), + () -> config.locations.dungeons.dungeonChestProfit.profitColor.toString(), + newValue -> config.locations.dungeons.dungeonChestProfit.profitColor = ConfigUtils.enumConstantFromToString(FormattingOption.class, newValue)) + .controller(opt -> ConfigUtils.createDropdownControllerFromEnum(opt, FormattingOption.class)) .build()) - .option(Option.<FormattingOption>createBuilder() + .option(Option.<String>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.lossColor")) - .binding(defaults.locations.dungeons.dungeonChestProfit.lossColor, - () -> config.locations.dungeons.dungeonChestProfit.lossColor, - newValue -> config.locations.dungeons.dungeonChestProfit.lossColor = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .binding(defaults.locations.dungeons.dungeonChestProfit.lossColor.toString(), + () -> config.locations.dungeons.dungeonChestProfit.lossColor.toString(), + newValue -> config.locations.dungeons.dungeonChestProfit.lossColor = ConfigUtils.enumConstantFromToString(FormattingOption.class, newValue)) + .controller(opt -> ConfigUtils.createDropdownControllerFromEnum(opt, FormattingOption.class)) .build()) - .option(Option.<FormattingOption>createBuilder() + .option(Option.<String>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.incompleteColor")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.incompleteColor.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.incompleteColor, - () -> config.locations.dungeons.dungeonChestProfit.incompleteColor, - newValue -> config.locations.dungeons.dungeonChestProfit.incompleteColor = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .binding(defaults.locations.dungeons.dungeonChestProfit.incompleteColor.toString(), + () -> config.locations.dungeons.dungeonChestProfit.incompleteColor.toString(), + newValue -> config.locations.dungeons.dungeonChestProfit.incompleteColor = ConfigUtils.enumConstantFromToString(FormattingOption.class, newValue)) + .controller(opt -> ConfigUtils.createDropdownControllerFromEnum(opt, FormattingOption.class)) .build()) .build()) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java index 4ca38375..4f360d3b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java @@ -15,6 +15,15 @@ public class QuickNavigationCategory { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.quickNav")) + //Toggle + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.enableQuickNav")) + .binding(defaults.quickNav.enableQuickNav, + () -> config.quickNav.enableQuickNav, + newValue -> config.quickNav.enableQuickNav = newValue) + .controller(BooleanControllerBuilder::create) + .build()) + //Button 1 .group(OptionGroup.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1")) |