From e0e9200faf430b9f08e8ca0ac54d446b6905dc86 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 7 Jul 2025 12:07:27 -0400 Subject: Config Multi Backend + MoulConfig (#1467) * Config Multi Backend * Shade in MoulConfig Dandelion itself now shades in MoulConfig to make it easier/keep Skyblocker's build script simple (since the shading code is a bit cursed and aaron mod will use it soon too) and to prevent conflicts with differing MoulConfig versions Also changed the keybind translation so it is not as small * Remove @SerialEntry from SkyblockerConfig This file is so rarely used that I forgot about it lol * Update Dandelion for search tag support and colour picker alpha preview --- .../skyblocker/config/ConfigNullFieldsFix.java | 1 + .../de/hysky/skyblocker/config/ConfigUtils.java | 81 +++--- .../hysky/skyblocker/config/SkyblockerConfig.java | 52 ++-- .../skyblocker/config/SkyblockerConfigManager.java | 76 ++---- .../skyblocker/config/categories/ChatCategory.java | 70 ++--- .../config/categories/CrimsonIsleCategory.java | 76 +++--- .../config/categories/DebugCategory.java | 25 +- .../config/categories/DungeonsCategory.java | 288 ++++++++++---------- .../categories/EventNotificationsCategory.java | 34 ++- .../config/categories/FarmingCategory.java | 48 ++-- .../config/categories/ForagingCategory.java | 41 +-- .../config/categories/GeneralCategory.java | 157 +++++------ .../config/categories/HelperCategory.java | 144 +++++----- .../config/categories/HuntingCategory.java | 22 +- .../config/categories/MiningCategory.java | 133 ++++----- .../skyblocker/config/categories/MiscCategory.java | 34 ++- .../config/categories/OtherLocationsCategory.java | 54 ++-- .../config/categories/QuickNavigationCategory.java | 36 +-- .../config/categories/SlayersCategory.java | 104 ++++---- .../config/categories/UIAndVisualsCategory.java | 296 +++++++++++---------- .../skyblocker/config/configs/ChatConfig.java | 21 -- .../config/configs/CrimsonIsleConfig.java | 21 -- .../skyblocker/config/configs/DebugConfig.java | 6 - .../skyblocker/config/configs/DungeonsConfig.java | 99 ------- .../config/configs/EventNotificationsConfig.java | 4 - .../skyblocker/config/configs/FarmingConfig.java | 18 -- .../skyblocker/config/configs/ForagingConfig.java | 12 - .../skyblocker/config/configs/GeneralConfig.java | 69 +---- .../skyblocker/config/configs/HelperConfig.java | 58 +--- .../skyblocker/config/configs/HuntingConfig.java | 7 - .../skyblocker/config/configs/MiningConfig.java | 46 +--- .../skyblocker/config/configs/MiscConfig.java | 10 +- .../config/configs/OtherLocationsConfig.java | 25 -- .../config/configs/QuickNavigationConfig.java | 24 -- .../skyblocker/config/configs/SlayersConfig.java | 32 +-- .../config/configs/UIAndVisualsConfig.java | 110 -------- .../config/serialization/CodecTypeAdapter.java | 28 -- .../config/serialization/ItemTypeAdapter.java | 29 -- .../serialization/VanillaGsonConfigSerializer.java | 84 ------ .../accessors/ConfigClassHandlerImplAccessor.java | 13 - .../skyblocker/utils/container/SlotTextAdder.java | 13 +- .../render/title/TitleContainerConfigScreen.java | 16 -- 42 files changed, 909 insertions(+), 1608 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/config/serialization/CodecTypeAdapter.java delete mode 100644 src/main/java/de/hysky/skyblocker/config/serialization/ItemTypeAdapter.java delete mode 100644 src/main/java/de/hysky/skyblocker/config/serialization/VanillaGsonConfigSerializer.java delete mode 100644 src/main/java/de/hysky/skyblocker/mixins/accessors/ConfigClassHandlerImplAccessor.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/config/ConfigNullFieldsFix.java b/src/main/java/de/hysky/skyblocker/config/ConfigNullFieldsFix.java index a16b3359..ab8709d7 100644 --- a/src/main/java/de/hysky/skyblocker/config/ConfigNullFieldsFix.java +++ b/src/main/java/de/hysky/skyblocker/config/ConfigNullFieldsFix.java @@ -18,6 +18,7 @@ public class ConfigNullFieldsFix { private static final Logger LOGGER = LogUtils.getLogger(); private static final String CONFIGS_PACKAGE = "de.hysky.skyblocker.config.configs"; + @SuppressWarnings("removal") public static void init() { SkyblockerConfig current = SkyblockerConfigManager.get(); SkyblockerConfig clean = new SkyblockerConfig(); diff --git a/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java b/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java index 1aa588b7..952a6bc9 100644 --- a/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java +++ b/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java @@ -1,75 +1,58 @@ package de.hysky.skyblocker.config; -import dev.isxander.yacl3.api.ButtonOption; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.OptionDescription; -import dev.isxander.yacl3.api.controller.*; +import java.util.function.Function; + +import org.apache.commons.lang3.StringUtils; + +import net.azureaaron.dandelion.systems.ButtonOption; +import net.azureaaron.dandelion.systems.controllers.BooleanController; +import net.azureaaron.dandelion.systems.controllers.BooleanController.BooleanStyle; +import net.azureaaron.dandelion.systems.controllers.ColourController; +import net.azureaaron.dandelion.systems.controllers.EnumController; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.option.KeybindsScreen; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.Nullable; - -import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.utils.FileUtils; - -import java.nio.file.Path; -import java.util.function.Function; public class ConfigUtils { - public static final ValueFormatter FORMATTING_FORMATTER = formatting -> Text.literal(StringUtils.capitalize(formatting.getName().replaceAll("_", " "))); - public static final ValueFormatter FLOAT_TWO_FORMATTER = value -> Text.literal(String.format("%,.2f", value).replaceAll("[\u00a0\u202F]", " ")); - private static final Path IMAGE_DIRECTORY = ImageRepoLoader.REPO_DIRECTORY.resolve("Skyblocker-Assets-images"); + public static final Function FORMATTING_FORMATTER = formatting -> Text.literal(StringUtils.capitalize(formatting.getName().replaceAll("_", " "))); - public static BooleanControllerBuilder createBooleanController(Option opt) { - return BooleanControllerBuilder.create(opt).yesNoFormatter().coloured(true); + public static BooleanController createBooleanController() { + return BooleanController.createBuilder() + .coloured(true) + .booleanStyle(BooleanStyle.YES_NO) + .build(); } - @SuppressWarnings("unchecked") - public static > EnumControllerBuilder createEnumCyclingListController(Option opt) { - return EnumControllerBuilder.create(opt).enumClass((Class) opt.stateManager().get().getClass()); + public static ColourController createColourController(boolean hasAlpha) { + return ColourController.createBuilder() + .hasAlpha(hasAlpha) + .build(); } - public static > Function, ControllerBuilder> getFormattedEnumCyclingControllerFactory(Class enumType, ValueFormatter formatter) { - return opt -> EnumControllerBuilder.create(opt).enumClass(enumType).formatValue(formatter); + @SuppressWarnings("unchecked") + public static > EnumController createEnumController() { + return (EnumController) EnumController.createBuilder().build(); } + @SuppressWarnings("unchecked") + public static > EnumController createEnumController(Function formatter) { + return (EnumController) EnumController.createBuilder().formatter(Function.class.cast(formatter)).build(); + } - /** - * Creates a factory for {@link EnumDropdownControllerBuilder}s with the given function for converting enum constants to texts. - * Use this if a custom formatter function for an enum is needed. - * Use it like this: - *
{@code Option.createBuilder().controller(ConfigUtils.getEnumDropdownControllerFactory(MY_CUSTOM_ENUM_TO_TEXT_FUNCTION))}
- * - * @param formatter The function used to convert enum constants to texts used for display, suggestion, and validation - * @param the enum type - * @return a factory for {@link EnumDropdownControllerBuilder}s - */ - public static > Function, ControllerBuilder> getEnumDropdownControllerFactory(ValueFormatter formatter) { - return opt -> EnumDropdownControllerBuilder.create(opt).formatValue(formatter); + @SuppressWarnings("unchecked") + public static > EnumController createEnumDropdownController(Function formatter) { + return (EnumController) EnumController.createBuilder().dropdown(true).formatter(Function.class.cast(formatter)).build(); } public static ButtonOption createShortcutToKeybindsScreen() { MinecraftClient client = MinecraftClient.getInstance(); return ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.shortcutToKeybindsSettings")) - .action((screen, opt) -> client.setScreen(new KeybindsScreen(screen, client.options))) - .text(Text.translatable("skyblocker.config.shortcutToKeybindsSettings.@Text")) + .action(screen -> client.setScreen(new KeybindsScreen(screen, client.options))) + .prompt(Text.translatable("skyblocker.config.shortcutToKeybindsSettings.@Text")) .build(); } - /** - * Creates an {@link OptionDescription} with an image and text. - */ - @SafeVarargs - public static OptionDescription withImage(Path imagePath, @Nullable Text... texts) { - return OptionDescription.createBuilder() - .text(ArrayUtils.isNotEmpty(texts) ? texts : new Text[] {}) - .image(IMAGE_DIRECTORY.resolve(imagePath), Identifier.of(SkyblockerMod.NAMESPACE, "config_image_" + FileUtils.normalizePath(imagePath))) - .build(); - } + //FIXME Would probably be a good idea to add a utility method for creating a waypoint type option } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 342eea53..43c827c7 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -1,57 +1,39 @@ package de.hysky.skyblocker.config; import de.hysky.skyblocker.config.configs.*; -import dev.isxander.yacl3.config.v2.api.SerialEntry; public class SkyblockerConfig { - @SerialEntry - public int version = SkyblockerConfigManager.CONFIG_VERSION; + public int version = SkyblockerConfigManager.CONFIG_VERSION; - @SerialEntry - public GeneralConfig general = new GeneralConfig(); + public GeneralConfig general = new GeneralConfig(); - @SerialEntry - public UIAndVisualsConfig uiAndVisuals = new UIAndVisualsConfig(); + public UIAndVisualsConfig uiAndVisuals = new UIAndVisualsConfig(); - @SerialEntry - public HelperConfig helpers = new HelperConfig(); + public HelperConfig helpers = new HelperConfig(); - @SerialEntry - public DungeonsConfig dungeons = new DungeonsConfig(); + public DungeonsConfig dungeons = new DungeonsConfig(); - @SerialEntry - public ForagingConfig foraging = new ForagingConfig(); + public ForagingConfig foraging = new ForagingConfig(); - @SerialEntry - public CrimsonIsleConfig crimsonIsle = new CrimsonIsleConfig(); + public CrimsonIsleConfig crimsonIsle = new CrimsonIsleConfig(); - @SerialEntry - public MiningConfig mining = new MiningConfig(); + public MiningConfig mining = new MiningConfig(); - @SerialEntry - public FarmingConfig farming = new FarmingConfig(); + public FarmingConfig farming = new FarmingConfig(); - @SerialEntry - public HuntingConfig hunting = new HuntingConfig(); + public HuntingConfig hunting = new HuntingConfig(); - @SerialEntry - public OtherLocationsConfig otherLocations = new OtherLocationsConfig(); + public OtherLocationsConfig otherLocations = new OtherLocationsConfig(); - @SerialEntry - public SlayersConfig slayers = new SlayersConfig(); + public SlayersConfig slayers = new SlayersConfig(); - @SerialEntry - public ChatConfig chat = new ChatConfig(); + public ChatConfig chat = new ChatConfig(); - @SerialEntry - public QuickNavigationConfig quickNav = new QuickNavigationConfig(); + public QuickNavigationConfig quickNav = new QuickNavigationConfig(); - @SerialEntry - public EventNotificationsConfig eventNotifications = new EventNotificationsConfig(); + public EventNotificationsConfig eventNotifications = new EventNotificationsConfig(); - @SerialEntry - public MiscConfig misc = new MiscConfig(); + public MiscConfig misc = new MiscConfig(); - @SerialEntry - public DebugConfig debug = new DebugConfig(); + public DebugConfig debug = new DebugConfig(); } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java index 5d35baf8..2f557fe2 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java @@ -1,18 +1,13 @@ package de.hysky.skyblocker.config; -import com.google.gson.FieldNamingPolicy; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.categories.*; -import de.hysky.skyblocker.config.serialization.CodecTypeAdapter; -import de.hysky.skyblocker.config.serialization.ItemTypeAdapter; -import de.hysky.skyblocker.config.serialization.VanillaGsonConfigSerializer; import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; -import de.hysky.skyblocker.utils.CodecUtils; import de.hysky.skyblocker.utils.scheduler.Scheduler; -import dev.isxander.yacl3.api.YetAnotherConfigLib; -import dev.isxander.yacl3.config.v2.api.ConfigClassHandler; +import net.azureaaron.dandelion.systems.ConfigManager; +import net.azureaaron.dandelion.systems.DandelionConfigScreen; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; @@ -23,38 +18,22 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.item.Item; -import net.minecraft.text.Style; import net.minecraft.text.Text; -import net.minecraft.text.TextCodecs; -import net.minecraft.util.Identifier; -import java.awt.Color; import java.lang.StackWalker.Option; import java.nio.file.Path; import java.util.function.Consumer; +import java.util.function.UnaryOperator; import org.apache.commons.lang3.function.Consumers; public class SkyblockerConfigManager { public static final int CONFIG_VERSION = 4; private static final Path CONFIG_FILE = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json"); - private static final ConfigClassHandler HANDLER = ConfigClassHandler.createBuilder(SkyblockerConfig.class) - .serializer(config -> new VanillaGsonConfigSerializer<>(config, CONFIG_FILE, builder -> builder - .setFieldNamingPolicy(FieldNamingPolicy.IDENTITY) - .setPrettyPrinting() - .serializeNulls() - .registerTypeHierarchyAdapter(Color.class, new CodecTypeAdapter<>(CodecUtils.COLOR_CODEC)) - .registerTypeHierarchyAdapter(Text.class, new CodecTypeAdapter<>(TextCodecs.CODEC)) - .registerTypeHierarchyAdapter(Style.class, new CodecTypeAdapter<>(Style.Codecs.CODEC)) - .registerTypeHierarchyAdapter(Identifier.class, new CodecTypeAdapter<>(Identifier.CODEC)) - .registerTypeHierarchyAdapter(Item.class, new ItemTypeAdapter()) - ) - ) - .build(); + private static final ConfigManager CONFIG_MANAGER = ConfigManager.create(SkyblockerConfig.class, CONFIG_FILE, UnaryOperator.identity()); public static SkyblockerConfig get() { - return HANDLER.instance(); + return CONFIG_MANAGER.instance(); } /** @@ -66,7 +45,7 @@ public class SkyblockerConfigManager { throw new RuntimeException("Skyblocker: Called config init from an illegal place!"); } - HANDLER.load(); + CONFIG_MANAGER.load(); ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options"))))); ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (get().uiAndVisuals.showConfigButton && screen instanceof GenericContainerScreen genericContainerScreen && screen.getTitle().getString().equals("SkyBlock Menu")) { @@ -89,32 +68,29 @@ public class SkyblockerConfigManager { */ public static void update(Consumer action) { action.accept(get()); - HANDLER.save(); + CONFIG_MANAGER.save(); } public static Screen createGUI(Screen parent) { - return YetAnotherConfigLib.create(HANDLER, (defaults, config, builder) -> { - builder.title(Text.translatable("skyblocker.config.title")) - .category(GeneralCategory.create(defaults, config)) - .category(UIAndVisualsCategory.create(defaults, config)) - .category(HelperCategory.create(defaults, config)) - .category(DungeonsCategory.create(defaults, config)) - .category(ForagingCategory.create(defaults, config)) - .category(CrimsonIsleCategory.create(defaults, config)) - .category(MiningCategory.create(defaults, config)) - .category(FarmingCategory.create(defaults, config)) - .category(HuntingCategory.create(defaults, config)) - .category(OtherLocationsCategory.create(defaults, config)) - .category(SlayersCategory.create(defaults, config)) - .category(ChatCategory.create(defaults, config)) - .category(QuickNavigationCategory.create(defaults, config)) - .category(EventNotificationsCategory.create(defaults, config)) - .category(MiscCategory.create(defaults, config)); - if (Debug.debugEnabled()) { - builder.category(DebugCategory.create(defaults, config)); - } - return builder; - }).generateScreen(parent); + return DandelionConfigScreen.create(CONFIG_MANAGER, (defaults, config, builder) -> builder + .title(Text.translatable("skyblocker.config.title", SkyblockerMod.VERSION)) + .category(GeneralCategory.create(defaults, config)) + .category(UIAndVisualsCategory.create(defaults, config)) + .category(HelperCategory.create(defaults, config)) + .category(DungeonsCategory.create(defaults, config)) + .category(ForagingCategory.create(defaults, config)) + .category(CrimsonIsleCategory.create(defaults, config)) + .category(MiningCategory.create(defaults, config)) + .category(FarmingCategory.create(defaults, config)) + .category(HuntingCategory.create(defaults, config)) + .category(OtherLocationsCategory.create(defaults, config)) + .category(SlayersCategory.create(defaults, config)) + .category(ChatCategory.create(defaults, config)) + .category(QuickNavigationCategory.create(defaults, config)) + .category(EventNotificationsCategory.create(defaults, config)) + .category(MiscCategory.create(defaults, config)) + .categoryIf(Debug.debugEnabled(), DebugCategory.create(defaults, config)) + ).generateScreen(parent, get().misc.configBackend); } /** diff --git a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java index b25cff4e..d50578e4 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java @@ -1,34 +1,40 @@ package de.hysky.skyblocker.config.categories; +import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.skyblock.chat.ChatRulesConfigScreen; import de.hysky.skyblocker.utils.chat.ChatFilterResult; -import dev.isxander.yacl3.api.*; -import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; +import net.azureaaron.dandelion.systems.ButtonOption; +import net.azureaaron.dandelion.systems.ConfigCategory; +import net.azureaaron.dandelion.systems.Option; +import net.azureaaron.dandelion.systems.OptionGroup; +import net.azureaaron.dandelion.systems.controllers.IntegerController; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; public class ChatCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() + .id(Identifier.of(SkyblockerMod.NAMESPACE, "config/chat")) .name(Text.translatable("skyblocker.config.chat")) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.skyblockXpMessages")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.skyblockXpMessages.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.skyblockXpMessages.@Tooltip")) .binding(defaults.chat.skyblockXpMessages, () -> config.chat.skyblockXpMessages, newValue -> config.chat.skyblockXpMessages = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.confirmationPromptHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.confirmationPromptHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.confirmationPromptHelper.@Tooltip")) .binding(defaults.chat.confirmationPromptHelper, () -> config.chat.confirmationPromptHelper, newValue -> config.chat.confirmationPromptHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) //Uncategorized Options @@ -39,112 +45,112 @@ public class ChatCategory { .binding(defaults.chat.hideAbility, () -> config.chat.hideAbility, newValue -> config.chat.hideAbility = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideHeal")) .binding(defaults.chat.hideHeal, () -> config.chat.hideHeal, newValue -> config.chat.hideHeal = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideAOTE")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideAOTE.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideAOTE.@Tooltip")) .binding(defaults.chat.hideAOTE, () -> config.chat.hideAOTE, newValue -> config.chat.hideAOTE = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideImplosion")) .binding(defaults.chat.hideImplosion, () -> config.chat.hideImplosion, newValue -> config.chat.hideImplosion = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideMoltenWave")) .binding(defaults.chat.hideMoltenWave, () -> config.chat.hideMoltenWave, newValue -> config.chat.hideMoltenWave = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideAds")) .binding(defaults.chat.hideAds, () -> config.chat.hideAds, newValue -> config.chat.hideAds = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideTeleportPad")) .binding(defaults.chat.hideTeleportPad, () -> config.chat.hideTeleportPad, newValue -> config.chat.hideTeleportPad = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideCombo")) .binding(defaults.chat.hideCombo, () -> config.chat.hideCombo, newValue -> config.chat.hideCombo = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideAutopet")) .binding(defaults.chat.hideAutopet, () -> config.chat.hideAutopet, newValue -> config.chat.hideAutopet = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideShowOff")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideShowOff.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideShowOff.@Tooltip")) .binding(defaults.chat.hideShowOff, () -> config.chat.hideShowOff, newValue -> config.chat.hideShowOff = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideToggleSkyMall")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideToggleSkyMall.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideToggleSkyMall.@Tooltip")) .binding(defaults.chat.hideToggleSkyMall, () -> config.chat.hideToggleSkyMall, newValue -> config.chat.hideToggleSkyMall = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideMana")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideMana.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideMana.@Tooltip")) .binding(defaults.chat.hideMana, () -> config.chat.hideMana, newValue -> config.chat.hideMana = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideMimicKill")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideMimicKill.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideMimicKill.@Tooltip")) .binding(defaults.chat.hideMimicKill, () -> config.chat.hideMimicKill, newValue -> config.chat.hideMimicKill = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideDeath")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideDeath.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideDeath.@Tooltip")) .binding(defaults.chat.hideDeath, () -> config.chat.hideDeath, newValue -> config.chat.hideDeath = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.filter.hideDicer")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideDicer.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.filter.hideDicer.@Tooltip")) .binding(defaults.chat.hideDicer, () -> config.chat.hideDicer, newValue -> config.chat.hideDicer = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .build()) @@ -154,16 +160,16 @@ public class ChatCategory { .collapsed(false) .option(ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.chat.chatRules.screen")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new ChatRulesConfigScreen(screen))) + .prompt(Text.translatable("text.skyblocker.open")) + .action(screen -> MinecraftClient.getInstance().setScreen(new ChatRulesConfigScreen(screen))) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.chat.chatRules.announcementLength")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.chatRules.announcementLength.@Tooltip"))) + .description(Text.translatable("skyblocker.config.chat.chatRules.announcementLength.@Tooltip")) .binding(defaults.chat.chatRuleConfig.announcementLength, () -> config.chat.chatRuleConfig.announcementLength, newValue -> config.chat.chatRuleConfig.announcementLength = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(5, 200).step(1)) + .controller(IntegerController.createBuilder().range(5, 200).slider(1).build()) .build()) .build()) .build(); diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java index 5a210017..b8566d71 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java @@ -1,19 +1,21 @@ package de.hysky.skyblocker.config.categories; +import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.utils.waypoint.Waypoint; -import dev.isxander.yacl3.api.ConfigCategory; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.OptionDescription; -import dev.isxander.yacl3.api.OptionGroup; -import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; +import net.azureaaron.dandelion.systems.ConfigCategory; +import net.azureaaron.dandelion.systems.Option; +import net.azureaaron.dandelion.systems.OptionGroup; +import net.azureaaron.dandelion.systems.controllers.IntegerController; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; public class CrimsonIsleCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() + .id(Identifier.of(SkyblockerMod.NAMESPACE, "config/crimsonisle")) .name(Text.translatable("skyblocker.config.crimsonIsle")) //Kuudra @@ -25,76 +27,76 @@ public class CrimsonIsleCategory { .binding(defaults.crimsonIsle.kuudra.supplyWaypoints, () -> config.crimsonIsle.kuudra.supplyWaypoints, newValue -> config.crimsonIsle.kuudra.supplyWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.fuelWaypoints")) .binding(defaults.crimsonIsle.kuudra.fuelWaypoints, () -> config.crimsonIsle.kuudra.fuelWaypoints, newValue -> config.crimsonIsle.kuudra.fuelWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.suppliesAndFuelWaypointType")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip"), - Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.generalNote"))) + .description(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip"), + Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.generalNote")) .binding(defaults.crimsonIsle.kuudra.suppliesAndFuelWaypointType, () -> config.crimsonIsle.kuudra.suppliesAndFuelWaypointType, newValue -> config.crimsonIsle.kuudra.suppliesAndFuelWaypointType = newValue) - .controller(ConfigUtils::createEnumCyclingListController) + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.ballistaBuildWaypoints")) .binding(defaults.crimsonIsle.kuudra.ballistaBuildWaypoints, () -> config.crimsonIsle.kuudra.ballistaBuildWaypoints, newValue -> config.crimsonIsle.kuudra.ballistaBuildWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.safeSpotWaypoints")) .binding(defaults.crimsonIsle.kuudra.safeSpotWaypoints, () -> config.crimsonIsle.kuudra.safeSpotWaypoints, newValue -> config.crimsonIsle.kuudra.safeSpotWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.pearlWaypoints")) .binding(defaults.crimsonIsle.kuudra.pearlWaypoints, () -> config.crimsonIsle.kuudra.pearlWaypoints, newValue -> config.crimsonIsle.kuudra.pearlWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.noArrowPoisonWarning")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.crimsonIsle.kuudra.noArrowPoisonWarning.@Tooltip"))) + .description(Text.translatable("skyblocker.config.crimsonIsle.kuudra.noArrowPoisonWarning.@Tooltip")) .binding(defaults.crimsonIsle.kuudra.noArrowPoisonWarning, () -> config.crimsonIsle.kuudra.noArrowPoisonWarning, newValue -> config.crimsonIsle.kuudra.noArrowPoisonWarning = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.arrowPoisonThreshold")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.crimsonIsle.kuudra.arrowPoisonThreshold.@Tooltip"))) + .description(Text.translatable("skyblocker.config.crimsonIsle.kuudra.arrowPoisonThreshold.@Tooltip")) .binding(defaults.crimsonIsle.kuudra.arrowPoisonThreshold, () -> config.crimsonIsle.kuudra.arrowPoisonThreshold, newValue -> config.crimsonIsle.kuudra.arrowPoisonThreshold = newValue) - .controller(IntegerFieldControllerBuilder::create) + .controller(IntegerController.createBuilder().build()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.kuudraGlow")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.crimsonIsle.kuudra.kuudraGlow.@Tooltip"))) + .description(Text.translatable("skyblocker.config.crimsonIsle.kuudra.kuudraGlow.@Tooltip")) .binding(defaults.crimsonIsle.kuudra.kuudraGlow, () -> config.crimsonIsle.kuudra.kuudraGlow, newValue -> config.crimsonIsle.kuudra.kuudraGlow = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.dangerWarning")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.crimsonIsle.kuudra.dangerWarning.@Tooltip"))) + .description(Text.translatable("skyblocker.config.crimsonIsle.kuudra.dangerWarning.@Tooltip")) .binding(defaults.crimsonIsle.kuudra.dangerWarning, () -> config.crimsonIsle.kuudra.dangerWarning, newValue -> config.crimsonIsle.kuudra.dangerWarning = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .build()) //dojo @@ -103,70 +105,70 @@ public class CrimsonIsleCategory { .collapsed(false) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.forceHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.forceHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.forceHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableForceHelper, () -> config.crimsonIsle.dojo.enableForceHelper, newValue -> config.crimsonIsle.dojo.enableForceHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.staminaHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.staminaHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.staminaHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableStaminaHelper, () -> config.crimsonIsle.dojo.enableStaminaHelper, newValue -> config.crimsonIsle.dojo.enableStaminaHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.masteryHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.masteryHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.masteryHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableMasteryHelper, () -> config.crimsonIsle.dojo.enableMasteryHelper, newValue -> config.crimsonIsle.dojo.enableMasteryHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.disciplineHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.disciplineHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.disciplineHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableDisciplineHelper, () -> config.crimsonIsle.dojo.enableDisciplineHelper, newValue -> config.crimsonIsle.dojo.enableDisciplineHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.swiftnessHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.swiftnessHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.swiftnessHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableSwiftnessHelper, () -> config.crimsonIsle.dojo.enableSwiftnessHelper, newValue -> config.crimsonIsle.dojo.enableSwiftnessHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.controlHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.controlHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.controlHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableControlHelper, () -> config.crimsonIsle.dojo.enableControlHelper, newValue -> config.crimsonIsle.dojo.enableControlHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.tenacityHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.tenacityHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.crimson.dojo.tenacityHelper.@Tooltip")) .binding(config.crimsonIsle.dojo.enableTenacityHelper, () -> config.crimsonIsle.dojo.enableTenacityHelper, newValue -> config.crimsonIsle.dojo.enableTenacityHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .build()) // Extend nether fog .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.crimsonIsle.extendNetherFog")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.crimsonIsle.extendNetherFog.@Tooltip"))) + .description(Text.translatable("skyblocker.config.crimsonIsle.extendNetherFog.@Tooltip")) .binding(config.crimsonIsle.extendNetherFog, () -> config.crimsonIsle.extendNetherFog, newValue -> config.crimsonIsle.extendNetherFog = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .build(); diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DebugCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DebugCategory.java index a09040a0..b9c97c24 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DebugCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DebugCategory.java @@ -1,55 +1,56 @@ package de.hysky.skyblocker.config.categories; +import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.debug.Debug; -import dev.isxander.yacl3.api.ConfigCategory; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.OptionDescription; -import dev.isxander.yacl3.api.controller.EnumControllerBuilder; -import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; +import net.azureaaron.dandelion.systems.ConfigCategory; +import net.azureaaron.dandelion.systems.Option; +import net.azureaaron.dandelion.systems.controllers.IntegerController; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; public class DebugCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() + .id(Identifier.of(SkyblockerMod.NAMESPACE, "config/debug")) .name(Text.translatable("skyblocker.config.debug")) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.debug.dumpRange")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.debug.dumpRange.@Tooltip"))) + .description(Text.translatable("skyblocker.config.debug.dumpRange.@Tooltip")) .binding(defaults.debug.dumpRange, () -> config.debug.dumpRange, newValue -> config.debug.dumpRange = newValue) - .controller(option -> IntegerSliderControllerBuilder.create(option).range(1, 25).step(1)) + .controller(IntegerController.createBuilder().range(1, 25).slider(1).build()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.debug.showInvisibleArmorStands")) .binding(defaults.debug.showInvisibleArmorStands, () -> config.debug.showInvisibleArmorStands, newValue -> config.debug.showInvisibleArmorStands = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.debug.debugWebSockets")) .binding(defaults.debug.webSocketDebug, () -> config.debug.webSocketDebug, newValue -> config.debug.webSocketDebug = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.debug.dumpFormat")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.debug.dumpFormat.@Tooltip"))) + .description(Text.translatable("skyblocker.config.debug.dumpFormat.@Tooltip")) .binding(defaults.debug.dumpFormat, () -> config.debug.dumpFormat, newValue -> config.debug.dumpFormat = newValue) - .controller(opt -> EnumControllerBuilder.create(opt).enumClass(Debug.DumpFormat.class)) // ConfigUtils::createEnumCyclingListController causes a NPE for some reason + .controller(ConfigUtils.createEnumController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.debug.corpseFinderDebug")) .binding(defaults.debug.corpseFinderDebug, () -> config.debug.corpseFinderDebug, newValue -> config.debug.corpseFinderDebug = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .build(); } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index 6956e635..3ccb1971 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -1,22 +1,28 @@ package de.hysky.skyblocker.config.categories; +import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.configs.DungeonsConfig; import de.hysky.skyblocker.skyblock.dungeon.DungeonMapConfigScreen; import de.hysky.skyblocker.utils.waypoint.Waypoint.Type; -import dev.isxander.yacl3.api.*; -import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; -import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; -import dev.isxander.yacl3.api.controller.StringControllerBuilder; +import net.azureaaron.dandelion.systems.ButtonOption; +import net.azureaaron.dandelion.systems.ConfigCategory; +import net.azureaaron.dandelion.systems.Option; +import net.azureaaron.dandelion.systems.OptionGroup; +import net.azureaaron.dandelion.systems.controllers.FloatController; +import net.azureaaron.dandelion.systems.controllers.IntegerController; +import net.azureaaron.dandelion.systems.controllers.StringController; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; public class DungeonsCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() + .id(Identifier.of(SkyblockerMod.NAMESPACE, "config/dungeons")) .name(Text.translatable("skyblocker.config.dungeons")) //Ungrouped Options @@ -25,79 +31,79 @@ public class DungeonsCategory { .binding(defaults.dungeons.fancyPartyFinder, () -> config.dungeons.fancyPartyFinder, newValue -> config.dungeons.fancyPartyFinder = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.croesusHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.croesusHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.croesusHelper.@Tooltip")) .binding(defaults.dungeons.croesusHelper, () -> config.dungeons.croesusHelper, newValue -> config.dungeons.croesusHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.salvageHelper")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.salvageHelper.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.salvageHelper.@Tooltip")) .binding(defaults.dungeons.salvageHelper, () -> config.dungeons.salvageHelper, newValue -> config.dungeons.salvageHelper = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker.@Tooltip")) .binding(defaults.dungeons.playerSecretsTracker, () -> config.dungeons.playerSecretsTracker, newValue -> config.dungeons.playerSecretsTracker = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow.@Tooltip")) .binding(defaults.dungeons.classBasedPlayerGlow, () -> config.dungeons.classBasedPlayerGlow, newValue -> config.dungeons.classBasedPlayerGlow = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay.@Tooltip")) .binding(defaults.dungeons.spiritLeapOverlay, () -> config.dungeons.spiritLeapOverlay, newValue -> config.dungeons.spiritLeapOverlay = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.starredMobGlow")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.starredMobGlow.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.starredMobGlow.@Tooltip")) .binding(defaults.dungeons.starredMobGlow, () -> config.dungeons.starredMobGlow, newValue -> config.dungeons.starredMobGlow = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes.@Tooltip")) .binding(defaults.dungeons.starredMobBoundingBoxes, () -> config.dungeons.starredMobBoundingBoxes, newValue -> config.dungeons.starredMobBoundingBoxes = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems")) - .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems.@Tooltip"))) + .description(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems.@Tooltip")) .binding(defaults.dungeons.allowDroppingProtectedItems, () -> config.dungeons.allowDroppingProtectedItems, newValue -> config.dungeons.allowDroppingProtectedItems = newValue) - .controller(ConfigUtils::createBooleanController) + .controller(ConfigUtils