From 325538abeb2b85bd531b0deae94885838b9ea800 Mon Sep 17 00:00:00 2001 From: Peyton Brown <81496880+PeytonBrown@users.noreply.github.com> Date: Wed, 9 Jul 2025 02:08:13 -0400 Subject: Dungeon splits (#1464) * Initial Implementation * Improvements * Finalize Layout * Handle Dungeon Failing * Clean up splits * Add language support * Rework language translations for both display and saving * Removed unused component * Usage of Object2LongMap * Fix f3 regex * Address PR comments * Add an option to toggle dungeon splits widget --- .../config/categories/DungeonsCategory.java | 1346 ++++++++--------- .../skyblocker/config/configs/DungeonsConfig.java | 258 ++-- .../de/hysky/skyblocker/events/DungeonEvents.java | 15 + .../skyblock/dungeon/DungeonSplitsWidget.java | 467 ++++++ .../skyblock/dungeon/secrets/DungeonManager.java | 1540 ++++++++++---------- .../tabhud/screenbuilder/WidgetManager.java | 12 + .../skyblock/tabhud/widget/TableWidget.java | 73 + .../tabhud/widget/component/TableComponent.java | 104 +- .../java/de/hysky/skyblocker/utils/CodecUtils.java | 6 +- 9 files changed, 2236 insertions(+), 1585 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonSplitsWidget.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/TableWidget.java (limited to 'src/main/java/de') 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 3ccb1971..695e53af 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -20,152 +20,160 @@ 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")) + 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 - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.fancyPartyFinder")) - .binding(defaults.dungeons.fancyPartyFinder, - () -> config.dungeons.fancyPartyFinder, - newValue -> config.dungeons.fancyPartyFinder = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.croesusHelper")) - .description(Text.translatable("skyblocker.config.dungeons.croesusHelper.@Tooltip")) - .binding(defaults.dungeons.croesusHelper, - () -> config.dungeons.croesusHelper, - newValue -> config.dungeons.croesusHelper = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) + //Ungrouped Options + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.fancyPartyFinder")) + .binding(defaults.dungeons.fancyPartyFinder, + () -> config.dungeons.fancyPartyFinder, + newValue -> config.dungeons.fancyPartyFinder = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.croesusHelper")) + .description(Text.translatable("skyblocker.config.dungeons.croesusHelper.@Tooltip")) + .binding(defaults.dungeons.croesusHelper, + () -> config.dungeons.croesusHelper, + newValue -> config.dungeons.croesusHelper = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.salvageHelper")) .description(Text.translatable("skyblocker.config.dungeons.salvageHelper.@Tooltip")) .binding(defaults.dungeons.salvageHelper, - () -> config.dungeons.salvageHelper, - newValue -> config.dungeons.salvageHelper = newValue) + () -> config.dungeons.salvageHelper, + newValue -> config.dungeons.salvageHelper = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker")) + .description(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker.@Tooltip")) + .binding(defaults.dungeons.playerSecretsTracker, + () -> config.dungeons.playerSecretsTracker, + newValue -> config.dungeons.playerSecretsTracker = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow")) + .description(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow.@Tooltip")) + .binding(defaults.dungeons.classBasedPlayerGlow, + () -> config.dungeons.classBasedPlayerGlow, + newValue -> config.dungeons.classBasedPlayerGlow = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay")) + .description(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay.@Tooltip")) + .binding(defaults.dungeons.spiritLeapOverlay, + () -> config.dungeons.spiritLeapOverlay, + newValue -> config.dungeons.spiritLeapOverlay = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.starredMobGlow")) + .description(Text.translatable("skyblocker.config.dungeons.starredMobGlow.@Tooltip")) + .binding(defaults.dungeons.starredMobGlow, + () -> config.dungeons.starredMobGlow, + newValue -> config.dungeons.starredMobGlow = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes")) + .description(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes.@Tooltip")) + .binding(defaults.dungeons.starredMobBoundingBoxes, + () -> config.dungeons.starredMobBoundingBoxes, + newValue -> config.dungeons.starredMobBoundingBoxes = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems")) + .description(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems.@Tooltip")) + .binding(defaults.dungeons.allowDroppingProtectedItems, + () -> config.dungeons.allowDroppingProtectedItems, + newValue -> config.dungeons.allowDroppingProtectedItems = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.hideSoulweaverSkulls")) + .description(Text.translatable("skyblocker.config.dungeons.hideSoulweaverSkulls.@Tooltip")) + .binding(defaults.dungeons.hideSoulweaverSkulls, + () -> config.dungeons.hideSoulweaverSkulls, + newValue -> config.dungeons.hideSoulweaverSkulls = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonSplits")) + .description(Text.translatable("skyblocker.config.dungeons.dungeonSplits.@Tooltip")) + .binding(defaults.dungeons.dungeonSplits, + () -> config.dungeons.dungeonSplits, + newValue -> config.dungeons.dungeonSplits = newValue) .controller(ConfigUtils.createBooleanController()) .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker")) - .description(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker.@Tooltip")) - .binding(defaults.dungeons.playerSecretsTracker, - () -> config.dungeons.playerSecretsTracker, - newValue -> config.dungeons.playerSecretsTracker = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow")) - .description(Text.translatable("skyblocker.config.dungeons.classBasedPlayerGlow.@Tooltip")) - .binding(defaults.dungeons.classBasedPlayerGlow, - () -> config.dungeons.classBasedPlayerGlow, - newValue -> config.dungeons.classBasedPlayerGlow = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay")) - .description(Text.translatable("skyblocker.config.dungeons.spiritLeapOverlay.@Tooltip")) - .binding(defaults.dungeons.spiritLeapOverlay, - () -> config.dungeons.spiritLeapOverlay, - newValue -> config.dungeons.spiritLeapOverlay = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.starredMobGlow")) - .description(Text.translatable("skyblocker.config.dungeons.starredMobGlow.@Tooltip")) - .binding(defaults.dungeons.starredMobGlow, - () -> config.dungeons.starredMobGlow, - newValue -> config.dungeons.starredMobGlow = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes")) - .description(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes.@Tooltip")) - .binding(defaults.dungeons.starredMobBoundingBoxes, - () -> config.dungeons.starredMobBoundingBoxes, - newValue -> config.dungeons.starredMobBoundingBoxes = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems")) - .description(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems.@Tooltip")) - .binding(defaults.dungeons.allowDroppingProtectedItems, - () -> config.dungeons.allowDroppingProtectedItems, - newValue -> config.dungeons.allowDroppingProtectedItems = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.hideSoulweaverSkulls")) - .description(Text.translatable("skyblocker.config.dungeons.hideSoulweaverSkulls.@Tooltip")) - .binding(defaults.dungeons.hideSoulweaverSkulls, - () -> config.dungeons.hideSoulweaverSkulls, - newValue -> config.dungeons.hideSoulweaverSkulls = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - // Map - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.map")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.map.enableMap")) - .binding(defaults.dungeons.dungeonMap.enableMap, - () -> config.dungeons.dungeonMap.enableMap, - newValue -> config.dungeons.dungeonMap.enableMap = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.map.mapScaling")) - .binding(defaults.dungeons.dungeonMap.mapScaling, - () -> config.dungeons.dungeonMap.mapScaling, - newValue -> config.dungeons.dungeonMap.mapScaling = newValue) - .controller(FloatController.createBuilder().build()) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.map.mapScreen")) - .prompt(Text.translatable("text.skyblocker.open")) - .action(screen -> MinecraftClient.getInstance().setScreen(new DungeonMapConfigScreen(screen))) - .build()) - .build()) + // Map + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.map")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.map.enableMap")) + .binding(defaults.dungeons.dungeonMap.enableMap, + () -> config.dungeons.dungeonMap.enableMap, + newValue -> config.dungeons.dungeonMap.enableMap = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.map.mapScaling")) + .binding(defaults.dungeons.dungeonMap.mapScaling, + () -> config.dungeons.dungeonMap.mapScaling, + newValue -> config.dungeons.dungeonMap.mapScaling = newValue) + .controller(FloatController.createBuilder().build()) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.map.mapScreen")) + .prompt(Text.translatable("text.skyblocker.open")) + .action(screen -> MinecraftClient.getInstance().setScreen(new DungeonMapConfigScreen(screen))) + .build()) + .build()) - // Puzzle Solver - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveTicTacToe")) - .description(Text.translatable("skyblocker.config.dungeons.puzzle.solveTicTacToe.@Tooltip")) - .binding(defaults.dungeons.puzzleSolvers.solveTicTacToe, - () -> config.dungeons.puzzleSolvers.solveTicTacToe, - newValue -> config.dungeons.puzzleSolvers.solveTicTacToe = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveThreeWeirdos")) - .binding(defaults.dungeons.puzzleSolvers.solveThreeWeirdos, - () -> config.dungeons.puzzleSolvers.solveThreeWeirdos, - newValue -> config.dungeons.puzzleSolvers.solveThreeWeirdos = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.creeperSolver")) - .description(Text.translatable("skyblocker.config.dungeons.puzzle.creeperSolver.@Tooltip")) - .binding(defaults.dungeons.puzzleSolvers.creeperSolver, - () -> config.dungeons.puzzleSolvers.creeperSolver, - newValue -> config.dungeons.puzzleSolvers.creeperSolver = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveWaterboard")) - .description(Text.translatable("skyblocker.config.dungeons.puzzle.solveWaterboard.@Tooltip")) - .binding(defaults.dungeons.puzzleSolvers.waterboardOneFlow, - () -> config.dungeons.puzzleSolvers.waterboardOneFlow, - newValue -> config.dungeons.puzzleSolvers.waterboardOneFlow = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) + // Puzzle Solver + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveTicTacToe")) + .description(Text.translatable("skyblocker.config.dungeons.puzzle.solveTicTacToe.@Tooltip")) + .binding(defaults.dungeons.puzzleSolvers.solveTicTacToe, + () -> config.dungeons.puzzleSolvers.solveTicTacToe, + newValue -> config.dungeons.puzzleSolvers.solveTicTacToe = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveThreeWeirdos")) + .binding(defaults.dungeons.puzzleSolvers.solveThreeWeirdos, + () -> config.dungeons.puzzleSolvers.solveThreeWeirdos, + newValue -> config.dungeons.puzzleSolvers.solveThreeWeirdos = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.creeperSolver")) + .description(Text.translatable("skyblocker.config.dungeons.puzzle.creeperSolver.@Tooltip")) + .binding(defaults.dungeons.puzzleSolvers.creeperSolver, + () -> config.dungeons.puzzleSolvers.creeperSolver, + newValue -> config.dungeons.puzzleSolvers.creeperSolver = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveWaterboard")) + .description(Text.translatable("skyblocker.config.dungeons.puzzle.solveWaterboard.@Tooltip")) + .binding(defaults.dungeons.puzzleSolvers.waterboardOneFlow, + () -> config.dungeons.puzzleSolvers.waterboardOneFlow, + newValue -> config.dungeons.puzzleSolvers.waterboardOneFlow = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.puzzle.previewWaterPath")) .binding(defaults.dungeons.puzzleSolvers.previewWaterPath, @@ -180,43 +188,43 @@ public class DungeonsCategory { newValue -> config.dungeons.puzzleSolvers.previewLeverEffects = newValue) .controller(ConfigUtils.createBooleanController()) .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.blazeSolver")) - .description(Text.translatable("skyblocker.config.dungeons.puzzle.blazeSolver.@Tooltip")) - .binding(defaults.dungeons.puzzleSolvers.blazeSolver, - () -> config.dungeons.puzzleSolvers.blazeSolver, - newValue -> config.dungeons.puzzleSolvers.blazeSolver = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveBoulder")) - .description(Text.translatable("skyblocker.config.dungeons.puzzle.solveBoulder.@Tooltip")) - .binding(defaults.dungeons.puzzleSolvers.solveBoulder, - () -> config.dungeons.puzzleSolvers.solveBoulder, - newValue -> config.dungeons.puzzleSolvers.solveBoulder = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveIceFill")) - .binding(defaults.dungeons.puzzleSolvers.solveIceFill, - () -> config.dungeons.puzzleSolvers.solveIceFill, - newValue -> config.dungeons.puzzleSolvers.solveIceFill = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveSilverfish")) - .binding(defaults.dungeons.puzzleSolvers.solveSilverfish, - () -> config.dungeons.puzzleSolvers.solveSilverfish, - newValue -> config.dungeons.puzzleSolvers.solveSilverfish = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveTrivia")) - .binding(defaults.dungeons.puzzleSolvers.solveTrivia, - () -> config.dungeons.puzzleSolvers.solveTrivia, - newValue -> config.dungeons.puzzleSolvers.solveTrivia = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.blazeSolver")) + .description(Text.translatable("skyblocker.config.dungeons.puzzle.blazeSolver.@Tooltip")) + .binding(defaults.dungeons.puzzleSolvers.blazeSolver, + () -> config.dungeons.puzzleSolvers.blazeSolver, + newValue -> config.dungeons.puzzleSolvers.blazeSolver = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveBoulder")) + .description(Text.translatable("skyblocker.config.dungeons.puzzle.solveBoulder.@Tooltip")) + .binding(defaults.dungeons.puzzleSolvers.solveBoulder, + () -> config.dungeons.puzzleSolvers.solveBoulder, + newValue -> config.dungeons.puzzleSolvers.solveBoulder = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveIceFill")) + .binding(defaults.dungeons.puzzleSolvers.solveIceFill, + () -> config.dungeons.puzzleSolvers.solveIceFill, + newValue -> config.dungeons.puzzleSolvers.solveIceFill = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveSilverfish")) + .binding(defaults.dungeons.puzzleSolvers.solveSilverfish, + () -> config.dungeons.puzzleSolvers.solveSilverfish, + newValue -> config.dungeons.puzzleSolvers.solveSilverfish = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveTrivia")) + .binding(defaults.dungeons.puzzleSolvers.solveTrivia, + () -> config.dungeons.puzzleSolvers.solveTrivia, + newValue -> config.dungeons.puzzleSolvers.solveTrivia = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveTeleportMaze")) .binding(defaults.dungeons.puzzleSolvers.solveTeleportMaze, @@ -224,109 +232,109 @@ public class DungeonsCategory { newValue -> config.dungeons.puzzleSolvers.solveTeleportMaze = newValue) .controller(ConfigUtils.createBooleanController()) .build()) - .build()) + .build()) - // The Professor (F3/M3) - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.professor")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.professor.fireFreezeStaffTimer")) - .description(Text.translatable("skyblocker.config.dungeons.professor.fireFreezeStaffTimer.@Tooltip")) - .binding(defaults.dungeons.theProfessor.fireFreezeStaffTimer, - () -> config.dungeons.theProfessor.fireFreezeStaffTimer, - newValue -> config.dungeons.theProfessor.fireFreezeStaffTimer = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.professor.floor3GuardianHealthDisplay")) - .description(Text.translatable("skyblocker.config.dungeons.professor.floor3GuardianHealthDisplay.@Tooltip")) - .binding(defaults.dungeons.theProfessor.floor3GuardianHealthDisplay, - () -> config.dungeons.theProfessor.floor3GuardianHealthDisplay, - newValue -> config.dungeons.theProfessor.floor3GuardianHealthDisplay = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .build()) + // The Professor (F3/M3) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.professor")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.professor.fireFreezeStaffTimer")) + .description(Text.translatable("skyblocker.config.dungeons.professor.fireFreezeStaffTimer.@Tooltip")) + .binding(defaults.dungeons.theProfessor.fireFreezeStaffTimer, + () -> config.dungeons.theProfessor.fireFreezeStaffTimer, + newValue -> config.dungeons.theProfessor.fireFreezeStaffTimer = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.professor.floor3GuardianHealthDisplay")) + .description(Text.translatable("skyblocker.config.dungeons.professor.floor3GuardianHealthDisplay.@Tooltip")) + .binding(defaults.dungeons.theProfessor.floor3GuardianHealthDisplay, + () -> config.dungeons.theProfessor.floor3GuardianHealthDisplay, + newValue -> config.dungeons.theProfessor.floor3GuardianHealthDisplay = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .build()) - // Livid (F5/M5) - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid.enableSolidColor")) - .description(Text.translatable("skyblocker.config.dungeons.livid.enableSolidColor.@Tooltip")) - .binding(defaults.dungeons.livid.enableSolidColor, - () -> config.dungeons.livid.enableSolidColor, - newValue -> config.dungeons.livid.enableSolidColor = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow")) - .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow.@Tooltip")) - .binding(defaults.dungeons.livid.enableLividColorGlow, - () -> config.dungeons.livid.enableLividColorGlow, - newValue -> config.dungeons.livid.enableLividColorGlow = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox")) - .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox.@Tooltip")) - .binding(defaults.dungeons.livid.enableLividColorBoundingBox, - () -> config.dungeons.livid.enableLividColorBoundingBox, - newValue -> config.dungeons.livid.enableLividColorBoundingBox = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText")) - .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText.@Tooltip")) - .binding(defaults.dungeons.livid.enableLividColorText, - () -> config.dungeons.livid.enableLividColorText, - newValue -> config.dungeons.livid.enableLividColorText = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorTitle")) - .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorTitle.@Tooltip")) - .binding(defaults.dungeons.livid.enableLividColorTitle, - () -> config.dungeons.livid.enableLividColorTitle, - newValue -> config.dungeons.livid.enableLividColorTitle = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.livid.lividColorText")) - .description(Text.translatable("skyblocker.config.dungeons.livid.lividColorText.@Tooltip")) - .binding(defaults.dungeons.livid.lividColorText, - () -> config.dungeons.livid.lividColorText, - newValue -> config.dungeons.livid.lividColorText = newValue) - .controller(StringController.createBuilder().build()) - .build()) - .build()) + // Livid (F5/M5) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableSolidColor")) + .description(Text.translatable("skyblocker.config.dungeons.livid.enableSolidColor.@Tooltip")) + .binding(defaults.dungeons.livid.enableSolidColor, + () -> config.dungeons.livid.enableSolidColor, + newValue -> config.dungeons.livid.enableSolidColor = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow")) + .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow.@Tooltip")) + .binding(defaults.dungeons.livid.enableLividColorGlow, + () -> config.dungeons.livid.enableLividColorGlow, + newValue -> config.dungeons.livid.enableLividColorGlow = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox")) + .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox.@Tooltip")) + .binding(defaults.dungeons.livid.enableLividColorBoundingBox, + () -> config.dungeons.livid.enableLividColorBoundingBox, + newValue -> config.dungeons.livid.enableLividColorBoundingBox = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText")) + .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText.@Tooltip")) + .binding(defaults.dungeons.livid.enableLividColorText, + () -> config.dungeons.livid.enableLividColorText, + newValue -> config.dungeons.livid.enableLividColorText = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorTitle")) + .description(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorTitle.@Tooltip")) + .binding(defaults.dungeons.livid.enableLividColorTitle, + () -> config.dungeons.livid.enableLividColorTitle, + newValue -> config.dungeons.livid.enableLividColorTitle = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.lividColorText")) + .description(Text.translatable("skyblocker.config.dungeons.livid.lividColorText.@Tooltip")) + .binding(defaults.dungeons.livid.lividColorText, + () -> config.dungeons.livid.lividColorText, + newValue -> config.dungeons.livid.lividColorText = newValue) + .controller(StringController.createBuilder().build()) + .build()) + .build()) - // Terminal (F7/M7) - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.terminals")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.terminals.solveColor")) - .binding(defaults.dungeons.terminals.solveColor, - () -> config.dungeons.terminals.solveColor, - newValue -> config.dungeons.terminals.solveColor = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.terminals.solveOrder")) - .binding(defaults.dungeons.terminals.solveOrder, - () -> config.dungeons.terminals.solveOrder, - newValue -> config.dungeons.terminals.solveOrder = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.terminals.solveStartsWith")) - .binding(defaults.dungeons.terminals.solveStartsWith, - () -> config.dungeons.terminals.solveStartsWith, - newValue -> config.dungeons.terminals.solveStartsWith = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) + // Terminal (F7/M7) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.terminals")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.terminals.solveColor")) + .binding(defaults.dungeons.terminals.solveColor, + () -> config.dungeons.terminals.solveColor, + newValue -> config.dungeons.terminals.solveColor = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.terminals.solveOrder")) + .binding(defaults.dungeons.terminals.solveOrder, + () -> config.dungeons.terminals.solveOrder, + newValue -> config.dungeons.terminals.solveOrder = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.terminals.solveStartsWith")) + .binding(defaults.dungeons.terminals.solveStartsWith, + () -> config.dungeons.terminals.solveStartsWith, + newValue -> config.dungeons.terminals.solveStartsWith = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.dungeons.terminals.solveSameColor")) .binding(defaults.dungeons.terminals.solveSameColor, @@ -334,407 +342,407 @@ public class DungeonsCategory { newValue -> config.dungeons.terminals.solveSameColor = newValue) .controller(ConfigUtils.createBooleanController()) .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.terminals.blockIncorrectClicks")) - .binding(defaults.dungeons.terminals.blockIncorrectClicks, - () -> config.dungeons.terminals.blockIncorrectClicks, - newValue -> config.dungeons.terminals.blockIncorrectClicks = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.terminals.blockIncorrectClicks")) + .binding(defaults.dungeons.terminals.blockIncorrectClicks, + () -> config.dungeons.terminals.blockIncorrectClicks, + newValue -> config.dungeons.terminals.blockIncorrectClicks = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .build()) - // Devices (F7/M7) - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.devices")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.devices.solveSimonSays")) - .description(Text.translatable("skyblocker.config.dungeons.devices.solveSimonSays.@Tooltip")) - .binding(defaults.dungeons.devices.solveSimonSays, - () -> config.dungeons.devices.solveSimonSays, - newValue -> config.dungeons.devices.solveSimonSays = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.devices.solveLightsOn")) - .description(Text.translatable("skyblocker.config.dungeons.devices.solveLightsOn.@Tooltip")) - .binding(defaults.dungeons.devices.solveLightsOn, - () -> config.dungeons.devices.solveLightsOn, - newValue -> config.dungeons.devices.solveLightsOn = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .build()) + // Devices (F7/M7) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.devices")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.devices.solveSimonSays")) + .description(Text.translatable("skyblocker.config.dungeons.devices.solveSimonSays.@Tooltip")) + .binding(defaults.dungeons.devices.solveSimonSays, + () -> config.dungeons.devices.solveSimonSays, + newValue -> config.dungeons.devices.solveSimonSays = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.devices.solveLightsOn")) + .description(Text.translatable("skyblocker.config.dungeons.devices.solveLightsOn.@Tooltip")) + .binding(defaults.dungeons.devices.solveLightsOn, + () -> config.dungeons.devices.solveLightsOn, + newValue -> config.dungeons.devices.solveLightsOn = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .build()) - // Waypoints for goldor phase in f7/m7 - .group(OptionGroup.createBuilder().name(Text.translatable("skyblocker.config.dungeons.goldorWaypoints")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.goldorWaypoints.enableGoldorWaypoints")) - .binding(defaults.dungeons.goldor.enableGoldorWaypoints, - () -> config.dungeons.goldor.enableGoldorWaypoints, - newValue -> config.dungeons.goldor.enableGoldorWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.goldorWaypoints.waypointType")) - .description(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip")) - .binding(defaults.dungeons.goldor.waypointType, - () -> config.dungeons.goldor.waypointType, - newValue -> config.dungeons.goldor.waypointType = newValue) - .controller(ConfigUtils.createEnumController()) - .build()) - .build()) + // Waypoints for goldor phase in f7/m7 + .group(OptionGroup.createBuilder().name(Text.translatable("skyblocker.config.dungeons.goldorWaypoints")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.goldorWaypoints.enableGoldorWaypoints")) + .binding(defaults.dungeons.goldor.enableGoldorWaypoints, + () -> config.dungeons.goldor.enableGoldorWaypoints, + newValue -> config.dungeons.goldor.enableGoldorWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.goldorWaypoints.waypointType")) + .description(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip")) + .binding(defaults.dungeons.goldor.waypointType, + () -> config.dungeons.goldor.waypointType, + newValue -> config.dungeons.goldor.waypointType = newValue) + .controller(ConfigUtils.createEnumController()) + .build()) + .build()) - // Dungeon Secret Waypoints - .group(OptionGroup.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints")) - .collapsed(true) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableSecretWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableSecretWaypoints, - () -> config.dungeons.secretWaypoints.enableSecretWaypoints, - newValue -> config.dungeons.secretWaypoints.enableSecretWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType")) - .description(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip"), - Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.generalNote")) - .binding(defaults.dungeons.secretWaypoints.waypointType, - () -> config.dungeons.secretWaypoints.waypointType, - newValue -> config.dungeons.secretWaypoints.waypointType = newValue) - .controller(ConfigUtils.createEnumController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.showSecretText")) - .binding(defaults.dungeons.secretWaypoints.showSecretText, - () -> config.dungeons.secretWaypoints.showSecretText, - newValue -> config.dungeons.secretWaypoints.showSecretText = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableEntranceWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableEntranceWaypoints, - () -> config.dungeons.secretWaypoints.enableEntranceWaypoints, - newValue -> config.dungeons.secretWaypoints.enableEntranceWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableSuperboomWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableSuperboomWaypoints, - () -> config.dungeons.secretWaypoints.enableSuperboomWaypoints, - newValue -> config.dungeons.secretWaypoints.enableSuperboomWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableChestWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableChestWaypoints, - () -> config.dungeons.secretWaypoints.enableChestWaypoints, - newValue -> config.dungeons.secretWaypoints.enableChestWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableItemWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableItemWaypoints, - () -> config.dungeons.secretWaypoints.enableItemWaypoints, - newValue -> config.dungeons.secretWaypoints.enableItemWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableBatWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableBatWaypoints, - () -> config.dungeons.secretWaypoints.enableBatWaypoints, - newValue -> config.dungeons.secretWaypoints.enableBatWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableWitherWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableWitherWaypoints, - () -> config.dungeons.secretWaypoints.enableWitherWaypoints, - newValue -> config.dungeons.secretWaypoints.enableWitherWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableLeverWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableLeverWaypoints, - () -> config.dungeons.secretWaypoints.enableLeverWaypoints, - newValue -> config.dungeons.secretWaypoints.enableLeverWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableFairySoulWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableFairySoulWaypoints, - () -> config.dungeons.secretWaypoints.enableFairySoulWaypoints, - newValue -> config.dungeons.secretWaypoints.enableFairySoulWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableStonkWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableStonkWaypoints, - () -> config.dungeons.secretWaypoints.enableStonkWaypoints, - newValue -> config.dungeons.secretWaypoints.enableStonkWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableAotvWaypoints")) - .binding(defaults.dungeons.secretWaypoints.enableAotvWaypoints, - () -> config.dungeons.secretWaypoints.enableAotvWaypoints, - newValue -> config.dungeons.secretWaypoints.enableAotvWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enablePearlWaypoints")) - .description(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enablePearlWaypoints.@Tooltip")) - .binding(defaults.dungeons.secretWaypoints.enablePearlWaypoints, - () -> config.dungeons.secretWaypoints.enablePearlWaypoints, - newValue -> config.dungeons.secretWaypoints.enablePearlWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableDefaultWaypoints")) - .description(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableDefaultWaypoints.@Tooltip")) - .binding(defaults.dungeons.secretWaypoints.enableDefaultWaypoints, - () -> config.dungeons.secretWaypoints.enableDefaultWaypoints, - newValue -> config.dungeons.secretWaypoints.enableDefaultWaypoints = newValue) - .controller(ConfigUtils.createBooleanController()) - .build()) - .build()) + // Dungeon Secret Waypoints + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableSecretWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableSecretWaypoints, + () -> config.dungeons.secretWaypoints.enableSecretWaypoints, + newValue -> config.dungeons.secretWaypoints.enableSecretWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType")) + .description(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip"), + Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.generalNote")) + .binding(defaults.dungeons.secretWaypoints.waypointType, + () -> config.dungeons.secretWaypoints.waypointType, + newValue -> config.dungeons.secretWaypoints.waypointType = newValue) + .controller(ConfigUtils.createEnumController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.showSecretText")) + .binding(defaults.dungeons.secretWaypoints.showSecretText, + () -> config.dungeons.secretWaypoints.showSecretText, + newValue -> config.dungeons.secretWaypoints.showSecretText = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableEntranceWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableEntranceWaypoints, + () -> config.dungeons.secretWaypoints.enableEntranceWaypoints, + newValue -> config.dungeons.secretWaypoints.enableEntranceWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableSuperboomWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableSuperboomWaypoints, + () -> config.dungeons.secretWaypoints.enableSuperboomWaypoints, + newValue -> config.dungeons.secretWaypoints.enableSuperboomWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableChestWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableChestWaypoints, + () -> config.dungeons.secretWaypoints.enableChestWaypoints, + newValue -> config.dungeons.secretWaypoints.enableChestWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableItemWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableItemWaypoints, + () -> config.dungeons.secretWaypoints.enableItemWaypoints, + newValue -> config.dungeons.secretWaypoints.enableItemWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableBatWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableBatWaypoints, + () -> config.dungeons.secretWaypoints.enableBatWaypoints, + newValue -> config.dungeons.secretWaypoints.enableBatWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableWitherWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableWitherWaypoints, + () -> config.dungeons.secretWaypoints.enableWitherWaypoints, + newValue -> config.dungeons.secretWaypoints.enableWitherWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableLeverWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableLeverWaypoints, + () -> config.dungeons.secretWaypoints.enableLeverWaypoints, + newValue -> config.dungeons.secretWaypoints.enableLeverWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableFairySoulWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableFairySoulWaypoints, + () -> config.dungeons.secretWaypoints.enableFairySoulWaypoints, + newValue -> config.dungeons.secretWaypoints.enableFairySoulWaypoints = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableStonkWaypoints")) + .binding(defaults.dungeons.secretWaypoints.enableStonkWaypoints, + () -> config.dungeons.secretWaypoints.enableStonkWaypoints, + newValue -> c