diff options
Diffstat (limited to 'src/main/java')
159 files changed, 4946 insertions, 4597 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java b/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java index ba0745ed..15c855a0 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerScreen.java @@ -1,5 +1,7 @@ package de.hysky.skyblocker; +import java.time.LocalDate; + import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.Tips; import de.hysky.skyblocker.utils.scheduler.Scheduler; @@ -26,7 +28,7 @@ public class SkyblockerScreen extends Screen { private static final int BUTTON_WIDTH = 210; private static final int HALF_BUTTON_WIDTH = 101; //Same as (210 - 8) / 2 private static final Text TITLE = Text.literal("Skyblocker " + SkyblockerMod.VERSION); - private static final Identifier ICON = new Identifier(SkyblockerMod.NAMESPACE, "icon.png"); + private static final Identifier ICON; private static final Text CONFIGURATION_TEXT = Text.translatable("text.skyblocker.config"); private static final Text SOURCE_TEXT = Text.translatable("text.skyblocker.source"); private static final Text REPORT_BUGS_TEXT = Text.translatable("menu.reportBugs"); @@ -36,6 +38,12 @@ public class SkyblockerScreen extends Screen { private static final Text DISCORD_TEXT = Text.translatable("text.skyblocker.discord"); private final ThreePartsLayoutWidget layout = new ThreePartsLayoutWidget(this); + static { + LocalDate date = LocalDate.now(); + + ICON = date.getMonthValue() == 4 && date.getDayOfMonth() == 1 ? new Identifier(SkyblockerMod.NAMESPACE, "icons.png") : new Identifier(SkyblockerMod.NAMESPACE, "icon.png"); + } + private SkyblockerScreen() { super(TITLE); } diff --git a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCategory.java b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCategory.java index dfc6e871..1474c8be 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCategory.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCategory.java @@ -74,7 +74,7 @@ public class SkyblockCategory implements DisplayCategory<SkyblockCraftingDisplay slots.get(i).entries(input.get(i)).markInput(); } out.addAll(slots); - out.add(Widgets.createSlot(resultPoint).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); + out.add(Widgets.createSlot(resultPoint).entries(display.getOutputEntries().getFirst()).disableBackground().markOutput()); // Add craftingText Label Label craftTextLabel = Widgets.createLabel(new Point(bounds.getCenterX(), startPoint.y + 55), Text.of(display.getCraftText())); diff --git a/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java b/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java index 41511732..328cbe18 100644 --- a/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java @@ -62,7 +62,7 @@ public abstract class HudConfigScreen extends Screen { */ protected void renderWidget(DrawContext context, List<Widget> widgets) { for (Widget widget : widgets) { - widget.render(context, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + widget.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); } } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 2d113361..c591ba14 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -1,1290 +1,45 @@ package de.hysky.skyblocker.config; -import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes; -import de.hysky.skyblocker.skyblock.item.CustomArmorTrims; -import de.hysky.skyblocker.utils.chat.ChatFilterResult; -import de.hysky.skyblocker.utils.waypoint.Waypoint; +import de.hysky.skyblocker.config.configs.*; import dev.isxander.yacl3.config.v2.api.SerialEntry; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; - -import java.util.ArrayList; -import java.util.List; public class SkyblockerConfig { - @SerialEntry - public int version = 1; - - @SerialEntry - public General general = new General(); - - @SerialEntry - public Locations locations = new Locations(); - - @SerialEntry - public Slayer slayer = new Slayer(); - - @SerialEntry - public QuickNav quickNav = new QuickNav(); - - @SerialEntry - public Messages messages = new Messages(); - - @SerialEntry - public RichPresence richPresence = new RichPresence(); - - public static class QuickNav { - @SerialEntry - public boolean enableQuickNav = true; - - @SerialEntry - public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); - - @SerialEntry - public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); - - /* REGEX Explanation - * "Pets" : simple match on letters - * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" - */ - @SerialEntry - public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets"); - - /* REGEX Explanation - * "Wardrobe" : simple match on letters - * " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)" - */ - @SerialEntry - public QuickNavItem button4 = new QuickNavItem(true, - new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", - "/wardrobe"); - - @SerialEntry - public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;-2081424676,-57521078,-2073572414,158072763],Properties:{textures:[{Value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}}}"), - "Sack of Sacks", "/sacks"); - - /* REGEX Explanation - * "(?:Rift )?" : optional match on the non-capturing group "Rift " - * "Storage" : simple match on letters - * "(?: \\([12]\\/2\\))?" : optional match on the non-capturing group " (1/2)" or " (2/2)" - */ - @SerialEntry - public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), - "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); - - @SerialEntry - public QuickNavItem button7 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}"), - "none", "/hub"); - - @SerialEntry - public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), - "none", "/warp dungeon_hub"); - - @SerialEntry - public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;-562285948,532499670,-1705302742,775653035],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjVkZjU1NTkyNjQzMGQ1ZDc1YWRlZDIxZGQ5NjE5Yjc2YzViN2NhMmM3ZjU0MDE0NDA1MjNkNTNhOGJjZmFhYiJ9fX0=\"}]}}}"), - "Visit prtl", "/visit prtl"); - - @SerialEntry - public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", - "/etable"); - - - @SerialEntry - public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); - - @SerialEntry - public QuickNavItem button12 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft"); - } - - public static class QuickNavItem { - public QuickNavItem(Boolean render, ItemData itemData, String uiTitle, String clickEvent) { - this.render = render; - this.item = itemData; - this.clickEvent = clickEvent; - this.uiTitle = uiTitle; - } - - @SerialEntry - public Boolean render; - - @SerialEntry - public ItemData item; - - @SerialEntry - public String uiTitle; - - @SerialEntry - public String clickEvent; - } - - public static class ItemData { - public ItemData(String itemName, int count, String nbt) { - this.itemName = itemName; - this.count = count; - this.nbt = nbt; - } - - public ItemData(String itemName) { - this.itemName = itemName; - this.count = 1; - this.nbt = ""; - } - - @SerialEntry - public String itemName; - - @SerialEntry - public int count; - - @SerialEntry - public String nbt; - } - - public static class General { - @SerialEntry - public boolean enableTips = true; - - @SerialEntry - public boolean acceptReparty = true; - - @SerialEntry - public boolean betterPartyFinder = true; - - @SerialEntry - public boolean fancyCraftingTable = true; - - @SerialEntry - public boolean backpackPreviewWithoutShift = false; - - @SerialEntry - public boolean compactorDeletorPreview = true; - - @SerialEntry - public boolean hideEmptyTooltips = true; - - @SerialEntry - public boolean hideStatusEffectOverlay = false; - - @SerialEntry - public boolean dontStripSkinAlphaValues = true; - - @SerialEntry - public boolean dungeonQuality = true; - - @SerialEntry - public boolean enableNewYearCakesHelper = true; - - @SerialEntry - public TabHudConf tabHud = new TabHudConf(); - - @SerialEntry - public Bars bars = new Bars(); - - @SerialEntry - public Experiments experiments = new Experiments(); - - @SerialEntry - public Fishing fishing = new Fishing(); - - @SerialEntry - public FairySouls fairySouls = new FairySouls(); - - @SerialEntry - public MythologicalRitual mythologicalRitual = new MythologicalRitual(); - - @SerialEntry - public ItemCooldown itemCooldown = new ItemCooldown(); - - @SerialEntry - public Shortcuts shortcuts = new Shortcuts(); - - @SerialEntry - public Waypoints waypoints = new Waypoints(); - - @SerialEntry - public QuiverWarning quiverWarning = new QuiverWarning(); - - @SerialEntry - public ItemList itemList = new ItemList(); - - @SerialEntry - public ItemTooltip itemTooltip = new ItemTooltip(); - - @SerialEntry - public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); - - @SerialEntry - public ItemProtection itemProtection = new ItemProtection(); - - @SerialEntry - public WikiLookup wikiLookup = new WikiLookup(); - - @SerialEntry - public ChestValue chestValue = new ChestValue(); - - @SerialEntry - public SpecialEffects specialEffects = new SpecialEffects(); - - @SerialEntry - public Hitbox hitbox = new Hitbox(); - - @SerialEntry - public TitleContainer titleContainer = new TitleContainer(); - - @SerialEntry - public TeleportOverlay teleportOverlay = new TeleportOverlay(); - - @SerialEntry - public FlameOverlay flameOverlay = new FlameOverlay(); - - @SerialEntry - public SearchOverlay searchOverlay = new SearchOverlay(); - - @SerialEntry - public FancyAuctionHouse fancyAuctionHouse = new FancyAuctionHouse(); - - @SerialEntry - public List<Integer> lockedSlots = new ArrayList<>(); - - @SerialEntry - public ObjectOpenHashSet<String> protectedItems = new ObjectOpenHashSet<>(); - - @SerialEntry - public Object2ObjectOpenHashMap<String, Text> customItemNames = new Object2ObjectOpenHashMap<>(); - - @SerialEntry - public Object2IntOpenHashMap<String> customDyeColors = new Object2IntOpenHashMap<>(); - - @SerialEntry - public Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customArmorTrims = new Object2ObjectOpenHashMap<>(); - - @SerialEntry - public Object2ObjectOpenHashMap<String, CustomArmorAnimatedDyes.AnimatedDye> customAnimatedDyes = new Object2ObjectOpenHashMap<>(); - } - - public static class TabHudConf { - @SerialEntry - public boolean tabHudEnabled = true; - - @SerialEntry - public int tabHudScale = 100; - - @SerialEntry - public boolean enableHudBackground = true; - - @SerialEntry - public boolean plainPlayerNames = false; - - @SerialEntry - public NameSorting nameSorting = NameSorting.DEFAULT; - } - - public enum NameSorting { - DEFAULT, ALPHABETICAL; - - @Override - public String toString() { - return switch (this) { - case DEFAULT -> "Default"; - case ALPHABETICAL -> "Alphabetical"; - }; - } - } - - public static class Bars { - @SerialEntry - public boolean enableBars = true; - - // Kept in for backwards compatibility, remove if needed - @SerialEntry - public OldBarPositions barPositions = new OldBarPositions(); - } - - /** - * Backwards compat - */ - public static class OldBarPositions { - @SerialEntry - public OldBarPosition healthBarPosition = OldBarPosition.LAYER1; - - @SerialEntry - public OldBarPosition manaBarPosition = OldBarPosition.LAYER1; - - @SerialEntry - public OldBarPosition defenceBarPosition = OldBarPosition.LAYER1; - - @SerialEntry - public OldBarPosition experienceBarPosition = OldBarPosition.LAYER1; - - } - - /** - * Backwards compat - */ - public enum OldBarPosition { - LAYER1, LAYER2, RIGHT, NONE - } - - public static class Experiments { - @SerialEntry - public boolean enableChronomatronSolver = true; - - @SerialEntry - public boolean enableSuperpairsSolver = true; - - @SerialEntry - public boolean enableUltrasequencerSolver = true; - } - - public static class Fishing { - @SerialEntry - public boolean enableFishingHelper = true; - - @SerialEntry - public boolean enableFishingTimer = false; - - @SerialEntry - public boolean changeTimerColor = true; - - @SerialEntry - public float fishingTimerScale = 1f; - - @SerialEntry - public boolean hideOtherPlayersRods = false; - } - - public static class FairySouls { - @SerialEntry - public boolean enableFairySoulsHelper = false; - - @SerialEntry - public boolean highlightFoundSouls = true; - - @SerialEntry - public boolean highlightOnlyNearbySouls = false; - } - - public static class MythologicalRitual { - @SerialEntry - public boolean enableMythologicalRitualHelper = true; - } - - public static class ItemCooldown { - @SerialEntry - public boolean enableItemCooldowns = true; - } - - public static class Shortcuts { - @SerialEntry - public boolean enableShortcuts = true; - - @SerialEntry - public boolean enableCommandShortcuts = true; - - @SerialEntry - public boolean enableCommandArgShortcuts = true; - } - - public static class Waypoints { - @SerialEntry - public boolean enableWaypoints = true; - - @SerialEntry - public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; - } - - public static class QuiverWarning { - @SerialEntry - public boolean enableQuiverWarning = true; - - @SerialEntry - public boolean enableQuiverWarningInDungeons = true; - - @SerialEntry - public boolean enableQuiverWarningAfterDungeon = true; - } - - public static class ItemList { - @SerialEntry - public boolean enableItemList = true; - } - - public static class ItemTooltip { - @SerialEntry - public boolean enableNPCPrice = true; - - @SerialEntry - public boolean enableMotesPrice = true; - - @SerialEntry - public boolean enableAvgBIN = true; - - @SerialEntry - public Average avg = Average.THREE_DAY; - - @SerialEntry - public boolean enableLowestBIN = true; - - @SerialEntry - public boolean enableBazaarPrice = true; - - @SerialEntry - public boolean enableObtainedDate = true; - - @SerialEntry - public boolean enableMuseumInfo = true; - - @SerialEntry - public boolean enableExoticTooltip = true; - - @SerialEntry - public boolean enableAccessoriesHelper = true; - } - - public enum Average { - ONE_DAY, THREE_DAY, BOTH; - - @Override - public String toString() { - return I18n.translate("text.autoconfig.skyblocker.option.general.itemTooltip.avg." + name()); - } - } - - public static class ItemInfoDisplay { - @SerialEntry - public boolean attributeShardInfo = true; - - @SerialEntry - public boolean itemRarityBackgrounds = false; - - @SerialEntry - public RarityBackgroundStyle itemRarityBackgroundStyle = RarityBackgroundStyle.CIRCULAR; - - @SerialEntry - public float itemRarityBackgroundsOpacity = 1f; - } - - public enum RarityBackgroundStyle { - CIRCULAR(new Identifier(SkyblockerMod.NAMESPACE, "item_rarity_background_circular")), - SQUARE(new Identifier(SkyblockerMod.NAMESPACE, "item_rarity_background_square")); - - public final Identifier tex; - - RarityBackgroundStyle(Identifier tex) { - this.tex = tex; - } - - @Override - public String toString() { - return switch (this) { - case CIRCULAR -> "Circular"; - case SQUARE -> "Square"; - }; - } - } - - public static class ItemProtection { - @SerialEntry - public SlotLockStyle slotLockStyle = SlotLockStyle.FANCY; - } - - public enum SlotLockStyle { - CLASSIC(new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png")), - FANCY(new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/fancy_slot_lock.png")); - - public final Identifier tex; - - SlotLockStyle(Identifier tex) { - this.tex = tex; - } - - @Override - public String toString() { - return switch (this) { - case CLASSIC -> "Classic"; - case FANCY -> "FANCY"; - }; - } - } - - public static class WikiLookup { - @SerialEntry - public boolean enableWikiLookup = true; - - @SerialEntry - public boolean officialWiki = true; - } - - public static class ChestValue { - @SerialEntry - public boolean enableChestValue = true; - - @SerialEntry - public Formatting color = Formatting.DARK_GREEN; - - @SerialEntry - public Formatting incompleteColor = Formatting.BLUE; - } - - public static class SpecialEffects { - @SerialEntry - public boolean rareDungeonDropEffects = true; - } - - public static class Hitbox { - @SerialEntry - public boolean oldFarmlandHitbox = false; - - @SerialEntry - public boolean oldLeverHitbox = false; - } - - public static class TitleContainer { - @SerialEntry - public float titleContainerScale = 100; - - @SerialEntry - public int x = 540; - - @SerialEntry - public int y = 10; - - @SerialEntry - public Direction direction = Direction.HORIZONTAL; - - @SerialEntry - public Alignment alignment = Alignment.MIDDLE; - } - - public enum Direction { - HORIZONTAL, VERTICAL; - - @Override - public String toString() { - return switch (this) { - case HORIZONTAL -> "Horizontal"; - case VERTICAL -> "Vertical"; - }; - } - } - - public enum Alignment { - LEFT, RIGHT, MIDDLE; - - @Override - public String toString() { - return switch (this) { - case LEFT -> "Left"; - case RIGHT -> "Right"; - case MIDDLE -> "Middle"; - }; - } - } - - public static class TeleportOverlay { - @SerialEntry - public boolean enableTeleportOverlays = true; - - @SerialEntry - public boolean enableWeirdTransmission = true; - - @SerialEntry - public boolean enableInstantTransmission = true; - - @SerialEntry - public boolean enableEtherTransmission = true; - - @SerialEntry - public boolean enableSinrecallTransmission = true; - - @SerialEntry - public boolean enableWitherImpact = true; - } - - public static class FlameOverlay { - @SerialEntry - public int flameHeight = 100; - - @SerialEntry - public int flameOpacity = 100; - } - - public static class SearchOverlay { - @SerialEntry - public boolean enableBazaar = true; - - @SerialEntry - public boolean enableAuctionHouse = true; - - @SerialEntry - public boolean keepPreviousSearches = false; - - @SerialEntry - public int maxSuggestions = 3; - - @SerialEntry - public int historyLength = 3; - - @SerialEntry - public boolean enableCommands = false; - - @SerialEntry - public List<String> bazaarHistory = new ArrayList<>(); - - @SerialEntry - public List<String> auctionHistory = new ArrayList<>(); - } - - public static class FancyAuctionHouse { - @SerialEntry - public boolean enabled = true; - - @SerialEntry - public boolean highlightCheapBIN = true; - } - - public static class Locations { - @SerialEntry - public Barn barn = new Barn(); - - @SerialEntry - public CrimsonIsle crimsonIsle = new CrimsonIsle(); - - @SerialEntry - public Dungeons dungeons = new Dungeons(); - - @SerialEntry - public DwarvenMines dwarvenMines = new DwarvenMines(); - - @SerialEntry - public Rift rift = new Rift(); - - @SerialEntry - public TheEnd end = new TheEnd(); - - @SerialEntry - public SpidersDen spidersDen = new SpidersDen(); - - @SerialEntry - public Garden garden = new Garden(); - } - - public static class Dungeons { - @SerialEntry - public SecretWaypoints secretWaypoints = new SecretWaypoints(); - - @SerialEntry - public DoorHighlight doorHighlight = new DoorHighlight(); - - @SerialEntry - public DungeonScore dungeonScore = new DungeonScore(); - - @SerialEntry - public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit(); - - @SerialEntry - public MimicMessage mimicMessage = new MimicMessage(); - - @SerialEntry - public boolean croesusHelper = true; - - @SerialEntry - public boolean enableMap = true; - - @SerialEntry - public float mapScaling = 1f; - - @SerialEntry - public int mapX = 2; - - @SerialEntry - public int mapY = 2; - - @SerialEntry - public boolean playerSecretsTracker = false; - - @SerialEntry - public boolean starredMobGlow = false; - - @SerialEntry - public boolean starredMobBoundingBoxes = true; - - @SerialEntry - public boolean solveThreeWeirdos = true; - - @SerialEntry - public boolean blazeSolver = true; - - @SerialEntry - public boolean creeperSolver = true; - - @SerialEntry - public boolean solveTrivia = true; - - @SerialEntry - public boolean solveTicTacToe = true; - - @SerialEntry - public boolean solveWaterboard = true; - - @SerialEntry - public boolean solveBoulder = true; - - @SerialEntry - public boolean solveIceFill = true; - - @SerialEntry - public boolean solveSilverfish = true; - - @SerialEntry - public boolean fireFreezeStaffTimer = true; - - @SerialEntry - public boolean floor3GuardianHealthDisplay = true; - - @SerialEntry - public boolean allowDroppingProtectedItems = false; - - @SerialEntry - public LividColor lividColor = new LividColor(); - - @SerialEntry - public Terminals terminals = new Terminals(); - } - - public static class SecretWaypoints { - @SerialEntry - public boolean enableRoomMatching = true; - - @SerialEntry - public boolean enableSecretWaypoints = true; - - @SerialEntry - public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; - - @SerialEntry - public boolean showSecretText = true; - - @SerialEntry - public boolean enableEntranceWaypoints = true; - - @SerialEntry - public boolean enableSuperboomWaypoints = true; - - @SerialEntry - public boolean enableChestWaypoints = true; - - @SerialEntry - public boolean enableItemWaypoints = true; - - @SerialEntry - public boolean enableBatWaypoints = true; - - @SerialEntry - public boolean enableWitherWaypoints = true; - - @SerialEntry - public boolean enableLeverWaypoints = true; - - @SerialEntry - public boolean enableFairySoulWaypoints = true; - - @SerialEntry - public boolean enableStonkWaypoints = true; - - @SerialEntry - public boolean enableAotvWaypoints = true; - - @SerialEntry - public boolean enablePearlWaypoints = true; - - @SerialEntry - public boolean enableDefaultWaypoints = true; - } - - public static class DoorHighlight { - @SerialEntry - public boolean enableDoorHighlight = true; - - @SerialEntry - public Type doorHighlightType = Type.OUTLINED_HIGHLIGHT; - - public enum Type { - HIGHLIGHT, - OUTLINED_HIGHLIGHT, - OUTLINE; - - @Override - public String toString() { - return switch (this) { - case HIGHLIGHT -> "Highlight"; - case OUTLINED_HIGHLIGHT -> "Outlined Highlight"; - case OUTLINE -> "Outline"; - }; - } - } - } - - public static class DungeonScore { - @SerialEntry - public boolean enableDungeonScore270Message = false; - - @SerialEntry - public boolean enableDungeonScore270Title = false; - - @SerialEntry - public boolean enableDungeonScore270Sound = false; - - @SerialEntry - public String dungeonScore270Message = "270 Score Reached!"; - - @SerialEntry - public boolean enableDungeonScore300Message = true; - - @SerialEntry - public boolean enableDungeonScore300Title = true; - - @SerialEntry - public boolean enableDungeonScore300Sound = true; - - @SerialEntry - public String dungeonScore300Message = "300 Score Reached!"; - - @SerialEntry - public boolean enableDungeonCryptsMessage = true; - - @SerialEntry - public int dungeonCryptsMessageThreshold = 250; - - @SerialEntry - public String dungeonCryptsMessage = "We only have [crypts] crypts out of 5, we need more!"; - - @SerialEntry - public boolean enableScoreHUD = true; - - @SerialEntry - public int scoreX = 29; - - @SerialEntry - public int scoreY = 134; - - @SerialEntry - public float scoreScaling = 1f; - } - - public static class DungeonChestProfit { - @SerialEntry - public boolean enableProfitCalculator = true; - - @SerialEntry - public boolean includeKismet = false; - - @SerialEntry - public boolean includeEssence = true; - - @SerialEntry - public boolean croesusProfit = true; - - @SerialEntry - public int neutralThreshold = 1000; - - @SerialEntry - public Formatting neutralColor = Formatting.DARK_GRAY; - - @SerialEntry - public Formatting profitColor = Formatting.DARK_GREEN; - - @SerialEntry - public Formatting lossColor = Formatting.RED; - - @SerialEntry - public Formatting incompleteColor = Formatting.BLUE; - } - - public static class MimicMessage { - @SerialEntry - public boolean sendMimicMessage = true; - - @SerialEntry - public String mimicMessage = "Mimic dead!"; - } - - public static class LividColor { - @SerialEntry - public boolean enableLividColorGlow = true; - - @SerialEntry - public boolean enableLividColorText = true; - - @SerialEntry - public boolean enableLividColorTitle = true; - - @SerialEntry - public String lividColorText = "The livid color is [color]"; - } - - public static class Terminals { - @SerialEntry - public boolean solveColor = true; - - @SerialEntry - public boolean solveOrder = true; - - @SerialEntry - public boolean solveStartsWith = true; - } - - public static class DwarvenMines { - @SerialEntry - public boolean enableDrillFuel = true; - - @SerialEntry - public boolean solveFetchur = true; - - @SerialEntry - public boolean solvePuzzler = true; - - @SerialEntry - public boolean metalDetectorHelper = true; - - @SerialEntry - public DwarvenHud dwarvenHud = new DwarvenHud(); - - @SerialEntry - public CrystalsHud crystalsHud = new CrystalsHud(); - - @SerialEntry - public CrystalsWaypoints crystalsWaypoints = new CrystalsWaypoints(); - } - - public static class DwarvenHud { - @SerialEntry - public boolean enabledCommissions = true; - - @SerialEntry - public boolean enabledPowder = true; - - @SerialEntry - public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE; - - @SerialEntry - public int x = 10; - - @SerialEntry - public int y = 10; - - @SerialEntry - public int powderX = 10; - - @SerialEntry - public int powderY = 70; - } - - public static class CrystalsHud { - @SerialEntry - public boolean enabled = true; - - @SerialEntry - public boolean showLocations = true; - - @SerialEntry - public int locationSize = 8; - - @SerialEntry - public int x = 10; - - @SerialEntry - public int y = 130; - - @SerialEntry - public float mapScaling = 1f; - } - - public static class CrystalsWaypoints { - @SerialEntry - public boolean enabled = true; - - @SerialEntry - public boolean findInChat = true; - } - - public enum DwarvenHudStyle { - SIMPLE, FANCY, CLASSIC; - - @Override - public String toString() { - return switch (this) { - case SIMPLE -> "Simple"; - case FANCY -> "Fancy"; - case CLASSIC -> "Classic"; - }; - } - } - - public static class Barn { - @SerialEntry - public boolean solveHungryHiker = true; - - @SerialEntry - public boolean solveTreasureHunter = true; - } - - public static class CrimsonIsle { - @SerialEntry - public Kuudra kuudra = new Kuudra(); - } - - public static class Kuudra { - @SerialEntry - public boolean supplyWaypoints = true; - - @SerialEntry - public boolean fuelWaypoints = true; - - @SerialEntry - public Waypoint.Type suppliesAndFuelWaypointType = Waypoint.Type.WAYPOINT; - - @SerialEntry - public boolean ballistaBuildWaypoints = true; - - @SerialEntry - public boolean safeSpotWaypoints = true; - - @SerialEntry - public boolean pearlWaypoints = true; - - @SerialEntry - public boolean noArrowPoisonWarning = true; - - @SerialEntry - public int arrowPoisonThreshold = 32; - } - - public static class Rift { - @SerialEntry - public boolean mirrorverseWaypoints = true; - - @SerialEntry - public boolean blobbercystGlow = true; - - @SerialEntry - public boolean enigmaSoulWaypoints = false; - - @SerialEntry - public boolean highlightFoundEnigmaSouls = true; - - @SerialEntry - public int mcGrubberStacks = 0; - } - - public static class TheEnd { - @SerialEntry - public boolean enableEnderNodeHelper = true; - - @SerialEntry - public boolean hudEnabled = true; - - @SerialEntry - public boolean zealotKillsEnabled = true; - - @SerialEntry - public boolean protectorLocationEnabled = true; - - @SerialEntry - public boolean waypoint = true; - - @SerialEntry - public int x = 10; - - @SerialEntry - public int y = 10; - } - - public static class SpidersDen { - @SerialEntry - public Relics relics = new Relics(); - } - - public static class Relics { - @SerialEntry - public boolean enableRelicsHelper = false; - - @SerialEntry - public boolean highlightFoundRelics = true; - } - - public static class Garden { - @SerialEntry - public FarmingHud farmingHud = new FarmingHud(); - - @SerialEntry - public boolean dicerTitlePrevent = true; - - @SerialEntry - public boolean visitorHelper = true; - - @SerialEntry - public boolean lockMouseTool = false; - - @SerialEntry - public boolean lockMouseGroundOnly = false; - } - - public static class FarmingHud { - @SerialEntry - public boolean enableHud = true; - - @SerialEntry - public int x; - - @SerialEntry - public int y; - } - - public static class Slayer { - @SerialEntry - public EndermanSlayer endermanSlayer = new EndermanSlayer(); - - @SerialEntry - public VampireSlayer vampireSlayer = new VampireSlayer(); - } - - public static class EndermanSlayer { - @SerialEntry - public boolean enableYangGlyphsNotification = true; - - @SerialEntry - public boolean highlightBeacons = true; - - @SerialEntry - public boolean highlightNukekubiHeads = true; - } - - public static class VampireSlayer { - @SerialEntry - public boolean enableEffigyWaypoints = true; - - @SerialEntry - public boolean compactEffigyWaypoints; - - @SerialEntry - public int effigyUpdateFrequency = 5; - - @SerialEntry - public boolean enableHolyIceIndicator = true; - - @SerialEntry - public int holyIceIndicatorTickDelay = 10; - - @SerialEntry - public int holyIceUpdateFrequency = 5; - - @SerialEntry - public boolean enableHealingMelonIndicator = true; - - @SerialEntry - public float healingMelonHealthThreshold = 4f; - - @SerialEntry - public boolean enableSteakStakeIndicator = true; - - @SerialEntry - public int steakStakeUpdateFrequency = 5; - - @SerialEntry - public boolean enableManiaIndicator = true; - - @SerialEntry - public int maniaUpdateFrequency = 5; - } - - public static class Messages { - @SerialEntry - public ChatFilterResult hideAbility = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideHeal = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideAOTE = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideImplosion = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideAds = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideCombo = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideAutopet = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideShowOff = ChatFilterResult.PASS; - - @SerialEntry - public ChatFilterResult hideToggleSkyMall = ChatFilterResult.PASS; + @SerialEntry + public int version = 2; - @SerialEntry - public ChatFilterResult hideMimicKill = ChatFilterResult.PASS; + @SerialEntry + public GeneralConfig general = new GeneralConfig(); - @SerialEntry - public ChatFilterResult hideDeath = ChatFilterResult.PASS; + @SerialEntry + public UIAndVisualsConfig uiAndVisuals = new UIAndVisualsConfig(); - @SerialEntry - public boolean hideMana = false; + @SerialEntry + public HelperConfig helpers = new HelperConfig(); - @SerialEntry - public ChatFilterResult hideDicer = ChatFilterResult.PASS; + @SerialEntry + public DungeonsConfig dungeons = new DungeonsConfig(); - @SerialEntry - public ChatRuleConfig chatRuleConfig = new ChatRuleConfig(); - } + @SerialEntry + public CrimsonIsleConfig crimsonIsle = new CrimsonIsleConfig(); - public static class ChatRuleConfig { - @SerialEntry - public int announcementLength = 60; - @SerialEntry - public int announcementScale = 3; - } + @SerialEntry + public MiningConfig mining = new MiningConfig(); - public static class RichPresence { - @SerialEntry - public boolean enableRichPresence = false; + @SerialEntry + public FarmingConfig farming = new FarmingConfig(); - @SerialEntry - public Info info = Info.LOCATION; + @SerialEntry + public OtherLocationsConfig otherLocations = new OtherLocationsConfig(); - @SerialEntry - public boolean cycleMode = false; + @SerialEntry + public SlayersConfig slayers = new SlayersConfig(); - @SerialEntry - public String customMessage = "Playing Skyblock"; - } + @SerialEntry + public ChatConfig chat = new ChatConfig(); - public enum Info { - PURSE, BITS, LOCATION; + @SerialEntry + public QuickNavigationConfig quickNav = new QuickNavigationConfig(); - @Override - public String toString() { - return I18n.translate("text.autoconfig.skyblocker.option.richPresence.info." + name()); - } - } + @SerialEntry + public MiscConfig misc = new MiscConfig(); } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java index 31f1357d..4b8e56df 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java @@ -26,69 +26,72 @@ import java.lang.StackWalker.Option; import java.nio.file.Path; public class SkyblockerConfigManager { - private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json"); - private static final ConfigClassHandler<SkyblockerConfig> HANDLER = ConfigClassHandler.createBuilder(SkyblockerConfig.class) - .serializer(config -> GsonConfigSerializerBuilder.create(config) - .setPath(PATH) - .setJson5(false) - .appendGsonBuilder(builder -> builder - .setFieldNamingPolicy(FieldNamingPolicy.IDENTITY) - .registerTypeHierarchyAdapter(Identifier.class, new Identifier.Serializer())) - .build()) - .build(); + private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve("skyblocker-2.json"); + private static final ConfigClassHandler<SkyblockerConfig> HANDLER = ConfigClassHandler.createBuilder(SkyblockerConfig.class) + .serializer(config -> GsonConfigSerializerBuilder.create(config) + .setPath(PATH) + .setJson5(false) + .appendGsonBuilder(builder -> builder + .setFieldNamingPolicy(FieldNamingPolicy.IDENTITY) + .registerTypeHierarchyAdapter(Identifier.class, new Identifier.Serializer())) + .build()) + .build(); - public static SkyblockerConfig get() { - return HANDLER.instance(); - } + public static SkyblockerConfig get() { + return HANDLER.instance(); + } - /** - * This method is caller sensitive and can only be called by the mod initializer, - * this is enforced. - */ - public static void init() { - if (StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE).getCallerClass() != SkyblockerMod.class) { - throw new RuntimeException("Skyblocker: Called config init from an illegal place!"); - } + /** + * This method is caller sensitive and can only be called by the mod initializer, + * this is enforced. + */ + public static void init() { + if (StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE).getCallerClass() != SkyblockerMod.class) { + throw new RuntimeException("Skyblocker: Called config init from an illegal place!"); + } - HANDLER.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 (screen instanceof GenericContainerScreen genericContainerScreen && screen.getTitle().getString().equals("SkyBlock Menu")) { - Screens.getButtons(screen).add(ButtonWidget - .builder(Text.literal("\uD83D\uDD27"), buttonWidget -> client.setScreen(createGUI(screen))) - .dimensions(((HandledScreenAccessor) genericContainerScreen).getX() + ((HandledScreenAccessor) genericContainerScreen).getBackgroundWidth() - 16, ((HandledScreenAccessor) genericContainerScreen).getY() + 4, 12, 12) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.title"))) - .build()); - } - }); - } + HANDLER.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 (screen instanceof GenericContainerScreen genericContainerScreen && screen.getTitle().getString().equals("SkyBlock Menu")) { + Screens.getButtons(screen).add(ButtonWidget + .builder(Text.literal("\uD83D\uDD27"), buttonWidget -> client.setScreen(createGUI(screen))) + .dimensions(((HandledScreenAccessor) genericContainerScreen).getX() + ((HandledScreenAccessor) genericContainerScreen).getBackgroundWidth() - 16, ((HandledScreenAccessor) genericContainerScreen).getY() + 4, 12, 12) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.title"))) + .build()); + } + }); + } - public static void save() { - HANDLER.save(); - } + public static void save() { + HANDLER.save(); + } - public static Screen createGUI(Screen parent) { - return YetAnotherConfigLib.create(HANDLER, (defaults, config, builder) -> builder - .title(Text.translatable("text.autoconfig.skyblocker.title")) - .category(GeneralCategory.create(defaults, config)) - .category(DungeonsCategory.create(defaults, config)) - .category(DwarvenMinesCategory.create(defaults, config)) - .category(CrimsonIsleCategory.create(defaults, config)) - .category(LocationsCategory.create(defaults, config)) - .category(SlayersCategory.create(defaults, config)) - .category(QuickNavigationCategory.create(defaults, config)) - .category(MessageFilterCategory.create(defaults, config)) - .category(DiscordRPCCategory.create(defaults, config))).generateScreen(parent); - } + 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(CrimsonIsleCategory.create(defaults, config)) + .category(MiningCategory.create(defaults, config)) + .category(FarmingCategory.create(defaults, config)) + .category(OtherLocationsCategory.create(defaults, config)) + .category(SlayersCategory.create(defaults, config)) + .category(ChatCategory.create(defaults, config)) + .category(QuickNavigationCategory.create(defaults, config)) + .category(MiscCategory.create(defaults, config))).generateScreen(parent); + } - /** - * Registers an options command with the given name. Used for registering both options and config as valid commands. - * - * @param name the name of the command node - * @return the command builder - */ - private static LiteralArgumentBuilder<FabricClientCommandSource> optionsLiteral(String name) { - // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed - return ClientCommandManager.literal(name).executes(Scheduler.queueOpenScreenCommand(() -> createGUI(null))); - } + /** + * Registers an options command with the given name. Used for registering both options and config as valid commands. + * + * @param name the name of the command node + * @return the command builder + */ + private static LiteralArgumentBuilder<FabricClientCommandSource> optionsLiteral(String name) { + // Don't immediately open the next screen as it will be closed by ChatScreen right after this command is executed + return ClientCommandManager.literal(name).executes(Scheduler.queueOpenScreenCommand(() -> createGUI(null))); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java new file mode 100644 index 00000000..993b07e4 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java @@ -0,0 +1,163 @@ +package de.hysky.skyblocker.config.categories; + +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.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; + +public class ChatCategory { + + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.chat")) + + //Uncategorized Options + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter")) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideAbility")) + .binding(defaults.chat.hideAbility, + () -> config.chat.hideAbility, + newValue -> config.chat.hideAbility = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideHeal")) + .binding(defaults.chat.hideHeal, + () -> config.chat.hideHeal, + newValue -> config.chat.hideHeal = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideAOTE")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideAOTE.@Tooltip"))) + .binding(defaults.chat.hideAOTE, + () -> config.chat.hideAOTE, + newValue -> config.chat.hideAOTE = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideImplosion")) + .binding(defaults.chat.hideImplosion, + () -> config.chat.hideImplosion, + newValue -> config.chat.hideImplosion = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideMoltenWave")) + .binding(defaults.chat.hideMoltenWave, + () -> config.chat.hideMoltenWave, + newValue -> config.chat.hideMoltenWave = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideAds")) + .binding(defaults.chat.hideAds, + () -> config.chat.hideAds, + newValue -> config.chat.hideAds = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideTeleportPad")) + .binding(defaults.chat.hideTeleportPad, + () -> config.chat.hideTeleportPad, + newValue -> config.chat.hideTeleportPad = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideCombo")) + .binding(defaults.chat.hideCombo, + () -> config.chat.hideCombo, + newValue -> config.chat.hideCombo = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideAutopet")) + .binding(defaults.chat.hideAutopet, + () -> config.chat.hideAutopet, + newValue -> config.chat.hideAutopet = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideShowOff")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideShowOff.@Tooltip"))) + .binding(defaults.chat.hideShowOff, + () -> config.chat.hideShowOff, + newValue -> config.chat.hideShowOff = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideToggleSkyMall")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideToggleSkyMall.@Tooltip"))) + .binding(defaults.chat.hideToggleSkyMall, + () -> config.chat.hideToggleSkyMall, + newValue -> config.chat.hideToggleSkyMall = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideMana")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideMana.@Tooltip"))) + .binding(defaults.chat.hideMana, + () -> config.chat.hideMana, + newValue -> config.chat.hideMana = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideMimicKill")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideMimicKill.@Tooltip"))) + .binding(defaults.chat.hideMimicKill, + () -> config.chat.hideMimicKill, + newValue -> config.chat.hideMimicKill = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideDeath")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideDeath.@Tooltip"))) + .binding(defaults.chat.hideDeath, + () -> config.chat.hideDeath, + newValue -> config.chat.hideDeath = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("skyblocker.config.chat.filter.hideDicer")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.filter.hideDicer.@Tooltip"))) + .binding(defaults.chat.hideDicer, + () -> config.chat.hideDicer, + newValue -> config.chat.hideDicer = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .build()) + + //chat rules options + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.chat.chatRules")) + .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))) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.chat.chatRules.announcementLength")) + .description(OptionDescription.of(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)) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.chat.chatRules.announcementScale")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.chatRules.announcementScale.@Tooltip"))) + .binding(defaults.chat.chatRuleConfig.announcementScale, + () -> config.chat.chatRuleConfig.announcementScale, + newValue -> config.chat.chatRuleConfig.announcementScale = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 8).step(1)) + .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 3c2dc3b6..fed8fa96 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java @@ -12,74 +12,75 @@ import net.minecraft.text.Text; public class CrimsonIsleCategory { - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.crimsonIsle")) + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.crimsonIsle")) - //Kuudra - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.supplyWaypoints")) - .binding(defaults.locations.crimsonIsle.kuudra.supplyWaypoints, - () -> config.locations.crimsonIsle.kuudra.supplyWaypoints, - newValue -> config.locations.crimsonIsle.kuudra.supplyWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.fuelWaypoints")) - .binding(defaults.locations.crimsonIsle.kuudra.fuelWaypoints, - () -> config.locations.crimsonIsle.kuudra.fuelWaypoints, - newValue -> config.locations.crimsonIsle.kuudra.fuelWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Waypoint.Type>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip"))) - .binding(defaults.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType, - () -> config.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType, - newValue -> config.locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.ballistaBuildWaypoints")) - .binding(defaults.locations.crimsonIsle.kuudra.ballistaBuildWaypoints, - () -> config.locations.crimsonIsle.kuudra.ballistaBuildWaypoints, - newValue -> config.locations.crimsonIsle.kuudra.ballistaBuildWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.safeSpotWaypoints")) - .binding(defaults.locations.crimsonIsle.kuudra.safeSpotWaypoints, - () -> config.locations.crimsonIsle.kuudra.safeSpotWaypoints, - newValue -> config.locations.crimsonIsle.kuudra.safeSpotWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.pearlWaypoints")) - .binding(defaults.locations.crimsonIsle.kuudra.pearlWaypoints, - () -> config.locations.crimsonIsle.kuudra.pearlWaypoints, - newValue -> config.locations.crimsonIsle.kuudra.pearlWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.noArrowPoisonWarning.@Tooltip"))) - .binding(defaults.locations.crimsonIsle.kuudra.noArrowPoisonWarning, - () -> config.locations.crimsonIsle.kuudra.noArrowPoisonWarning, - newValue -> config.locations.crimsonIsle.kuudra.noArrowPoisonWarning = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.arrowPoisonThreshold")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.crimsonIsle.kuudra.arrowPoisonThreshold.@Tooltip"))) - .binding(defaults.locations.crimsonIsle.kuudra.arrowPoisonThreshold, - () -> config.locations.crimsonIsle.kuudra.arrowPoisonThreshold, - newValue -> config.locations.crimsonIsle.kuudra.arrowPoisonThreshold = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .build()) - .build(); - } + //Kuudra + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.supplyWaypoints")) + .binding(defaults.crimsonIsle.kuudra.supplyWaypoints, + () -> config.crimsonIsle.kuudra.supplyWaypoints, + newValue -> config.crimsonIsle.kuudra.supplyWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>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) + .build()) + .option(Option.<Waypoint.Type>createBuilder() + .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.suppliesAndFuelWaypointType")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType.@Tooltip"), + Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType.generalNote"))) + .binding(defaults.crimsonIsle.kuudra.suppliesAndFuelWaypointType, + () -> config.crimsonIsle.kuudra.suppliesAndFuelWaypointType, + newValue -> config.crimsonIsle.kuudra.suppliesAndFuelWaypointType = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<Boolean>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) + .build()) + .option(Option.<Boolean>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) + .build()) + .option(Option.<Boolean>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) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.noArrowPoisonWarning")) + .description(OptionDescription.of(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) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.crimsonIsle.kuudra.arrowPoisonThreshold")) + .description(OptionDescription.of(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) + .build()) + .build()) + .build(); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DiscordRPCCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DiscordRPCCategory.java deleted file mode 100644 index 907291ca..00000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/DiscordRPCCategory.java +++ /dev/null @@ -1,49 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -import de.hysky.skyblocker.config.ConfigUtils; -import de.hysky.skyblocker.config.SkyblockerConfig; -import dev.isxander.yacl3.api.ConfigCategory; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.OptionDescription; -import dev.isxander.yacl3.api.controller.StringControllerBuilder; -import net.minecraft.text.Text; - -public class DiscordRPCCategory { - - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.richPresence")) - - //Uncategorized Options - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.richPresence.enableRichPresence")) - .binding(defaults.richPresence.enableRichPresence, - () -> config.richPresence.enableRichPresence, - newValue -> config.richPresence.enableRichPresence = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<SkyblockerConfig.Info>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.richPresence.info")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.richPresence.info.@Tooltip"))) - .binding(defaults.richPresence.info, - () -> config.richPresence.info, - newValue -> config.richPresence.info = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.richPresence.cycleMode")) - .binding(defaults.richPresence.cycleMode, - () -> config.richPresence.cycleMode, - newValue -> config.richPresence.cycleMode = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.richPresence.customMessage")) - .binding(defaults.richPresence.customMessage, - () -> config.richPresence.customMessage, - newValue -> config.richPresence.customMessage = newValue) - .controller(StringControllerBuilder::create) - .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 77d2da6d..d44ab490 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.config.categories; 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.*; @@ -14,573 +15,604 @@ import net.minecraft.util.Formatting; public class DungeonsCategory { - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons")) + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons")) - //Dungeon Secret Waypoints - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableRoomMatching")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableRoomMatching.@Tooltip"))) - .binding(defaults.locations.dungeons.secretWaypoints.enableRoomMatching, - () -> config.locations.dungeons.secretWaypoints.enableRoomMatching, - newValue -> config.locations.dungeons.secretWaypoints.enableRoomMatching = newValue) - .controller(ConfigUtils::createBooleanController) - .flag(OptionFlag.GAME_RESTART) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableSecretWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableSecretWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableSecretWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableSecretWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Type>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip"))) - .binding(defaults.locations.dungeons.secretWaypoints.waypointType, - () -> config.locations.dungeons.secretWaypoints.waypointType, - newValue -> config.locations.dungeons.secretWaypoints.waypointType = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.showSecretText")) - .binding(defaults.locations.dungeons.secretWaypoints.showSecretText, - () -> config.locations.dungeons.secretWaypoints.showSecretText, - newValue -> config.locations.dungeons.secretWaypoints.showSecretText = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableEntranceWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableEntranceWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableEntranceWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableEntranceWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableSuperboomWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableSuperboomWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableSuperboomWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableSuperboomWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableChestWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableChestWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableChestWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableChestWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableItemWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableItemWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableItemWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableItemWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableBatWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableBatWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableBatWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableBatWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableWitherWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableWitherWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableWitherWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableWitherWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableLeverWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableLeverWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableLeverWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableLeverWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableFairySoulWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableFairySoulWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableFairySoulWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableFairySoulWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableStonkWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableStonkWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableStonkWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableStonkWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableAotvWaypoints")) - .binding(defaults.locations.dungeons.secretWaypoints.enableAotvWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableAotvWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableAotvWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enablePearlWaypoints")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enablePearlWaypoints.@Tooltip"))) - .binding(defaults.locations.dungeons.secretWaypoints.enablePearlWaypoints, - () -> config.locations.dungeons.secretWaypoints.enablePearlWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enablePearlWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableDefaultWaypoints")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableDefaultWaypoints.@Tooltip"))) - .binding(defaults.locations.dungeons.secretWaypoints.enableDefaultWaypoints, - () -> config.locations.dungeons.secretWaypoints.enableDefaultWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.enableDefaultWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Ungrouped Options + .option(Option.<Boolean>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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.croesusHelper")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.playerSecretsTracker")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.starredMobGlow")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.starredMobBoundingBoxes")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.allowDroppingProtectedItems.@Tooltip"))) + .binding(defaults.dungeons.allowDroppingProtectedItems, + () -> config.dungeons.allowDroppingProtectedItems, + newValue -> config.dungeons.allowDroppingProtectedItems = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) - //Dungeon Door Highlight - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.doorHighlight")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.doorHighlight.enableDoorHighlight")) - .binding(defaults.locations.dungeons.doorHighlight.enableDoorHighlight, - () -> config.locations.dungeons.doorHighlight.enableDoorHighlight, - newValue -> config.locations.dungeons.doorHighlight.enableDoorHighlight = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<SkyblockerConfig.DoorHighlight.Type>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.doorHighlight.doorHighlightType")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.doorHighlight.doorHighlightType.@Tooltip"), Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.doorHighlight.doorHighlightType.secretWaypointsNote"))) - .binding(defaults.locations.dungeons.doorHighlight.doorHighlightType, - () -> config.locations.dungeons.doorHighlight.doorHighlightType, - newValue -> config.locations.dungeons.doorHighlight.doorHighlightType = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .build()) + // Map + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.map")) + .collapsed(true) + .option(Option.<Boolean>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.<Float>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(FloatFieldControllerBuilder::create) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.map.mapScreen")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new DungeonMapConfigScreen(screen))) + .build()) + .build()) - //Dungeon Score - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage", 270)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip", 270))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore270Message, - () -> config.locations.dungeons.dungeonScore.enableDungeonScore270Message, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore270Message = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle", 270)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle.@Tooltip", 270))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore270Title, - () -> config.locations.dungeons.dungeonScore.enableDungeonScore270Title, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore270Title = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound", 270)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip", 270))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore270Sound, - () -> config.locations.dungeons.dungeonScore.enableDungeonScore270Sound, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore270Sound = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage", 270)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip", 270, 270))) - .binding(defaults.locations.dungeons.dungeonScore.dungeonScore270Message, - () -> config.locations.dungeons.dungeonScore.dungeonScore270Message, - newValue -> config.locations.dungeons.dungeonScore.dungeonScore270Message = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage", 300)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip", 300))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore300Message, - () -> config.locations.dungeons.dungeonScore.enableDungeonScore300Message, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore300Message = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle", 300)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle.@Tooltip", 300))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore300Title, - () -> config.locations.dungeons.dungeonScore.enableDungeonScore300Title, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore300Title = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound", 300)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip", 300))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore300Sound, - () -> config.locations.dungeons.dungeonScore.enableDungeonScore300Sound, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore300Sound = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage", 300)) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip", 300, 300))) - .binding(defaults.locations.dungeons.dungeonScore.dungeonScore300Message, - () -> config.locations.dungeons.dungeonScore.dungeonScore300Message, - newValue -> config.locations.dungeons.dungeonScore.dungeonScore300Message = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonCryptsMessage")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonCryptsMessage.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonScore.enableDungeonCryptsMessage, - () -> config.locations.dungeons.dungeonScore.enableDungeonCryptsMessage, - newValue -> config.locations.dungeons.dungeonScore.enableDungeonCryptsMessage = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold, - () -> config.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold, - newValue -> config.locations.dungeons.dungeonScore.dungeonCryptsMessageThreshold = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessage")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonCryptsMessage.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonScore.dungeonCryptsMessage, - () -> config.locations.dungeons.dungeonScore.dungeonCryptsMessage, - newValue -> config.locations.dungeons.dungeonScore.dungeonCryptsMessage = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD.@Tooltip"), Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableScoreHUD.deathMessagesNote"))) - .binding(defaults.locations.dungeons.dungeonScore.enableScoreHUD, - () -> config.locations.dungeons.dungeonScore.enableScoreHUD, - newValue -> config.locations.dungeons.dungeonScore.enableScoreHUD = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.scoreScaling")) - .binding(defaults.locations.dungeons.dungeonScore.scoreScaling, - () -> config.locations.dungeons.dungeonScore.scoreScaling, - newValue -> { - config.locations.dungeons.dungeonScore.scoreX = config.locations.dungeons.dungeonScore.scoreX + (int) ((config.locations.dungeons.dungeonScore.scoreScaling - newValue) * 38.0); - config.locations.dungeons.dungeonScore.scoreY = config.locations.dungeons.dungeonScore.scoreY + (int) ((config.locations.dungeons.dungeonScore.scoreScaling - newValue) * MinecraftClient.getInstance().textRenderer.fontHeight / 2.0); - config.locations.dungeons.dungeonScore.scoreScaling = newValue; - }) - .controller(FloatFieldControllerBuilder::create) - .build()) - .build()) + // Puzzle Solver + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveTicTacToe")) + .description(OptionDescription.of(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.<Boolean>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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.creeperSolver")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveWaterboard")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.puzzle.solveWaterboard.@Tooltip"))) + .binding(defaults.dungeons.puzzleSolvers.solveWaterboard, + () -> config.dungeons.puzzleSolvers.solveWaterboard, + newValue -> config.dungeons.puzzleSolvers.solveWaterboard = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.blazeSolver")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.puzzle.solveBoulder")) + .description(OptionDescription.of(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.<Boolean>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.<Boolean>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.<Boolean>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()) + .build()) - //Dungeon Chest Profit - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.enableProfitCalculator")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.enableProfitCalculator.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.enableProfitCalculator, - () -> config.locations.dungeons.dungeonChestProfit.enableProfitCalculator, - newValue -> config.locations.dungeons.dungeonChestProfit.enableProfitCalculator = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.includeKismet")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.includeKismet.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.includeKismet, - () -> config.locations.dungeons.dungeonChestProfit.includeKismet, - newValue -> config.locations.dungeons.dungeonChestProfit.includeKismet = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.includeEssence")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.includeEssence.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.includeEssence, - () -> config.locations.dungeons.dungeonChestProfit.includeEssence, - newValue -> config.locations.dungeons.dungeonChestProfit.includeEssence = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.croesusProfit")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.croesusProfit.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.croesusProfit, - () -> config.locations.dungeons.dungeonChestProfit.croesusProfit, - newValue -> config.locations.dungeons.dungeonChestProfit.croesusProfit = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.neutralThreshold")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.neutralThreshold.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.neutralThreshold, - () -> config.locations.dungeons.dungeonChestProfit.neutralThreshold, - newValue -> config.locations.dungeons.dungeonChestProfit.neutralThreshold = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.<Formatting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.neutralColor")) - .binding(defaults.locations.dungeons.dungeonChestProfit.neutralColor, - () -> config.locations.dungeons.dungeonChestProfit.neutralColor, - newValue -> config.locations.dungeons.dungeonChestProfit.neutralColor = newValue) - .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) - .build()) - .option(Option.<Formatting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.profitColor")) - .binding(defaults.locations.dungeons.dungeonChestProfit.profitColor, - () -> config.locations.dungeons.dungeonChestProfit.profitColor, - newValue -> config.locations.dungeons.dungeonChestProfit.profitColor = newValue) - .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) - .build()) - .option(Option.<Formatting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.lossColor")) - .binding(defaults.locations.dungeons.dungeonChestProfit.lossColor, - () -> config.locations.dungeons.dungeonChestProfit.lossColor, - newValue -> config.locations.dungeons.dungeonChestProfit.lossColor = newValue) - .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) - .build()) - .option(Option.<Formatting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.incompleteColor")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.incompleteColor.@Tooltip"))) - .binding(defaults.locations.dungeons.dungeonChestProfit.incompleteColor, - () -> config.locations.dungeons.dungeonChestProfit.incompleteColor, - newValue -> config.locations.dungeons.dungeonChestProfit.incompleteColor = newValue) - .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) - .build()) - .build()) + // The Professor (F3/M3) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.professor")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.professor.fireFreezeStaffTimer")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.professor.floor3GuardianHealthDisplay")) + .description(OptionDescription.of(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()) - //Others - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip"))) - .binding(defaults.locations.dungeons.croesusHelper, - () -> config.locations.dungeons.croesusHelper, - newValue -> config.locations.dungeons.croesusHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.enableMap")) - .binding(defaults.locations.dungeons.enableMap, - () -> config.locations.dungeons.enableMap, - newValue -> config.locations.dungeons.enableMap = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mapScreen")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new DungeonMapConfigScreen(screen))) - .build()) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mapScaling")) - .binding(defaults.locations.dungeons.mapScaling, - () -> config.locations.dungeons.mapScaling, - newValue -> config.locations.dungeons.mapScaling = newValue) - .controller(FloatFieldControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.playerSecretsTracker")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.playerSecretsTracker.@Tooltip"))) - .binding(defaults.locations.dungeons.playerSecretsTracker, - () -> config.locations.dungeons.playerSecretsTracker, - newValue -> config.locations.dungeons.playerSecretsTracker = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.starredMobGlow")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.starredMobGlow.@Tooltip"))) - .binding(defaults.locations.dungeons.starredMobGlow, - () -> config.locations.dungeons.starredMobGlow, - newValue -> config.locations.dungeons.starredMobGlow = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.starredMobBoundingBoxes")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.starredMobBoundingBoxes.@Tooltip"))) - .binding(defaults.locations.dungeons.starredMobBoundingBoxes, - () -> config.locations.dungeons.starredMobBoundingBoxes, - newValue -> config.locations.dungeons.starredMobBoundingBoxes = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos")) - .binding(defaults.locations.dungeons.solveThreeWeirdos, - () -> config.locations.dungeons.solveThreeWeirdos, - newValue -> config.locations.dungeons.solveThreeWeirdos = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.blazeSolver")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.blazeSolver.@Tooltip"))) - .binding(defaults.locations.dungeons.blazeSolver, - () -> config.locations.dungeons.blazeSolver, - newValue -> config.locations.dungeons.blazeSolver = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creeperSolver")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.creeperSolver.@Tooltip"))) - .binding(defaults.locations.dungeons.creeperSolver, - () -> config.locations.dungeons.creeperSolver, - newValue -> config.locations.dungeons.creeperSolver = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia")) - .binding(defaults.locations.dungeons.solveTrivia, - () -> config.locations.dungeons.solveTrivia, - newValue -> config.locations.dungeons.solveTrivia = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveTicTacToe")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveTicTacToe.@Tooltip"))) - .binding(defaults.locations.dungeons.solveTicTacToe, - () -> config.locations.dungeons.solveTicTacToe, - newValue -> config.locations.dungeons.solveTicTacToe = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveWaterboard")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveWaterboard.@Tooltip"))) - .binding(defaults.locations.dungeons.solveWaterboard, - () -> config.locations.dungeons.solveWaterboard, - newValue -> config.locations.dungeons.solveWaterboard = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveBoulder")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveBoulder.@Tooltip"))) - .binding(defaults.locations.dungeons.solveBoulder, - () -> config.locations.dungeons.solveBoulder, - newValue -> config.locations.dungeons.solveBoulder = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveIceFill")) - .binding(defaults.locations.dungeons.solveIceFill, - () -> config.locations.dungeons.solveIceFill, - newValue -> config.locations.dungeons.solveIceFill = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveSilverfish")) - .binding(defaults.locations.dungeons.solveSilverfish, - () -> config.locations.dungeons.solveSilverfish, - newValue -> config.locations.dungeons.solveSilverfish = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.fireFreezeStaffTimer")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.fireFreezeStaffTimer.@Tooltip"))) - .binding(defaults.locations.dungeons.fireFreezeStaffTimer, - () -> config.locations.dungeons.fireFreezeStaffTimer, - newValue -> config.locations.dungeons.fireFreezeStaffTimer = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.floor3GuardianHealthDisplay")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.floor3GuardianHealthDisplay.@Tooltip"))) - .binding(defaults.locations.dungeons.floor3GuardianHealthDisplay, - () -> config.locations.dungeons.floor3GuardianHealthDisplay, - newValue -> config.locations.dungeons.floor3GuardianHealthDisplay = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.allowDroppingProtectedItems")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.allowDroppingProtectedItems.@Tooltip"))) - .binding(defaults.locations.dungeons.allowDroppingProtectedItems, - () -> config.locations.dungeons.allowDroppingProtectedItems, - newValue -> config.locations.dungeons.allowDroppingProtectedItems = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) + // Livid (F5/M5) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorTitle")) + .description(OptionDescription.of(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.<String>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.livid.lividColorText")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.lividColorText.@Tooltip"))) + .binding(defaults.dungeons.livid.lividColorText, + () -> config.dungeons.livid.lividColorText, + newValue -> config.dungeons.livid.lividColorText = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Mimic Message - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mimicMessage")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mimicMessage.sendMimicMessage")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mimicMessage.sendMimicMessage.@Tooltip"))) - .binding(defaults.locations.dungeons.mimicMessage.sendMimicMessage, - () -> config.locations.dungeons.mimicMessage.sendMimicMessage, - newValue -> config.locations.dungeons.mimicMessage.sendMimicMessage = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mimicMessage.mimicMessage")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mimicMessage.mimicMessage.@Tooltip"))) - .binding(defaults.locations.dungeons.mimicMessage.mimicMessage, - () -> config.locations.dungeons.mimicMessage.mimicMessage, - newValue -> config.locations.dungeons.mimicMessage.mimicMessage = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + // Terminal (F7/M7) + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.terminals")) + .collapsed(true) + .option(Option.<Boolean>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.<Boolean>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.<Boolean>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()) + .build()) - //Livid Color - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorGlow")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorGlow.@Tooltip"))) - .binding(defaults.locations.dungeons.lividColor.enableLividColorGlow, - () -> config.locations.dungeons.lividColor.enableLividColorGlow, - newValue -> config.locations.dungeons.lividColor.enableLividColorGlow = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorText")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorText.@Tooltip"))) - .binding(defaults.locations.dungeons.lividColor.enableLividColorText, - () -> config.locations.dungeons.lividColor.enableLividColorText, - newValue -> config.locations.dungeons.lividColor.enableLividColorText = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle.@Tooltip"))) - .binding(defaults.locations.dungeons.lividColor.enableLividColorTitle, - () -> config.locations.dungeons.lividColor.enableLividColorTitle, - newValue -> config.locations.dungeons.lividColor.enableLividColorTitle = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip"))) - .binding(defaults.locations.dungeons.lividColor.lividColorText, - () -> config.locations.dungeons.lividColor.lividColorText, - newValue -> config.locations.dungeons.lividColor.lividColorText = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + // Dungeon Secret Waypoints + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableRoomMatching")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableRoomMatching.@Tooltip"))) + .binding(defaults.dungeons.secretWaypoints.enableRoomMatching, + () -> config.dungeons.secretWaypoints.enableRoomMatching, + newValue -> config.dungeons.secretWaypoints.enableRoomMatching = newValue) + .controller(ConfigUtils::createBooleanController) + .flag(OptionFlag.GAME_RESTART) + .build()) + .option(Option.<Boolean>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.<Type>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType.@Tooltip"), + Text.translatable("skyblocker.config.dungeons.secretWaypoints.waypointType.generalNote"))) + .binding(defaults.dungeons.secretWaypoints.waypointType, + () -> config.dungeons.secretWaypoints.waypointType, + newValue -> config.dungeons.secretWaypoints.waypointType = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enablePearlWaypoints")) + .description(OptionDescription.of(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.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.secretWaypoints.enableDefaultWaypoints")) + .description(OptionDescription.of(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()) - //Terminal Solvers - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.terminals")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor")) - .binding(defaults.locations.dungeons.terminals.solveColor, - () -> config.locations.dungeons.terminals.solveColor, - newValue -> config.locations.dungeons.terminals.solveColor = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder")) - .binding(defaults.locations.dungeons.terminals.solveOrder, - () -> config.locations.dungeons.terminals.solveOrder, - newValue -> config.locations.dungeons.terminals.solveOrder = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith")) - .binding(defaults.locations.dungeons.terminals.solveStartsWith, - () -> config.locations.dungeons.terminals.solveStartsWith, - newValue -> config.locations.dungeons.terminals.solveStartsWith = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - .build(); - } + // Mimic Message + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.mimicMessage")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.mimicMessage.sendMimicMessage")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.mimicMessage.sendMimicMessage.@Tooltip"))) + .binding(defaults.dungeons.mimicMessage.sendMimicMessage, + () -> config.dungeons.mimicMessage.sendMimicMessage, + newValue -> config.dungeons.mimicMessage.sendMimicMessage = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.mimicMessage.mimicMessage")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.mimicMessage.mimicMessage.@Tooltip"))) + .binding(defaults.dungeons.mimicMessage.mimicMessage, + () -> config.dungeons.mimicMessage.mimicMessage, + newValue -> config.dungeons.mimicMessage.mimicMessage = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) + + // Door Highlight + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.doorHighlight")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.doorHighlight.enableDoorHighlight")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.doorHighlight.enableDoorHighlight.@Tooltip"))) + .binding(defaults.dungeons.doorHighlight.enableDoorHighlight, + () -> config.dungeons.doorHighlight.enableDoorHighlight, + newValue -> config.dungeons.doorHighlight.enableDoorHighlight = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<DungeonsConfig.DoorHighlight.Type>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.doorHighlight.doorHighlightType")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.doorHighlight.doorHighlightType.@Tooltip"), + Text.translatable("skyblocker.config.dungeons.doorHighlight.doorHighlightType.secretWaypointsNote"))) + .binding(defaults.dungeons.doorHighlight.doorHighlightType, + () -> config.dungeons.doorHighlight.doorHighlightType, + newValue -> config.dungeons.doorHighlight.doorHighlightType = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .build()) + + // Dungeon Score + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreMessage", 270)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip", 270))) + .binding(defaults.dungeons.dungeonScore.enableDungeonScore270Message, + () -> config.dungeons.dungeonScore.enableDungeonScore270Message, + newValue -> config.dungeons.dungeonScore.enableDungeonScore270Message = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreTitle", 270)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreTitle.@Tooltip", 270))) + .binding(defaults.dungeons.dungeonScore.enableDungeonScore270Title, + () -> config.dungeons.dungeonScore.enableDungeonScore270Title, + newValue -> config.dungeons.dungeonScore.enableDungeonScore270Title = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreSound", 270)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip", 270))) + .binding(defaults.dungeons.dungeonScore.enableDungeonScore270Sound, + () -> config.dungeons.dungeonScore.enableDungeonScore270Sound, + newValue -> config.dungeons.dungeonScore.enableDungeonScore270Sound = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonScoreMessage", 270)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip", 270, 270))) + .binding(defaults.dungeons.dungeonScore.dungeonScore270Message, + () -> config.dungeons.dungeonScore.dungeonScore270Message, + newValue -> config.dungeons.dungeonScore.dungeonScore270Message = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreMessage", 300)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip", 300))) + .binding(defaults.dungeons.dungeonScore.enableDungeonScore300Message, + () -> config.dungeons.dungeonScore.enableDungeonScore300Message, + newValue -> config.dungeons.dungeonScore.enableDungeonScore300Message = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreTitle", 300)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreTitle.@Tooltip", 300))) + .binding(defaults.dungeons.dungeonScore.enableDungeonScore300Title, + () -> config.dungeons.dungeonScore.enableDungeonScore300Title, + newValue -> config.dungeons.dungeonScore.enableDungeonScore300Title = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreSound", 300)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip", 300))) + .binding(defaults.dungeons.dungeonScore.enableDungeonScore300Sound, + () -> config.dungeons.dungeonScore.enableDungeonScore300Sound, + newValue -> config.dungeons.dungeonScore.enableDungeonScore300Sound = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonScoreMessage", 300)) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip", 300, 300))) + .binding(defaults.dungeons.dungeonScore.dungeonScore300Message, + () -> config.dungeons.dungeonScore.dungeonScore300Message, + newValue -> config.dungeons.dungeonScore.dungeonScore300Message = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonCryptsMessage")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableDungeonCryptsMessage.@Tooltip"))) + .binding(defaults.dungeons.dungeonScore.enableDungeonCryptsMessage, + () -> config.dungeons.dungeonScore.enableDungeonCryptsMessage, + newValue -> config.dungeons.dungeonScore.enableDungeonCryptsMessage = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonCryptsMessageThreshold")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonCryptsMessageThreshold.@Tooltip"))) + .binding(defaults.dungeons.dungeonScore.dungeonCryptsMessageThreshold, + () -> config.dungeons.dungeonScore.dungeonCryptsMessageThreshold, + newValue -> config.dungeons.dungeonScore.dungeonCryptsMessageThreshold = newValue) + .controller(IntegerFieldControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonCryptsMessage")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.dungeonCryptsMessage.@Tooltip"))) + .binding(defaults.dungeons.dungeonScore.dungeonCryptsMessage, + () -> config.dungeons.dungeonScore.dungeonCryptsMessage, + newValue -> config.dungeons.dungeonScore.dungeonCryptsMessage = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableScoreHUD")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonScore.enableScoreHUD.@Tooltip"), + Text.translatable("skyblocker.config.dungeons.dungeonScore.enableScoreHUD.deathMessagesNote"))) + .binding(defaults.dungeons.dungeonScore.enableScoreHUD, + () -> config.dungeons.dungeonScore.enableScoreHUD, + newValue -> config.dungeons.dungeonScore.enableScoreHUD = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Float>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonScore.scoreScaling")) + .binding(defaults.dungeons.dungeonScore.scoreScaling, + () -> config.dungeons.dungeonScore.scoreScaling, + newValue -> { + config.dungeons.dungeonScore.scoreX = config.dungeons.dungeonScore.scoreX + (int) ((config.dungeons.dungeonScore.scoreScaling - newValue) * 38.0); + config.dungeons.dungeonScore.scoreY = config.dungeons.dungeonScore.scoreY + (int) ((config.dungeons.dungeonScore.scoreScaling - newValue) * MinecraftClient.getInstance().textRenderer.fontHeight / 2.0); + config.dungeons.dungeonScore.scoreScaling = newValue; + }) + .controller(FloatFieldControllerBuilder::create) + .build()) + .build()) + + // Dungeon Chest Profit Calculator + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.enableProfitCalculator")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.enableProfitCalculator.@Tooltip"))) + .binding(defaults.dungeons.dungeonChestProfit.enableProfitCalculator, + () -> config.dungeons.dungeonChestProfit.enableProfitCalculator, + newValue -> config.dungeons.dungeonChestProfit.enableProfitCalculator = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.croesusProfit")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.croesusProfit.@Tooltip"))) + .binding(defaults.dungeons.dungeonChestProfit.croesusProfit, + () -> config.dungeons.dungeonChestProfit.croesusProfit, + newValue -> config.dungeons.dungeonChestProfit.croesusProfit = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.includeKismet")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.includeKismet.@Tooltip"))) + .binding(defaults.dungeons.dungeonChestProfit.includeKismet, + () -> config.dungeons.dungeonChestProfit.includeKismet, + newValue -> config.dungeons.dungeonChestProfit.includeKismet = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.includeEssence")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.includeEssence.@Tooltip"))) + .binding(defaults.dungeons.dungeonChestProfit.includeEssence, + () -> config.dungeons.dungeonChestProfit.includeEssence, + newValue -> config.dungeons.dungeonChestProfit.includeEssence = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + //FIXME maybe use color controller + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.neutralThreshold")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.neutralThreshold.@Tooltip"))) + .binding(defaults.dungeons.dungeonChestProfit.neutralThreshold, + () -> config.dungeons.dungeonChestProfit.neutralThreshold, + newValue -> config.dungeons.dungeonChestProfit.neutralThreshold = newValue) + .controller(IntegerFieldControllerBuilder::create) + .build()) + .option(Option.<Formatting>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.neutralColor")) + .binding(defaults.dungeons.dungeonChestProfit.neutralColor, + () -> config.dungeons.dungeonChestProfit.neutralColor, + newValue -> config.dungeons.dungeonChestProfit.neutralColor = newValue) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) + .build()) + .option(Option.<Formatting>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.profitColor")) + .binding(defaults.dungeons.dungeonChestProfit.profitColor, + () -> config.dungeons.dungeonChestProfit.profitColor, + newValue -> config.dungeons.dungeonChestProfit.profitColor = newValue) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) + .build()) + .option(Option.<Formatting>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.lossColor")) + .binding(defaults.dungeons.dungeonChestProfit.lossColor, + () -> config.dungeons.dungeonChestProfit.lossColor, + newValue -> config.dungeons.dungeonChestProfit.lossColor = newValue) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) + .build()) + .option(Option.<Formatting>createBuilder() + .name(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.incompleteColor")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.dungeonChestProfit.incompleteColor.@Tooltip"))) + .binding(defaults.dungeons.dungeonChestProfit.incompleteColor, + () -> config.dungeons.dungeonChestProfit.incompleteColor, + newValue -> config.dungeons.dungeonChestProfit.incompleteColor = newValue) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) + .build()) + .build()) + + .build(); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java deleted file mode 100644 index 43ea8a22..00000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java +++ /dev/null @@ -1,151 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -import de.hysky.skyblocker.config.ConfigUtils; -import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.skyblock.dwarven.CrystalsHudConfigScreen; -import dev.isxander.yacl3.api.ButtonOption; -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 de.hysky.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; -import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; -import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; - -public class DwarvenMinesCategory { - - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines")) - - //Uncategorized Options - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel")) - .binding(defaults.locations.dwarvenMines.enableDrillFuel, - () -> config.locations.dwarvenMines.enableDrillFuel, - newValue -> config.locations.dwarvenMines.enableDrillFuel = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur")) - .binding(defaults.locations.dwarvenMines.solveFetchur, - () -> config.locations.dwarvenMines.solveFetchur, - newValue -> config.locations.dwarvenMines.solveFetchur = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler")) - .binding(defaults.locations.dwarvenMines.solvePuzzler, - () -> config.locations.dwarvenMines.solvePuzzler, - newValue -> config.locations.dwarvenMines.solvePuzzler = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.metalDetectorHelper")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.metalDetectorHelper.@Tooltip"))) .binding(defaults.locations.dwarvenMines.metalDetectorHelper, - () -> config.locations.dwarvenMines.metalDetectorHelper, - newValue -> config.locations.dwarvenMines.metalDetectorHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - - //Dwarven HUD - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabledCommissions")) - .binding(defaults.locations.dwarvenMines.dwarvenHud.enabledCommissions, - () -> config.locations.dwarvenMines.dwarvenHud.enabledCommissions, - newValue -> config.locations.dwarvenMines.dwarvenHud.enabledCommissions = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabledPowder")) - .binding(defaults.locations.dwarvenMines.dwarvenHud.enabledPowder, - () -> config.locations.dwarvenMines.dwarvenHud.enabledPowder, - newValue -> config.locations.dwarvenMines.dwarvenHud.enabledPowder = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<SkyblockerConfig.DwarvenHudStyle>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[0]"), - Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[1]"), - Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[2]"))) - .binding(defaults.locations.dwarvenMines.dwarvenHud.style, - () -> config.locations.dwarvenMines.dwarvenHud.style, - newValue -> config.locations.dwarvenMines.dwarvenHud.style = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.screen")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new DwarvenHudConfigScreen(screen))) - .build()) - .build()) - //crystal HUD - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.enabled")) - .binding(defaults.locations.dwarvenMines.crystalsHud.enabled, - () -> config.locations.dwarvenMines.crystalsHud.enabled, - newValue -> config.locations.dwarvenMines.crystalsHud.enabled = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.screen")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new CrystalsHudConfigScreen(screen))) - .build()) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.mapScaling")) - .binding(defaults.locations.dwarvenMines.crystalsHud.mapScaling, - () -> config.locations.dwarvenMines.crystalsHud.mapScaling, - newValue -> config.locations.dwarvenMines.crystalsHud.mapScaling = newValue) - .controller(FloatFieldControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.showLocations")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.showLocations.@Tooltip"))) - .binding(defaults.locations.dwarvenMines.crystalsHud.showLocations, - () -> config.locations.dwarvenMines.crystalsHud.showLocations, - newValue -> config.locations.dwarvenMines.crystalsHud.showLocations = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.showLocations.locationSize")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsHud.showLocations.locationSize.@Tooltip"))) - .binding(defaults.locations.dwarvenMines.crystalsHud.locationSize, - () -> config.locations.dwarvenMines.crystalsHud.locationSize, - newValue -> config.locations.dwarvenMines.crystalsHud.locationSize = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(4, 12).step(2)) - .build()) - .build()) - //crystals waypoints - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsWaypoints")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsWaypoints.enabled")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsWaypoints.enabled.@Tooltip"))) - .binding(defaults.locations.dwarvenMines.crystalsWaypoints.enabled, - () -> config.locations.dwarvenMines.crystalsWaypoints.enabled, - newValue -> config.locations.dwarvenMines.crystalsWaypoints.enabled = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsWaypoints.findInChat")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsWaypoints.findInChat.@Tooltip"))) - .binding(defaults.locations.dwarvenMines.crystalsWaypoints.findInChat, - () -> config.locations.dwarvenMines.crystalsWaypoints.findInChat, - newValue -> config.locations.dwarvenMines.crystalsWaypoints.findInChat = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - - .build()) - .build(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java new file mode 100644 index 00000000..90b36c72 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java @@ -0,0 +1,66 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.skyblock.garden.FarmingHudConfigScreen; +import dev.isxander.yacl3.api.ButtonOption; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionGroup; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; + +public class FarmingCategory { + + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.farming")) + + //Garden + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden.enableHud")) + .binding(defaults.farming.garden.farmingHud.enableHud, + () -> config.farming.garden.farmingHud.enableHud, + newValue -> config.farming.garden.farmingHud.enableHud = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden.farmingHud")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new FarmingHudConfigScreen(screen))) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden.dicerTitlePrevent")) + .binding(defaults.farming.garden.dicerTitlePrevent, + () -> config.farming.garden.dicerTitlePrevent, + newValue -> config.farming.garden.dicerTitlePrevent = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden.visitorHelper")) + .binding(defaults.farming.garden.visitorHelper, + () -> config.farming.garden.visitorHelper, + newValue -> config.farming.garden.visitorHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden.lockMouseTool")) + .binding(defaults.farming.garden.lockMouseTool, + () -> config.farming.garden.lockMouseTool, + newValue -> config.farming.garden.lockMouseTool = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.farming.garden.lockMouseGround")) + .binding(defaults.farming.garden.lockMouseGroundOnly, + () -> config.farming.garden.lockMouseGroundOnly, + newValue -> config.farming.garden.lockMouseGroundOnly = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index 77627242..1477d669 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -2,773 +2,317 @@ package de.hysky.skyblocker.config.categories; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.skyblock.fancybars.StatusBarsConfigScreen; +import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.shortcut.ShortcutsConfigScreen; -import de.hysky.skyblocker.utils.render.title.TitleContainerConfigScreen; -import de.hysky.skyblocker.utils.waypoint.Waypoint; import dev.isxander.yacl3.api.*; -import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder; -import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class GeneralCategory { - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.general")) + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.general")) - //Ungrouped Options - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.enableTips")) - .binding(defaults.general.enableTips, - () -> config.general.enableTips, - newValue -> config.general.enableTips = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.acceptReparty")) - .binding(defaults.general.acceptReparty, - () -> config.general.acceptReparty, - newValue -> config.general.acceptReparty = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.betterPartyFinder")) - .binding(defaults.general.betterPartyFinder, - () -> config.general.betterPartyFinder, - newValue -> config.general.betterPartyFinder = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fancyCraftingTable")) - .binding(defaults.general.fancyCraftingTable, - () -> config.general.fancyCraftingTable, - newValue -> config.general.fancyCraftingTable = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift")) - .binding(defaults.general.backpackPreviewWithoutShift, - () -> config.general.backpackPreviewWithoutShift, - newValue -> config.general.backpackPreviewWithoutShift = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.compactorDeletorPreview")) - .binding(defaults.general.compactorDeletorPreview, - () -> config.general.compactorDeletorPreview, - newValue -> config.general.compactorDeletorPreview = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.hideEmptyTooltips")) - .binding(defaults.general.hideEmptyTooltips, - () -> config.general.hideEmptyTooltips, - newValue -> config.general.hideEmptyTooltips = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.hideStatusEffectOverlay")) - .binding(defaults.general.hideStatusEffectOverlay, - () -> config.general.hideStatusEffectOverlay, - newValue -> config.general.hideStatusEffectOverlay = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.dontStripSkinAlphaValues")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.dontStripSkinAlphaValues.@Tooltip"))) - .binding(defaults.general.dontStripSkinAlphaValues, - () -> config.general.dontStripSkinAlphaValues, - newValue -> config.general.dontStripSkinAlphaValues = newValue) - .controller(ConfigUtils::createBooleanController) - .flag(OptionFlag.ASSET_RELOAD) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.dungeonQuality")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.dungeonQuality.@Tooltip"))) - .binding(defaults.general.dungeonQuality, - () -> config.general.dungeonQuality, - newValue -> config.general.dungeonQuality = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.enableNewYearCakesHelper")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.enableNewYearCakesHelper.@Tooltip"))) - .binding(defaults.general.enableNewYearCakesHelper, - () -> config.general.enableNewYearCakesHelper, - newValue -> config.general.enableNewYearCakesHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) + //Ungrouped Options + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.enableTips")) + .binding(defaults.general.enableTips, + () -> config.general.enableTips, + newValue -> config.general.enableTips = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.acceptReparty")) + .binding(defaults.general.acceptReparty, + () -> config.general.acceptReparty, + newValue -> config.general.acceptReparty = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) - //Tab Hud - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.tabHudEnabled")) - .binding(defaults.general.tabHud.tabHudEnabled, - () -> config.general.tabHud.tabHudEnabled, - newValue -> config.general.tabHud.tabHudEnabled = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.tabHudScale")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.tabHudScale.@Tooltip"))) - .binding(defaults.general.tabHud.tabHudScale, - () -> config.general.tabHud.tabHudScale, - newValue -> config.general.tabHud.tabHudScale = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(10, 200).step(1)) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.enableHudBackground")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.enableHudBackground.@Tooltip"))) - .binding(defaults.general.tabHud.enableHudBackground, - () -> config.general.tabHud.enableHudBackground, - newValue -> config.general.tabHud.enableHudBackground = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.plainPlayerNames")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.plainPlayerNames.@Tooltip"))) - .binding(defaults.general.tabHud.plainPlayerNames, - () -> config.general.tabHud.plainPlayerNames, - newValue -> config.general.tabHud.plainPlayerNames = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<SkyblockerConfig.NameSorting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.nameSorting")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.tabHud.nameSorting.@Tooltip"))) - .binding(defaults.general.tabHud.nameSorting, - () -> config.general.tabHud.nameSorting, - newValue -> config.general.tabHud.nameSorting = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .build()) + //Shortcuts + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.shortcuts")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.shortcuts.enableShortcuts")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.shortcuts.enableShortcuts.@Tooltip"))) + .binding(defaults.general.shortcuts.enableShortcuts, + () -> config.general.shortcuts.enableShortcuts, + newValue -> config.general.shortcuts.enableShortcuts = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.shortcuts.enableCommandShortcuts")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.shortcuts.enableCommandShortcuts.@Tooltip"))) + .binding(defaults.general.shortcuts.enableCommandShortcuts, + () -> config.general.shortcuts.enableCommandShortcuts, + newValue -> config.general.shortcuts.enableCommandShortcuts = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.shortcuts.enableCommandArgShortcuts")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.shortcuts.enableCommandArgShortcuts.@Tooltip"))) + .binding(defaults.general.shortcuts.enableCommandArgShortcuts, + () -> config.general.shortcuts.enableCommandArgShortcuts, + newValue -> config.general.shortcuts.enableCommandArgShortcuts = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.general.shortcuts.config")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new ShortcutsConfigScreen(screen))) + .build()) + .build()) - //Fancy Bars - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.bars")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.bars.enableBars")) - .binding(defaults.general.bars.enableBars, - () -> config.general.bars.enableBars, - newValue -> config.general.bars.enableBars = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("skyblocker.bars.config.openScreen")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new StatusBarsConfigScreen())) - .build()) - .build()) + //Quiver Warning + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.quiverWarning")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.quiverWarning.enableQuiverWarning")) + .binding(defaults.general.quiverWarning.enableQuiverWarning, + () -> config.general.quiverWarning.enableQuiverWarning, + newValue -> config.general.quiverWarning.enableQuiverWarning = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.quiverWarning.enableQuiverWarningInDungeons")) + .binding(defaults.general.quiverWarning.enableQuiverWarningInDungeons, + () -> config.general.quiverWarning.enableQuiverWarningInDungeons, + newValue -> config.general.quiverWarning.enableQuiverWarningInDungeons = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.quiverWarning.enableQuiverWarningAfterDungeon")) + .binding(defaults.general.quiverWarning.enableQuiverWarningAfterDungeon, + () -> config.general.quiverWarning.enableQuiverWarningAfterDungeon, + newValue -> config.general.quiverWarning.enableQuiverWarningAfterDungeon = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Experiments Solver - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.experiments")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.experiments.enableChronomatronSolver")) - .binding(defaults.general.experiments.enableChronomatronSolver, - () -> config.general.experiments.enableChronomatronSolver, - newValue -> config.general.experiments.enableChronomatronSolver = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.experiments.enableSuperpairsSolver")) - .binding(defaults.general.experiments.enableSuperpairsSolver, - () -> config.general.experiments.enableSuperpairsSolver, - newValue -> config.general.experiments.enableSuperpairsSolver = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.experiments.enableUltrasequencerSolver")) - .binding(defaults.general.experiments.enableUltrasequencerSolver, - () -> config.general.experiments.enableUltrasequencerSolver, - newValue -> config.general.experiments.enableUltrasequencerSolver = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Item List + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemList")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemList.enableItemList")) + .binding(defaults.general.itemList.enableItemList, + () -> config.general.itemList.enableItemList, + newValue -> config.general.itemList.enableItemList = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Fishing Helper - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fishing")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper")) - .binding(defaults.general.fishing.enableFishingHelper, - () -> config.general.fishing.enableFishingHelper, - newValue -> config.general.fishing.enableFishingHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.enableFishingTimer")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.enableFishingTimer.@Tooltip"))) - .binding(defaults.general.fishing.enableFishingTimer, - () -> config.general.fishing.enableFishingTimer, - newValue -> config.general.fishing.enableFishingTimer = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.changeTimerColor")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.changeTimerColor.@Tooltip"))) - .binding(defaults.general.fishing.changeTimerColor, - () -> config.general.fishing.changeTimerColor, - newValue -> config.general.fishing.changeTimerColor = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.fishingTimerScale")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.fishingTimerScale.@Tooltip"))) - .binding(defaults.general.fishing.fishingTimerScale, - () -> config.general.fishing.fishingTimerScale, - newValue -> config.general.fishing.fishingTimerScale = newValue) - .controller(FloatFieldControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.hideOtherPlayers")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.fishing.hideOtherPlayers.@Tooltip"))) - .binding(defaults.general.fishing.hideOtherPlayersRods, - () -> config.general.fishing.hideOtherPlayersRods, - newValue -> config.general.fishing.hideOtherPlayersRods = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Item Tooltip + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableNPCPrice")) + .binding(defaults.general.itemTooltip.enableNPCPrice, + () -> config.general.itemTooltip.enableNPCPrice, + newValue -> config.general.itemTooltip.enableNPCPrice = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableMotesPrice")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemTooltip.enableMotesPrice.@Tooltip"))) + .binding(defaults.general.itemTooltip.enableMotesPrice, + () -> config.general.itemTooltip.enableMotesPrice, + newValue -> config.general.itemTooltip.enableMotesPrice = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableAvgBIN")) + .binding(defaults.general.itemTooltip.enableAvgBIN, + () -> config.general.itemTooltip.enableAvgBIN, + newValue -> config.general.itemTooltip.enableAvgBIN = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<GeneralConfig.Average>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.avg")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemTooltip.avg.@Tooltip"))) + .binding(defaults.general.itemTooltip.avg, + () -> config.general.itemTooltip.avg, + newValue -> config.general.itemTooltip.avg = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableLowestBIN")) + .binding(defaults.general.itemTooltip.enableLowestBIN, + () -> config.general.itemTooltip.enableLowestBIN, + newValue -> config.general.itemTooltip.enableLowestBIN = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableBazaarPrice")) + .binding(defaults.general.itemTooltip.enableBazaarPrice, + () -> config.general.itemTooltip.enableBazaarPrice, + newValue -> config.general.itemTooltip.enableBazaarPrice = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableObtainedDate")) + .binding(defaults.general.itemTooltip.enableObtainedDate, + () -> config.general.itemTooltip.enableObtainedDate, + newValue -> config.general.itemTooltip.enableObtainedDate = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableMuseumInfo")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemTooltip.enableMuseumInfo.@Tooltip"))) + .binding(defaults.general.itemTooltip.enableMuseumInfo, + () -> config.general.itemTooltip.enableMuseumInfo, + newValue -> config.general.itemTooltip.enableMuseumInfo = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableExoticTooltip")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemTooltip.enableExoticTooltip.@Tooltip"))) + .binding(defaults.general.itemTooltip.enableExoticTooltip, + () -> config.general.itemTooltip.enableExoticTooltip, + newValue -> config.general.itemTooltip.enableExoticTooltip = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper.@Tooltip[0]"), + Text.literal("\n\n✔ Collected").formatted(Formatting.GREEN), + Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper.@Tooltip[1]"), + Text.literal("\n✦ Upgrade").withColor(0x218bff), + Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper.@Tooltip[2]"), + Text.literal("\n↑ Upgradable").withColor(0xf8d048), + Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper.@Tooltip[3]"), + Text.literal("\n↓ Downgrade").formatted(Formatting.GRAY), + Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper.@Tooltip[4]"), + Text.literal("\n✖ Missing").formatted(Formatting.RED), + Text.translatable("skyblocker.config.general.itemTooltip.enableAccessoriesHelper.@Tooltip[5]"))) + .binding(defaults.general.itemTooltip.enableAccessoriesHelper, + () -> config.general.itemTooltip.enableAccessoriesHelper, + newValue -> config.general.itemTooltip.enableAccessoriesHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemTooltip.dungeonQuality")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemTooltip.dungeonQuality.@Tooltip"))) + .binding(defaults.general.itemTooltip.dungeonQuality, + () -> config.general.itemTooltip.dungeonQuality, + newValue -> config.general.itemTooltip.dungeonQuality = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Fairy Souls Helper - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fairySouls")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fairySouls.enableFairySoulsHelper")) - .binding(defaults.general.fairySouls.enableFairySoulsHelper, - () -> config.general.fairySouls.enableFairySoulsHelper, - newValue -> config.general.fairySouls.enableFairySoulsHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fairySouls.highlightFoundSouls")) - .binding(defaults.general.fairySouls.highlightFoundSouls, - () -> config.general.fairySouls.highlightFoundSouls, - newValue -> config.general.fairySouls.highlightFoundSouls = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fairySouls.highlightOnlyNearbySouls")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.fairySouls.highlightOnlyNearbySouls.@Tooltip"))) - .binding(defaults.general.fairySouls.highlightOnlyNearbySouls, - () -> config.general.fairySouls.highlightOnlyNearbySouls, - newValue -> config.general.fairySouls.highlightOnlyNearbySouls = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Item Info Display + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.attributeShardInfo.@Tooltip"))) + .binding(defaults.general.itemInfoDisplay.attributeShardInfo, + () -> config.general.itemInfoDisplay.attributeShardInfo, + newValue -> config.general.itemInfoDisplay.attributeShardInfo = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.itemRarityBackgrounds")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.itemRarityBackgrounds.@Tooltip"))) + .binding(defaults.general.itemInfoDisplay.itemRarityBackgrounds, + () -> config.general.itemInfoDisplay.itemRarityBackgrounds, + newValue -> config.general.itemInfoDisplay.itemRarityBackgrounds = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<GeneralConfig.RarityBackgroundStyle>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundStyle")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundStyle.@Tooltip"))) + .binding(defaults.general.itemInfoDisplay.itemRarityBackgroundStyle, + () -> config.general.itemInfoDisplay.itemRarityBackgroundStyle, + newValue -> config.general.itemInfoDisplay.itemRarityBackgroundStyle = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<Float>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemInfoDisplay.itemRarityBackgroundsOpacity")) + .binding(defaults.general.itemInfoDisplay.itemRarityBackgroundsOpacity, + () -> config.general.itemInfoDisplay.itemRarityBackgroundsOpacity, + newValue -> config.general.itemInfoDisplay.itemRarityBackgroundsOpacity = newValue) + .controller(opt -> FloatSliderControllerBuilder.create(opt).range(0f, 1f).step(0.05f).formatValue(ConfigUtils.FLOAT_TWO_FORMATTER)) + .build()) + .build()) - //Mythological Ritual - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.mythologicalRitual")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.mythologicalRitual.enableMythologicalRitualHelper")) - .binding(defaults.general.mythologicalRitual.enableMythologicalRitualHelper, - () -> config.general.mythologicalRitual.enableMythologicalRitualHelper, - newValue -> config.general.mythologicalRitual.enableMythologicalRitualHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Item Protection + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.itemProtection")) + .collapsed(true) + .option(Option.<GeneralConfig.SlotLockStyle>createBuilder() + .name(Text.translatable("skyblocker.config.general.itemProtection.slotLockStyle")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.itemProtection.slotLockStyle.@Tooltip"))) + .binding(defaults.general.itemProtection.slotLockStyle, + () -> config.general.itemProtection.slotLockStyle, + newValue -> config.general.itemProtection.slotLockStyle = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .build()) - //Item Cooldown - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemCooldown")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemCooldown.enableItemCooldowns")) - .binding(defaults.general.itemCooldown.enableItemCooldowns, - () -> config.general.itemCooldown.enableItemCooldowns, - newValue -> config.general.itemCooldown.enableItemCooldowns = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Wiki Lookup + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.wikiLookup")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.wikiLookup.enableWikiLookup")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.wikiLookup.enableWikiLookup.@Tooltip"))) + .binding(defaults.general.wikiLookup.enableWikiLookup, + () -> config.general.wikiLookup.enableWikiLookup, + newValue -> config.general.wikiLookup.enableWikiLookup = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.wikiLookup.officialWiki")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.wikiLookup.officialWiki.@Tooltip"))) + .binding(defaults.general.wikiLookup.officialWiki, + () -> config.general.wikiLookup.officialWiki, + newValue -> config.general.wikiLookup.officialWiki = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Shortcuts - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts.@Tooltip"))) - .binding(defaults.general.shortcuts.enableShortcuts, - () -> config.general.shortcuts.enableShortcuts, - newValue -> config.general.shortcuts.enableShortcuts = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts.@Tooltip"))) - .binding(defaults.general.shortcuts.enableCommandShortcuts, - () -> config.general.shortcuts.enableCommandShortcuts, - newValue -> config.general.shortcuts.enableCommandShortcuts = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts.@Tooltip"))) - .binding(defaults.general.shortcuts.enableCommandArgShortcuts, - () -> config.general.shortcuts.enableCommandArgShortcuts, - newValue -> config.general.shortcuts.enableCommandArgShortcuts = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.shortcuts.config")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new ShortcutsConfigScreen(screen))) - .build()) - .build()) + //Special Effects + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.specialEffects")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.specialEffects.rareDungeonDropEffects")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.general.specialEffects.rareDungeonDropEffects.@Tooltip"))) + .binding(defaults.general.specialEffects.rareDungeonDropEffects, + () -> config.general.specialEffects.rareDungeonDropEffects, + newValue -> config.general.specialEffects.rareDungeonDropEffects = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Waypoints - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.enableWaypoints")) - .binding(defaults.general.waypoints.enableWaypoints, - () -> config.general.waypoints.enableWaypoints, - newValue -> config.general.waypoints.enableWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Waypoint.Type>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip"), Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.generalNote"))) - .binding(defaults.general.waypoints.waypointType, - () -> config.general.waypoints.waypointType, - newValue -> config.general.waypoints.waypointType = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .build()) + //Hitboxes + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.general.hitbox")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.hitbox.oldFarmlandHitbox")) + .binding(defaults.general.hitbox.oldFarmlandHitbox, + () -> config.general.hitbox.oldFarmlandHitbox, + newValue -> config.general.hitbox.oldFarmlandHitbox = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.general.hitbox.oldLeverHitbox")) + .binding(defaults.general.hitbox.oldLeverHitbox, + () -> config.general.hitbox.oldLeverHitbox, + newValue -> config.general.hitbox.oldLeverHitbox = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Quiver Warning - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.quiverWarning")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarning")) - .binding(defaults.general.quiverWarning.enableQuiverWarning, - () -> config.general.quiverWarning.enableQuiverWarning, - newValue -> config.general.quiverWarning.enableQuiverWarning = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarningInDungeons")) - .binding(defaults.general.quiverWarning.enableQuiverWarningInDungeons, - () -> config.general.quiverWarning.enableQuiverWarningInDungeons, - newValue -> config.general.quiverWarning.enableQuiverWarningInDungeons = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarningAfterDungeon")) - .binding(defaults.general.quiverWarning.enableQuiverWarningAfterDungeon, - () -> config.general.quiverWarning.enableQuiverWarningAfterDungeon, - newValue -> config.general.quiverWarning.enableQuiverWarningAfterDungeon = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Item List - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemList")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemList.enableItemList")) - .binding(defaults.general.itemList.enableItemList, - () -> config.general.itemList.enableItemList, - newValue -> config.general.itemList.enableItemList = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Item Tooltip - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice")) - .binding(defaults.general.itemTooltip.enableNPCPrice, - () -> config.general.itemTooltip.enableNPCPrice, - newValue -> config.general.itemTooltip.enableNPCPrice = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableMotesPrice.@Tooltip"))) - .binding(defaults.general.itemTooltip.enableMotesPrice, - () -> config.general.itemTooltip.enableMotesPrice, - newValue -> config.general.itemTooltip.enableMotesPrice = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN")) - .binding(defaults.general.itemTooltip.enableAvgBIN, - () -> config.general.itemTooltip.enableAvgBIN, - newValue -> config.general.itemTooltip.enableAvgBIN = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<SkyblockerConfig.Average>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.avg")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip"))) - .binding(defaults.general.itemTooltip.avg, - () -> config.general.itemTooltip.avg, - newValue -> config.general.itemTooltip.avg = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN")) - .binding(defaults.general.itemTooltip.enableLowestBIN, - () -> config.general.itemTooltip.enableLowestBIN, - newValue -> config.general.itemTooltip.enableLowestBIN = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice")) - .binding(defaults.general.itemTooltip.enableBazaarPrice, - () -> config.general.itemTooltip.enableBazaarPrice, - newValue -> config.general.itemTooltip.enableBazaarPrice = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableObtainedDate")) - .binding(defaults.general.itemTooltip.enableObtainedDate, - () -> config.general.itemTooltip.enableObtainedDate, - newValue -> config.general.itemTooltip.enableObtainedDate = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumInfo")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumInfo.@Tooltip"))) - .binding(defaults.general.itemTooltip.enableMuseumInfo, - () -> config.general.itemTooltip.enableMuseumInfo, - newValue -> config.general.itemTooltip.enableMuseumInfo = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableExoticTooltip")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableExoticTooltip.@Tooltip"))) - .binding(defaults.general.itemTooltip.enableExoticTooltip, - () -> config.general.itemTooltip.enableExoticTooltip, - newValue -> config.general.itemTooltip.enableExoticTooltip = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper.@Tooltip[0]"), Text.literal("\n\n✔ Collected").formatted(Formatting.GREEN), Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper.@Tooltip[1]"), - Text.literal("\n✦ Upgrade").withColor(0x218bff), Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper.@Tooltip[2]"), Text.literal("\n↑ Upgradable").withColor(0xf8d048), Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper.@Tooltip[3]"), - Text.literal("\n↓ Downgrade").formatted(Formatting.GRAY), Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper.@Tooltip[4]"), Text.literal("\n✖ Missing").formatted(Formatting.RED), Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableAccessoriesHelper.@Tooltip[5]"))) - .binding(defaults.general.itemTooltip.enableAccessoriesHelper, - () -> config.general.itemTooltip.enableAccessoriesHelper, - newValue -> config.general.itemTooltip.enableAccessoriesHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Item Info Display - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.attributeShardInfo")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.attributeShardInfo.@Tooltip"))) - .binding(defaults.general.itemInfoDisplay.attributeShardInfo, - () -> config.general.itemInfoDisplay.attributeShardInfo, - newValue -> config.general.itemInfoDisplay.attributeShardInfo = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgrounds")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgrounds.@Tooltip"))) - .binding(defaults.general.itemInfoDisplay.itemRarityBackgrounds, - () -> config.general.itemInfoDisplay.itemRarityBackgrounds, - newValue -> config.general.itemInfoDisplay.itemRarityBackgrounds = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<SkyblockerConfig.RarityBackgroundStyle>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgroundStyle")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgroundStyle.@Tooltip"))) - .binding(defaults.general.itemInfoDisplay.itemRarityBackgroundStyle, - () -> config.general.itemInfoDisplay.itemRarityBackgroundStyle, - newValue -> config.general.itemInfoDisplay.itemRarityBackgroundStyle = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgroundsOpacity")) - .binding(defaults.general.itemInfoDisplay.itemRarityBackgroundsOpacity, - () -> config.general.itemInfoDisplay.itemRarityBackgroundsOpacity, - newValue -> config.general.itemInfoDisplay.itemRarityBackgroundsOpacity = newValue) - .controller(opt -> FloatSliderControllerBuilder.create(opt).range(0f, 1f).step(0.05f).formatValue(ConfigUtils.FLOAT_TWO_FORMATTER)) - .build()) - .build()) - - //Item Protection - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemProtection")) - .collapsed(true) - .option(Option.<SkyblockerConfig.SlotLockStyle>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemProtection.slotLockStyle")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.itemProtection.slotLockStyle.@Tooltip"))) - .binding(defaults.general.itemProtection.slotLockStyle, - () -> config.general.itemProtection.slotLockStyle, - newValue -> config.general.itemProtection.slotLockStyle = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .build()) - - //Wiki Lookup - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup.@Tooltip"))) - .binding(defaults.general.wikiLookup.enableWikiLookup, - () -> config.general.wikiLookup.enableWikiLookup, - newValue -> config.general.wikiLookup.enableWikiLookup = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.officialWiki")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.officialWiki.@Tooltip"))) - .binding(defaults.general.wikiLookup.officialWiki, - () -> config.general.wikiLookup.officialWiki, - newValue -> config.general.wikiLookup.officialWiki = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Chest Value - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.enableChestValue")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.enableChestValue.@Tooltip"))) - .binding(defaults.general.chestValue.enableChestValue, - () -> config.general.chestValue.enableChestValue, - newValue -> config.general.chestValue.enableChestValue = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Formatting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.color")) - .binding(defaults.general.chestValue.color, - () -> config.general.chestValue.color, - newValue -> config.general.chestValue.color = newValue) - .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) - .build()) - .option(Option.<Formatting>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.incompleteColor")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.incompleteColor.@Tooltip"))) - .binding(defaults.general.chestValue.incompleteColor, - () -> config.general.chestValue.incompleteColor, - newValue -> config.general.chestValue.incompleteColor = newValue) - .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) - .build()) - .build()) - - //Special Effects - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.specialEffects")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.specialEffects.rareDungeonDropEffects")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.specialEffects.rareDungeonDropEffects.@Tooltip"))) - .binding(defaults.general.specialEffects.rareDungeonDropEffects, - () -> config.general.specialEffects.rareDungeonDropEffects, - newValue -> config.general.specialEffects.rareDungeonDropEffects = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Hitboxes - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.hitbox")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox")) - .binding(defaults.general.hitbox.oldFarmlandHitbox, - () -> config.general.hitbox.oldFarmlandHitbox, - newValue -> config.general.hitbox.oldFarmlandHitbox = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox")) - .binding(defaults.general.hitbox.oldLeverHitbox, - () -> config.general.hitbox.oldLeverHitbox, - newValue -> config.general.hitbox.oldLeverHitbox = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Title Container - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.@Tooltip"))) - .collapsed(true) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.titleContainerScale")) - .binding(defaults.general.titleContainer.titleContainerScale, - () -> config.general.titleContainer.titleContainerScale, - newValue -> config.general.titleContainer.titleContainerScale = newValue) - .controller(opt -> FloatFieldControllerBuilder.create(opt).range(30f, 140f)) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.config")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new TitleContainerConfigScreen(screen))) - .build()) - .build()) - - //Teleport Overlays - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay.enableTeleportOverlays")) - .binding(defaults.general.teleportOverlay.enableTeleportOverlays, - () -> config.general.teleportOverlay.enableTeleportOverlays, - newValue -> config.general.teleportOverlay.enableTeleportOverlays = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay.enableWeirdTransmission")) - .binding(defaults.general.teleportOverlay.enableWeirdTransmission, - () -> config.general.teleportOverlay.enableWeirdTransmission, - newValue -> config.general.teleportOverlay.enableWeirdTransmission = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay.enableInstantTransmission")) - .binding(defaults.general.teleportOverlay.enableInstantTransmission, - () -> config.general.teleportOverlay.enableInstantTransmission, - newValue -> config.general.teleportOverlay.enableInstantTransmission = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay.enableEtherTransmission")) - .binding(defaults.general.teleportOverlay.enableEtherTransmission, - () -> config.general.teleportOverlay.enableEtherTransmission, - newValue -> config.general.teleportOverlay.enableEtherTransmission = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay.enableSinrecallTransmission")) - .binding(defaults.general.teleportOverlay.enableSinrecallTransmission, - () -> config.general.teleportOverlay.enableSinrecallTransmission, - newValue -> config.general.teleportOverlay.enableSinrecallTransmission = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.teleportOverlay.enableWitherImpact")) - .binding(defaults.general.teleportOverlay.enableWitherImpact, - () -> config.general.teleportOverlay.enableWitherImpact, - newValue -> config.general.teleportOverlay.enableWitherImpact = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Flame Overlay - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay")) - .collapsed(true) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameHeight")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameHeight.@Tooltip"))) - .binding(defaults.general.flameOverlay.flameHeight, - () -> config.general.flameOverlay.flameHeight, - newValue -> config.general.flameOverlay.flameHeight = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1)) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameOpacity")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameOpacity.@Tooltip"))) - .binding(defaults.general.flameOverlay.flameOpacity, - () -> config.general.flameOverlay.flameOpacity, - newValue -> config.general.flameOverlay.flameOpacity = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1)) - .build()) - .build()) - - //Search overlay - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.enableBazaar")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.enableBazaar.@Tooltip"))) - .binding(defaults.general.searchOverlay.enableBazaar, - () -> config.general.searchOverlay.enableBazaar, - newValue -> config.general.searchOverlay.enableBazaar = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.enableAuctionHouse")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.enableAuctionHouse.@Tooltip"))) - .binding(defaults.general.searchOverlay.enableAuctionHouse, - () -> config.general.searchOverlay.enableAuctionHouse, - newValue -> config.general.searchOverlay.enableAuctionHouse = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.keepPreviousSearches")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.keepPreviousSearches.@Tooltip"))) - .binding(defaults.general.searchOverlay.keepPreviousSearches, - () -> config.general.searchOverlay.keepPreviousSearches, - newValue -> config.general.searchOverlay.keepPreviousSearches = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.maxSuggestions")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.maxSuggestions.@Tooltip"))) - .binding(defaults.general.searchOverlay.maxSuggestions, - () -> config.general.searchOverlay.maxSuggestions, - newValue -> config.general.searchOverlay.maxSuggestions = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 5).step(1)) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.historyLength")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.historyLength.@Tooltip"))) - .binding(defaults.general.searchOverlay.historyLength, - () -> config.general.searchOverlay.historyLength, - newValue -> config.general.searchOverlay.historyLength = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 5).step(1)) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.enableCommands")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.enableCommands.@Tooltip"))) - .binding(defaults.general.searchOverlay.enableCommands, - () -> config.general.searchOverlay.enableCommands, - newValue -> config.general.searchOverlay.enableCommands = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - // Fancy Auction House - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.betterAuctionHouse")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.betterAuctionHouse.enabled")) - .binding(defaults.general.fancyAuctionHouse.enabled, - () -> config.general.fancyAuctionHouse.enabled, - newValue -> config.general.fancyAuctionHouse.enabled = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.betterAuctionHouse.highlightUnderAvgPrice")) - .binding(defaults.general.fancyAuctionHouse.highlightCheapBIN, - () -> config.general.fancyAuctionHouse.highlightCheapBIN, - newValue -> config.general.fancyAuctionHouse.highlightCheapBIN = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - .build(); - } + .build(); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java new file mode 100644 index 00000000..1528f853 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java @@ -0,0 +1,142 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import dev.isxander.yacl3.api.*; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionDescription; +import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; +import net.minecraft.text.Text; + +public class HelperCategory { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.helpers")) + + //Ungrouped Options + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.enableNewYearCakesHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.enableNewYearCakesHelper.@Tooltip"))) + .binding(defaults.helpers.enableNewYearCakesHelper, + () -> config.helpers.enableNewYearCakesHelper, + newValue -> config.helpers.enableNewYearCakesHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + + //Mythological Ritual + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.helpers.mythologicalRitual")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.mythologicalRitual.enableMythologicalRitualHelper")) + .binding(defaults.helpers.mythologicalRitual.enableMythologicalRitualHelper, + () -> config.helpers.mythologicalRitual.enableMythologicalRitualHelper, + newValue -> config.helpers.mythologicalRitual.enableMythologicalRitualHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Experiments Solver + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.helpers.experiments")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.experiments.enableChronomatronSolver")) + .binding(defaults.helpers.experiments.enableChronomatronSolver, + () -> config.helpers.experiments.enableChronomatronSolver, + newValue -> config.helpers.experiments.enableChronomatronSolver = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.experiments.enableSuperpairsSolver")) + .binding(defaults.helpers.experiments.enableSuperpairsSolver, + () -> config.helpers.experiments.enableSuperpairsSolver, + newValue -> config.helpers.experiments.enableSuperpairsSolver = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.experiments.enableUltrasequencerSolver")) + .binding(defaults.helpers.experiments.enableUltrasequencerSolver, + () -> config.helpers.experiments.enableUltrasequencerSolver, + newValue -> config.helpers.experiments.enableUltrasequencerSolver = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Fishing Helper + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fishing")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fishing.enableFishingHelper")) + .binding(defaults.helpers.fishing.enableFishingHelper, + () -> config.helpers.fishing.enableFishingHelper, + newValue -> config.helpers.fishing.enableFishingHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fishing.enableFishingTimer")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.enableFishingTimer.@Tooltip"))) + .binding(defaults.helpers.fishing.enableFishingTimer, + () -> config.helpers.fishing.enableFishingTimer, + newValue -> config.helpers.fishing.enableFishingTimer = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fishing.changeTimerColor")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.changeTimerColor.@Tooltip"))) + .binding(defaults.helpers.fishing.changeTimerColor, + () -> config.helpers.fishing.changeTimerColor, + newValue -> config.helpers.fishing.changeTimerColor = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Float>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fishing.fishingTimerScale")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.fishingTimerScale.@Tooltip"))) + .binding(defaults.helpers.fishing.fishingTimerScale, + () -> config.helpers.fishing.fishingTimerScale, + newValue -> config.helpers.fishing.fishingTimerScale = newValue) + .controller(FloatFieldControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fishing.hideOtherPlayers")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fishing.hideOtherPlayers.@Tooltip"))) + .binding(defaults.helpers.fishing.hideOtherPlayersRods, + () -> config.helpers.fishing.hideOtherPlayersRods, + newValue -> config.helpers.fishing.hideOtherPlayersRods = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Fairy Souls Helper + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fairySouls")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fairySouls.enableFairySoulsHelper")) + .binding(defaults.helpers.fairySouls.enableFairySoulsHelper, + () -> config.helpers.fairySouls.enableFairySoulsHelper, + newValue -> config.helpers.fairySouls.enableFairySoulsHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fairySouls.highlightFoundSouls")) + .binding(defaults.helpers.fairySouls.highlightFoundSouls, + () -> config.helpers.fairySouls.highlightFoundSouls, + newValue -> config.helpers.fairySouls.highlightFoundSouls = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.helpers.fairySouls.highlightOnlyNearbySouls")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.fairySouls.highlightOnlyNearbySouls.@Tooltip"))) + .binding(defaults.helpers.fairySouls.highlightOnlyNearbySouls, + () -> config.helpers.fairySouls.highlightOnlyNearbySouls, + newValue -> config.helpers.fairySouls.highlightOnlyNearbySouls = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java deleted file mode 100644 index e56c9eb0..00000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java +++ /dev/null @@ -1,214 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -import de.hysky.skyblocker.config.ConfigUtils; -import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.skyblock.end.EndHudConfigScreen; -import de.hysky.skyblocker.skyblock.end.EndHudWidget; -import de.hysky.skyblocker.skyblock.end.TheEnd; -import de.hysky.skyblocker.skyblock.garden.FarmingHudConfigScreen; -import dev.isxander.yacl3.api.*; -import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; - -public class LocationsCategory { - - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.locations")) - - //Barn - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.barn")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.barn.solveHungryHiker")) - .binding(defaults.locations.barn.solveHungryHiker, - () -> config.locations.barn.solveHungryHiker, - newValue -> config.locations.barn.solveHungryHiker = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.barn.solveTreasureHunter")) - .binding(defaults.locations.barn.solveTreasureHunter, - () -> config.locations.barn.solveTreasureHunter, - newValue -> config.locations.barn.solveTreasureHunter = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //The Rift - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.rift")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.mirrorverseWaypoints")) - .binding(defaults.locations.rift.mirrorverseWaypoints, - () -> config.locations.rift.mirrorverseWaypoints, - newValue -> config.locations.rift.mirrorverseWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.blobbercystGlow")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.blobbercystGlow.@Tooltip"))) - .binding(defaults.locations.rift.blobbercystGlow, - () -> config.locations.rift.blobbercystGlow, - newValue -> config.locations.rift.blobbercystGlow = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.enigmaSoulWaypoints")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.enigmaSoulWaypoints.@Tooltip"))) - .binding(defaults.locations.rift.enigmaSoulWaypoints, - () -> config.locations.rift.enigmaSoulWaypoints, - newValue -> config.locations.rift.enigmaSoulWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.highlightFoundEnigmaSouls")) - .binding(defaults.locations.rift.highlightFoundEnigmaSouls, - () -> config.locations.rift.highlightFoundEnigmaSouls, - newValue -> config.locations.rift.highlightFoundEnigmaSouls = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.mcGrubberStacks")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.rift.mcGrubberStacks.@Tooltip"))) - .binding(defaults.locations.rift.mcGrubberStacks, - () -> config.locations.rift.mcGrubberStacks, - newValue -> config.locations.rift.mcGrubberStacks = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 5).step(1)) - .build()) - .build()) - - // The end - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.enableEnderNodeHelper")) - .binding(defaults.locations.end.enableEnderNodeHelper, - () -> config.locations.end.enableEnderNodeHelper, - newValue -> config.locations.end.enableEnderNodeHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.hudEnabled")) - .binding(defaults.locations.end.hudEnabled, - () -> config.locations.end.hudEnabled, - newValue -> config.locations.end.hudEnabled = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.zealotKillsEnabled")) - .binding(defaults.locations.end.zealotKillsEnabled, - () -> config.locations.end.zealotKillsEnabled, - newValue -> { - config.locations.end.zealotKillsEnabled = newValue; - EndHudWidget.INSTANCE.update(); - }) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.protectorLocationEnable")) - .binding(defaults.locations.end.protectorLocationEnabled, - () -> config.locations.end.protectorLocationEnabled, - newValue -> { - config.locations.end.protectorLocationEnabled = newValue; - EndHudWidget.INSTANCE.update(); - }) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.waypoint")) - .binding(defaults.locations.end.waypoint, - () -> config.locations.end.waypoint, - newValue -> config.locations.end.waypoint = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.screen")) - .text(Text.translatable("text.skyblocker.open")) // Reusing again lol - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new EndHudConfigScreen(screen))) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.end.resetName")) - .text(Text.translatable("text.autoconfig.skyblocker.option.locations.end.resetText")) - .action((screen, opt) -> { - TheEnd.zealotsKilled = 0; - TheEnd.zealotsSinceLastEye = 0; - TheEnd.eyes = 0; - }) - .build()) - .build() - - ) - - //Spider's Den - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.spidersDen")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.spidersDen.relics.enableRelicsHelper")) - .binding(defaults.locations.spidersDen.relics.enableRelicsHelper, - () -> config.locations.spidersDen.relics.enableRelicsHelper, - newValue -> config.locations.spidersDen.relics.enableRelicsHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.spidersDen.relics.highlightFoundRelics")) - .binding(defaults.locations.spidersDen.relics.highlightFoundRelics, - () -> config.locations.spidersDen.relics.highlightFoundRelics, - newValue -> config.locations.spidersDen.relics.highlightFoundRelics = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - - //Garden - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden")) - .collapsed(false) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.farmingHud.enableHud")) - .binding(defaults.locations.garden.farmingHud.enableHud, - () -> config.locations.garden.farmingHud.enableHud, - newValue -> config.locations.garden.farmingHud.enableHud = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.farmingHud.config")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new FarmingHudConfigScreen(screen))) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.dicerTitlePrevent")) - .binding(defaults.locations.garden.dicerTitlePrevent, - () -> config.locations.garden.dicerTitlePrevent, - newValue -> config.locations.garden.dicerTitlePrevent = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.visitorHelper")) - .binding(defaults.locations.garden.visitorHelper, - () -> config.locations.garden.visitorHelper, - newValue -> config.locations.garden.visitorHelper = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.lockMouseTool")) - .binding(defaults.locations.garden.lockMouseTool, - () -> config.locations.garden.lockMouseTool, - newValue -> config.locations.garden.lockMouseTool = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.lockMouseGround")) - .binding(defaults.locations.garden.lockMouseGroundOnly, - () -> config.locations.garden.lockMouseGroundOnly, - newValue -> config.locations.garden.lockMouseGroundOnly = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) - .build(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java deleted file mode 100644 index 0f95bcaa..00000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java +++ /dev/null @@ -1,159 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -import de.hysky.skyblocker.config.ConfigUtils; -import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.skyblock.chat.ChatRulesConfigScreen; -import de.hysky.skyblocker.skyblock.dwarven.CrystalsHudConfigScreen; -import de.hysky.skyblocker.utils.chat.ChatFilterResult; -import dev.isxander.yacl3.api.*; -import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; - -public class MessageFilterCategory { - - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.messages")) - - //Uncategorized Options - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideAbility")) - .binding(defaults.messages.hideAbility, - () -> config.messages.hideAbility, - newValue -> config.messages.hideAbility = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideHeal")) - .binding(defaults.messages.hideHeal, - () -> config.messages.hideHeal, - newValue -> config.messages.hideHeal = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideAOTE")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideAOTE.@Tooltip"))) - .binding(defaults.messages.hideAOTE, - () -> config.messages.hideAOTE, - newValue -> config.messages.hideAOTE = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideImplosion")) - .binding(defaults.messages.hideImplosion, - () -> config.messages.hideImplosion, - newValue -> config.messages.hideImplosion = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideMoltenWave")) - .binding(defaults.messages.hideMoltenWave, - () -> config.messages.hideMoltenWave, - newValue -> config.messages.hideMoltenWave = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideAds")) - .binding(defaults.messages.hideAds, - () -> config.messages.hideAds, - newValue -> config.messages.hideAds = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideTeleportPad")) - .binding(defaults.messages.hideTeleportPad, - () -> config.messages.hideTeleportPad, - newValue -> config.messages.hideTeleportPad = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideCombo")) - .binding(defaults.messages.hideCombo, - () -> config.messages.hideCombo, - newValue -> config.messages.hideCombo = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideAutopet")) - .binding(defaults.messages.hideAutopet, - () -> config.messages.hideAutopet, - newValue -> config.messages.hideAutopet = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideShowOff")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideShowOff.@Tooltip"))) - .binding(defaults.messages.hideShowOff, - () -> config.messages.hideShowOff, - newValue -> config.messages.hideShowOff = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideToggleSkyMall")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideToggleSkyMall.@Tooltip"))) - .binding(defaults.messages.hideToggleSkyMall, - () -> config.messages.hideToggleSkyMall, - newValue -> config.messages.hideToggleSkyMall = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideMana")) - .binding(defaults.messages.hideMana, - () -> config.messages.hideMana, - newValue -> config.messages.hideMana = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideMimicKill")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideMimicKill.@Tooltip"))) - .binding(defaults.messages.hideMimicKill, - () -> config.messages.hideMimicKill, - newValue -> config.messages.hideMimicKill = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideDeath")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideDeath.@Tooltip"))) - .binding(defaults.messages.hideDeath, - () -> config.messages.hideDeath, - newValue -> config.messages.hideDeath = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.<ChatFilterResult>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideDicer")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideDicer.@Tooltip"))) - .binding(defaults.messages.hideDicer, - () -> config.messages.hideDicer, - newValue -> config.messages.hideDicer = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - //chat rules options - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules")) - .collapsed(false) - .option(ButtonOption.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen")) - .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new ChatRulesConfigScreen(screen))) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.announcementLength")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.announcementLength.@Tooltip"))) - .binding(defaults.messages.chatRuleConfig.announcementLength, - () -> config.messages.chatRuleConfig.announcementLength, - newValue -> config.messages.chatRuleConfig.announcementLength = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(5, 200).step(1)) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.announcementScale")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.announcementScale.@Tooltip"))) - .binding(defaults.messages.chatRuleConfig.announcementScale, - () -> config.messages.chatRuleConfig.announcementScale, - newValue -> config.messages.chatRuleConfig.announcementScale = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 8).step(1)) - .build()) - .build()) - .build(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java new file mode 100644 index 00000000..8809ba44 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java @@ -0,0 +1,165 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.configs.MiningConfig; +import de.hysky.skyblocker.skyblock.dwarven.CrystalsHudConfigScreen; +import dev.isxander.yacl3.api.ButtonOption; +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 de.hysky.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; +import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; +import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; + +public class MiningCategory { + + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.mining")) + + //Uncategorized Options + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.enableDrillFuel")) + .binding(defaults.mining.enableDrillFuel, + () -> config.mining.enableDrillFuel, + newValue -> config.mining.enableDrillFuel = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + + //Dwarven Mines + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenMines")) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenMines.solveFetchur")) + .binding(defaults.mining.dwarvenMines.solveFetchur, + () -> config.mining.dwarvenMines.solveFetchur, + newValue -> config.mining.dwarvenMines.solveFetchur = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenMines.solvePuzzler")) + .binding(defaults.mining.dwarvenMines.solvePuzzler, + () -> config.mining.dwarvenMines.solvePuzzler, + newValue -> config.mining.dwarvenMines.solvePuzzler = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Dwarven HUD + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenHud")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenHud.enabledCommissions")) + .binding(defaults.mining.dwarvenHud.enabledCommissions, + () -> config.mining.dwarvenHud.enabledCommissions, + newValue -> config.mining.dwarvenHud.enabledCommissions = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenHud.enabledPowder")) + .binding(defaults.mining.dwarvenHud.enabledPowder, + () -> config.mining.dwarvenHud.enabledPowder, + newValue -> config.mining.dwarvenHud.enabledPowder = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<MiningConfig.DwarvenHudStyle>createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenHud.style")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.mining.dwarvenHud.style.@Tooltip[0]"), + Text.translatable("skyblocker.config.mining.dwarvenHud.style.@Tooltip[1]"), + Text.translatable("skyblocker.config.mining.dwarvenHud.style.@Tooltip[2]"))) + .binding(defaults.mining.dwarvenHud.style, + () -> config.mining.dwarvenHud.style, + newValue -> config.mining.dwarvenHud.style = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.mining.dwarvenHud.screen")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new DwarvenHudConfigScreen(screen))) + .build()) + .build()) + + //Crystal Hollows + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalHollows")) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalHollows.metalDetectorHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.mining.crystalHollows.metalDetectorHelper.@Tooltip"))) + .binding(defaults.mining.crystalHollows.metalDetectorHelper, + () -> config.mining.crystalHollows.metalDetectorHelper, + newValue -> config.mining.crystalHollows.metalDetectorHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Crystal Hollows Map + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsHud")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsHud.enabled")) + .binding(defaults.mining.crystalsHud.enabled, + () -> config.mining.crystalsHud.enabled, + newValue -> config.mining.crystalsHud.enabled = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsHud.screen")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new CrystalsHudConfigScreen(screen))) + .build()) + .option(Option.<Float>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsHud.mapScaling")) + .binding(defaults.mining.crystalsHud.mapScaling, + () -> config.mining.crystalsHud.mapScaling, + newValue -> config.mining.crystalsHud.mapScaling = newValue) + .controller(FloatFieldControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsHud.showLocations")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.mining.crystalsHud.showLocations.@Tooltip"))) + .binding(defaults.mining.crystalsHud.showLocations, + () -> config.mining.crystalsHud.showLocations, + newValue -> config.mining.crystalsHud.showLocations = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsHud.showLocations.locationSize")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.mining.crystalsHud.showLocations.locationSize.@Tooltip"))) + .binding(defaults.mining.crystalsHud.locationSize, + () -> config.mining.crystalsHud.locationSize, + newValue -> config.mining.crystalsHud.locationSize = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(4, 12).step(2)) + .build()) + .build()) + + //Crystal Hollows waypoints + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsWaypoints")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsWaypoints.enabled")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.mining.crystalsWaypoints.enabled.@Tooltip"))) + .binding(defaults.mining.crystalsWaypoints.enabled, + () -> config.mining.crystalsWaypoints.enabled, + newValue -> config.mining.crystalsWaypoints.enabled = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.mining.crystalsWaypoints.findInChat")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.mining.crystalsWaypoints.findInChat.@Tooltip"))) + .binding(defaults.mining.crystalsWaypoints.findInChat, + () -> config.mining.crystalsWaypoints.findInChat, + newValue -> config.mining.crystalsWaypoints.findInChat = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + + .build()) + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/MiscCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/MiscCategory.java new file mode 100644 index 00000000..b2127e6b --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/MiscCategory.java @@ -0,0 +1,56 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.configs.MiscConfig; +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.StringControllerBuilder; +import net.minecraft.text.Text; + +public class MiscCategory { + + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.misc")) + + //Uncategorized Options + + //Discord RPC + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.misc.richPresence")) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.misc.richPresence.enableRichPresence")) + .binding(defaults.misc.richPresence.enableRichPresence, + () -> config.misc.richPresence.enableRichPresence, + newValue -> config.misc.richPresence.enableRichPresence = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<MiscConfig.Info>createBuilder() + .name(Text.translatable("skyblocker.config.misc.richPresence.info")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.misc.richPresence.info.@Tooltip"))) + .binding(defaults.misc.richPresence.info, + () -> config.misc.richPresence.info, + newValue -> config.misc.richPresence.info = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.misc.richPresence.cycleMode")) + .binding(defaults.misc.richPresence.cycleMode, + () -> config.misc.richPresence.cycleMode, + newValue -> config.misc.richPresence.cycleMode = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.misc.richPresence.customMessage")) + .binding(defaults.misc.richPresence.customMessage, + () -> config.misc.richPresence.customMessage, + newValue -> config.misc.richPresence.customMessage = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java new file mode 100644 index 00000000..67397b9d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java @@ -0,0 +1,166 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.skyblock.end.EndHudConfigScreen; +import de.hysky.skyblocker.skyblock.end.EndHudWidget; +import de.hysky.skyblocker.skyblock.end.TheEnd; +import dev.isxander.yacl3.api.*; +import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; + +public class OtherLocationsCategory { + + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations")) + + //Barn + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.barn")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.barn.solveHungryHiker")) + .binding(defaults.otherLocations.barn.solveHungryHiker, + () -> config.otherLocations.barn.solveHungryHiker, + newValue -> config.otherLocations.barn.solveHungryHiker = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.barn.solveTreasureHunter")) + .binding(defaults.otherLocations.barn.solveTreasureHunter, + () -> config.otherLocations.barn.solveTreasureHunter, + newValue -> config.otherLocations.barn.solveTreasureHunter = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //The Rift + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.rift")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.rift.mirrorverseWaypoints")) + .binding(defaults.otherLocations.rift.mirrorverseWaypoints, + () -> config.otherLocations.rift.mirrorverseWaypoints, + newValue -> config.otherLocations.rift.mirrorverseWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.rift.blobbercystGlow")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.otherLocations.rift.blobbercystGlow.@Tooltip"))) + .binding(defaults.otherLocations.rift.blobbercystGlow, + () -> config.otherLocations.rift.blobbercystGlow, + newValue -> config.otherLocations.rift.blobbercystGlow = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.rift.enigmaSoulWaypoints")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.otherLocations.rift.enigmaSoulWaypoints.@Tooltip"))) + .binding(defaults.otherLocations.rift.enigmaSoulWaypoints, + () -> config.otherLocations.rift.enigmaSoulWaypoints, + newValue -> config.otherLocations.rift.enigmaSoulWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.rift.highlightFoundEnigmaSouls")) + .binding(defaults.otherLocations.rift.highlightFoundEnigmaSouls, + () -> config.otherLocations.rift.highlightFoundEnigmaSouls, + newValue -> config.otherLocations.rift.highlightFoundEnigmaSouls = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.rift.mcGrubberStacks")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.otherLocations.rift.mcGrubberStacks.@Tooltip"))) + .binding(defaults.otherLocations.rift.mcGrubberStacks, + () -> config.otherLocations.rift.mcGrubberStacks, + newValue -> config.otherLocations.rift.mcGrubberStacks = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 5).step(1)) + .build()) + .build()) + + // The end + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.enableEnderNodeHelper")) + .binding(defaults.otherLocations.end.enableEnderNodeHelper, + () -> config.otherLocations.end.enableEnderNodeHelper, + newValue -> config.otherLocations.end.enableEnderNodeHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.hudEnabled")) + .binding(defaults.otherLocations.end.hudEnabled, + () -> config.otherLocations.end.hudEnabled, + newValue -> config.otherLocations.end.hudEnabled = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.zealotKillsEnabled")) + .binding(defaults.otherLocations.end.zealotKillsEnabled, + () -> config.otherLocations.end.zealotKillsEnabled, + newValue -> { + config.otherLocations.end.zealotKillsEnabled = newValue; + EndHudWidget.INSTANCE.update(); + }) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.protectorLocationEnable")) + .binding(defaults.otherLocations.end.protectorLocationEnabled, + () -> config.otherLocations.end.protectorLocationEnabled, + newValue -> { + config.otherLocations.end.protectorLocationEnabled = newValue; + EndHudWidget.INSTANCE.update(); + }) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.waypoint")) + .binding(defaults.otherLocations.end.waypoint, + () -> config.otherLocations.end.waypoint, + newValue -> config.otherLocations.end.waypoint = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.screen")) + .text(Text.translatable("text.skyblocker.open")) // Reusing again lol + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new EndHudConfigScreen(screen))) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.end.resetName")) + .text(Text.translatable("skyblocker.config.otherLocations.end.resetText")) + .action((screen, opt) -> { + TheEnd.zealotsKilled = 0; + TheEnd.zealotsSinceLastEye = 0; + TheEnd.eyes = 0; + }) + .build()) + .build()) + + //Spider's Den + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.spidersDen")) + .collapsed(false) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.spidersDen.relics.enableRelicsHelper")) + .binding(defaults.otherLocations.spidersDen.relics.enableRelicsHelper, + () -> config.otherLocations.spidersDen.relics.enableRelicsHelper, + newValue -> config.otherLocations.spidersDen.relics.enableRelicsHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.otherLocations.spidersDen.relics.highlightFoundRelics")) + .binding(defaults.otherLocations.spidersDen.relics.highlightFoundRelics, + () -> config.otherLocations.spidersDen.relics.highlightFoundRelics, + newValue -> config.otherLocations.spidersDen.relics.highlightFoundRelics = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java index 4b3c0dfd..1200261d 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/QuickNavigationCategory.java @@ -12,607 +12,607 @@ import net.minecraft.text.Text; public class QuickNavigationCategory { - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.quickNav")) + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav")) - //Toggle - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.enableQuickNav")) - .binding(defaults.quickNav.enableQuickNav, - () -> config.quickNav.enableQuickNav, - newValue -> config.quickNav.enableQuickNav = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) + //Toggle + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.enableQuickNav")) + .binding(defaults.quickNav.enableQuickNav, + () -> config.quickNav.enableQuickNav, + newValue -> config.quickNav.enableQuickNav = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) - //Button 1 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 1)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button1.render, - () -> config.quickNav.button1.render, - newValue -> config.quickNav.button1.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button1.item.itemName, - () -> config.quickNav.button1.item.itemName, - newValue -> config.quickNav.button1.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button1.item.count, - () -> config.quickNav.button1.item.count, - newValue -> config.quickNav.button1.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button1.item.nbt, - () -> config.quickNav.button1.item.nbt, - newValue -> config.quickNav.button1.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button1.uiTitle, - () -> config.quickNav.button1.uiTitle, - newValue -> config.quickNav.button1.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button1.clickEvent, - () -> config.quickNav.button1.clickEvent, - newValue -> config.quickNav.button1.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 1 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 1)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button1.render, + () -> config.quickNav.button1.render, + newValue -> config.quickNav.button1.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button1.item.id, + () -> config.quickNav.button1.item.id, + newValue -> config.quickNav.button1.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button1.item.count, + () -> config.quickNav.button1.item.count, + newValue -> config.quickNav.button1.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button1.item.nbt, + () -> config.quickNav.button1.item.nbt, + newValue -> config.quickNav.button1.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button1.uiTitle, + () -> config.quickNav.button1.uiTitle, + newValue -> config.quickNav.button1.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button1.clickEvent, + () -> config.quickNav.button1.clickEvent, + newValue -> config.quickNav.button1.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 2 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 2)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button2.render, - () -> config.quickNav.button2.render, - newValue -> config.quickNav.button2.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button2.item.itemName, - () -> config.quickNav.button2.item.itemName, - newValue -> config.quickNav.button2.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button2.item.count, - () -> config.quickNav.button2.item.count, - newValue -> config.quickNav.button2.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button2.item.nbt, - () -> config.quickNav.button2.item.nbt, - newValue -> config.quickNav.button2.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button2.uiTitle, - () -> config.quickNav.button2.uiTitle, - newValue -> config.quickNav.button2.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button2.clickEvent, - () -> config.quickNav.button2.clickEvent, - newValue -> config.quickNav.button2.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 2 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 2)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button2.render, + () -> config.quickNav.button2.render, + newValue -> config.quickNav.button2.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button2.item.id, + () -> config.quickNav.button2.item.id, + newValue -> config.quickNav.button2.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button2.item.count, + () -> config.quickNav.button2.item.count, + newValue -> config.quickNav.button2.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button2.item.nbt, + () -> config.quickNav.button2.item.nbt, + newValue -> config.quickNav.button2.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button2.uiTitle, + () -> config.quickNav.button2.uiTitle, + newValue -> config.quickNav.button2.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button2.clickEvent, + () -> config.quickNav.button2.clickEvent, + newValue -> config.quickNav.button2.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 3 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 3)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button3.render, - () -> config.quickNav.button3.render, - newValue -> config.quickNav.button3.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button3.item.itemName, - () -> config.quickNav.button3.item.itemName, - newValue -> config.quickNav.button3.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button3.item.count, - () -> config.quickNav.button3.item.count, - newValue -> config.quickNav.button3.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button3.item.nbt, - () -> config.quickNav.button3.item.nbt, - newValue -> config.quickNav.button3.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button3.uiTitle, - () -> config.quickNav.button3.uiTitle, - newValue -> config.quickNav.button3.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button3.clickEvent, - () -> config.quickNav.button3.clickEvent, - newValue -> config.quickNav.button3.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 3 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 3)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button3.render, + () -> config.quickNav.button3.render, + newValue -> config.quickNav.button3.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button3.item.id, + () -> config.quickNav.button3.item.id, + newValue -> config.quickNav.button3.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button3.item.count, + () -> config.quickNav.button3.item.count, + newValue -> config.quickNav.button3.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button3.item.nbt, + () -> config.quickNav.button3.item.nbt, + newValue -> config.quickNav.button3.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button3.uiTitle, + () -> config.quickNav.button3.uiTitle, + newValue -> config.quickNav.button3.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button3.clickEvent, + () -> config.quickNav.button3.clickEvent, + newValue -> config.quickNav.button3.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 4 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 4)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button4.render, - () -> config.quickNav.button4.render, - newValue -> config.quickNav.button4.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button4.item.itemName, - () -> config.quickNav.button4.item.itemName, - newValue -> config.quickNav.button4.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button4.item.count, - () -> config.quickNav.button4.item.count, - newValue -> config.quickNav.button4.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button4.item.nbt, - () -> config.quickNav.button4.item.nbt, - newValue -> config.quickNav.button4.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button4.uiTitle, - () -> config.quickNav.button4.uiTitle, - newValue -> config.quickNav.button4.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button4.clickEvent, - () -> config.quickNav.button4.clickEvent, - newValue -> config.quickNav.button4.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 4 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 4)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button4.render, + () -> config.quickNav.button4.render, + newValue -> config.quickNav.button4.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button4.item.id, + () -> config.quickNav.button4.item.id, + newValue -> config.quickNav.button4.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button4.item.count, + () -> config.quickNav.button4.item.count, + newValue -> config.quickNav.button4.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button4.item.nbt, + () -> config.quickNav.button4.item.nbt, + newValue -> config.quickNav.button4.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button4.uiTitle, + () -> config.quickNav.button4.uiTitle, + newValue -> config.quickNav.button4.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button4.clickEvent, + () -> config.quickNav.button4.clickEvent, + newValue -> config.quickNav.button4.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 5 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 5)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button5.render, - () -> config.quickNav.button5.render, - newValue -> config.quickNav.button5.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button5.item.itemName, - () -> config.quickNav.button5.item.itemName, - newValue -> config.quickNav.button5.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button5.item.count, - () -> config.quickNav.button5.item.count, - newValue -> config.quickNav.button5.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button5.item.nbt, - () -> config.quickNav.button5.item.nbt, - newValue -> config.quickNav.button5.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button5.uiTitle, - () -> config.quickNav.button5.uiTitle, - newValue -> config.quickNav.button5.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button5.clickEvent, - () -> config.quickNav.button5.clickEvent, - newValue -> config.quickNav.button5.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 5 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 5)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button5.render, + () -> config.quickNav.button5.render, + newValue -> config.quickNav.button5.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button5.item.id, + () -> config.quickNav.button5.item.id, + newValue -> config.quickNav.button5.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button5.item.count, + () -> config.quickNav.button5.item.count, + newValue -> config.quickNav.button5.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button5.item.nbt, + () -> config.quickNav.button5.item.nbt, + newValue -> config.quickNav.button5.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button5.uiTitle, + () -> config.quickNav.button5.uiTitle, + newValue -> config.quickNav.button5.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button5.clickEvent, + () -> config.quickNav.button5.clickEvent, + newValue -> config.quickNav.button5.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 6 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 6)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button6.render, - () -> config.quickNav.button6.render, - newValue -> config.quickNav.button6.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button6.item.itemName, - () -> config.quickNav.button6.item.itemName, - newValue -> config.quickNav.button6.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button6.item.count, - () -> config.quickNav.button6.item.count, - newValue -> config.quickNav.button6.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button6.item.nbt, - () -> config.quickNav.button6.item.nbt, - newValue -> config.quickNav.button6.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button6.uiTitle, - () -> config.quickNav.button6.uiTitle, - newValue -> config.quickNav.button6.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button6.clickEvent, - () -> config.quickNav.button6.clickEvent, - newValue -> config.quickNav.button6.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 6 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 6)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button6.render, + () -> config.quickNav.button6.render, + newValue -> config.quickNav.button6.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button6.item.id, + () -> config.quickNav.button6.item.id, + newValue -> config.quickNav.button6.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button6.item.count, + () -> config.quickNav.button6.item.count, + newValue -> config.quickNav.button6.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button6.item.nbt, + () -> config.quickNav.button6.item.nbt, + newValue -> config.quickNav.button6.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button6.uiTitle, + () -> config.quickNav.button6.uiTitle, + newValue -> config.quickNav.button6.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button6.clickEvent, + () -> config.quickNav.button6.clickEvent, + newValue -> config.quickNav.button6.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 7 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 7)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button7.render, - () -> config.quickNav.button7.render, - newValue -> config.quickNav.button7.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button7.item.itemName, - () -> config.quickNav.button7.item.itemName, - newValue -> config.quickNav.button7.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button7.item.count, - () -> config.quickNav.button7.item.count, - newValue -> config.quickNav.button7.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button7.item.nbt, - () -> config.quickNav.button7.item.nbt, - newValue -> config.quickNav.button7.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button7.uiTitle, - () -> config.quickNav.button7.uiTitle, - newValue -> config.quickNav.button7.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button7.clickEvent, - () -> config.quickNav.button7.clickEvent, - newValue -> config.quickNav.button7.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 7 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 7)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button7.render, + () -> config.quickNav.button7.render, + newValue -> config.quickNav.button7.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button7.item.id, + () -> config.quickNav.button7.item.id, + newValue -> config.quickNav.button7.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button7.item.count, + () -> config.quickNav.button7.item.count, + newValue -> config.quickNav.button7.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button7.item.nbt, + () -> config.quickNav.button7.item.nbt, + newValue -> config.quickNav.button7.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button7.uiTitle, + () -> config.quickNav.button7.uiTitle, + newValue -> config.quickNav.button7.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button7.clickEvent, + () -> config.quickNav.button7.clickEvent, + newValue -> config.quickNav.button7.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 8 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 8)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button8.render, - () -> config.quickNav.button8.render, - newValue -> config.quickNav.button8.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button8.item.itemName, - () -> config.quickNav.button8.item.itemName, - newValue -> config.quickNav.button8.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button8.item.count, - () -> config.quickNav.button8.item.count, - newValue -> config.quickNav.button8.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button8.item.nbt, - () -> config.quickNav.button8.item.nbt, - newValue -> config.quickNav.button8.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button8.uiTitle, - () -> config.quickNav.button8.uiTitle, - newValue -> config.quickNav.button8.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button8.clickEvent, - () -> config.quickNav.button8.clickEvent, - newValue -> config.quickNav.button8.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 8 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 8)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button8.render, + () -> config.quickNav.button8.render, + newValue -> config.quickNav.button8.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button8.item.id, + () -> config.quickNav.button8.item.id, + newValue -> config.quickNav.button8.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button8.item.count, + () -> config.quickNav.button8.item.count, + newValue -> config.quickNav.button8.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button8.item.nbt, + () -> config.quickNav.button8.item.nbt, + newValue -> config.quickNav.button8.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button8.uiTitle, + () -> config.quickNav.button8.uiTitle, + newValue -> config.quickNav.button8.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button8.clickEvent, + () -> config.quickNav.button8.clickEvent, + newValue -> config.quickNav.button8.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 9 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 9)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button9.render, - () -> config.quickNav.button9.render, - newValue -> config.quickNav.button9.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button9.item.itemName, - () -> config.quickNav.button9.item.itemName, - newValue -> config.quickNav.button9.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button9.item.count, - () -> config.quickNav.button9.item.count, - newValue -> config.quickNav.button9.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button9.item.nbt, - () -> config.quickNav.button9.item.nbt, - newValue -> config.quickNav.button9.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button9.uiTitle, - () -> config.quickNav.button9.uiTitle, - newValue -> config.quickNav.button9.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button9.clickEvent, - () -> config.quickNav.button9.clickEvent, - newValue -> config.quickNav.button9.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 9 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 9)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button9.render, + () -> config.quickNav.button9.render, + newValue -> config.quickNav.button9.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button9.item.id, + () -> config.quickNav.button9.item.id, + newValue -> config.quickNav.button9.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button9.item.count, + () -> config.quickNav.button9.item.count, + newValue -> config.quickNav.button9.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button9.item.nbt, + () -> config.quickNav.button9.item.nbt, + newValue -> config.quickNav.button9.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button9.uiTitle, + () -> config.quickNav.button9.uiTitle, + newValue -> config.quickNav.button9.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button9.clickEvent, + () -> config.quickNav.button9.clickEvent, + newValue -> config.quickNav.button9.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 10 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 10)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button10.render, - () -> config.quickNav.button10.render, - newValue -> config.quickNav.button10.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button10.item.itemName, - () -> config.quickNav.button10.item.itemName, - newValue -> config.quickNav.button10.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button10.item.count, - () -> config.quickNav.button10.item.count, - newValue -> config.quickNav.button10.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button10.item.nbt, - () -> config.quickNav.button10.item.nbt, - newValue -> config.quickNav.button10.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button10.uiTitle, - () -> config.quickNav.button10.uiTitle, - newValue -> config.quickNav.button10.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button10.clickEvent, - () -> config.quickNav.button10.clickEvent, - newValue -> config.quickNav.button10.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 10 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 10)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button10.render, + () -> config.quickNav.button10.render, + newValue -> config.quickNav.button10.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button10.item.id, + () -> config.quickNav.button10.item.id, + newValue -> config.quickNav.button10.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button10.item.count, + () -> config.quickNav.button10.item.count, + newValue -> config.quickNav.button10.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button10.item.nbt, + () -> config.quickNav.button10.item.nbt, + newValue -> config.quickNav.button10.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button10.uiTitle, + () -> config.quickNav.button10.uiTitle, + newValue -> config.quickNav.button10.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button10.clickEvent, + () -> config.quickNav.button10.clickEvent, + newValue -> config.quickNav.button10.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 11 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 11)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button11.render, - () -> config.quickNav.button11.render, - newValue -> config.quickNav.button11.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button11.item.itemName, - () -> config.quickNav.button11.item.itemName, - newValue -> config.quickNav.button11.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button11.item.count, - () -> config.quickNav.button11.item.count, - newValue -> config.quickNav.button11.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button11.item.nbt, - () -> config.quickNav.button11.item.nbt, - newValue -> config.quickNav.button11.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button11.uiTitle, - () -> config.quickNav.button11.uiTitle, - newValue -> config.quickNav.button11.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button11.clickEvent, - () -> config.quickNav.button11.clickEvent, - newValue -> config.quickNav.button11.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 11 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 11)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button11.render, + () -> config.quickNav.button11.render, + newValue -> config.quickNav.button11.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button11.item.id, + () -> config.quickNav.button11.item.id, + newValue -> config.quickNav.button11.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button11.item.count, + () -> config.quickNav.button11.item.count, + newValue -> config.quickNav.button11.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button11.item.nbt, + () -> config.quickNav.button11.item.nbt, + newValue -> config.quickNav.button11.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button11.uiTitle, + () -> config.quickNav.button11.uiTitle, + newValue -> config.quickNav.button11.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button11.clickEvent, + () -> config.quickNav.button11.clickEvent, + newValue -> config.quickNav.button11.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - //Button 12 - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button", 12)) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.render")) - .binding(defaults.quickNav.button12.render, - () -> config.quickNav.button12.render, - newValue -> config.quickNav.button12.render = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.itemName")) - .binding(defaults.quickNav.button12.item.itemName, - () -> config.quickNav.button12.item.itemName, - newValue -> config.quickNav.button12.item.itemName = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.count")) - .binding(defaults.quickNav.button12.item.count, - () -> config.quickNav.button12.item.count, - newValue -> config.quickNav.button12.item.count = newValue) - .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.item.nbt.@Tooltip"))) - .binding(defaults.quickNav.button12.item.nbt, - () -> config.quickNav.button12.item.nbt, - newValue -> config.quickNav.button12.item.nbt = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.uiTitle")) - .binding(defaults.quickNav.button12.uiTitle, - () -> config.quickNav.button12.uiTitle, - newValue -> config.quickNav.button12.uiTitle = newValue) - .controller(StringControllerBuilder::create) - .build()) - .option(Option.<String>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button.clickEvent")) - .binding(defaults.quickNav.button12.clickEvent, - () -> config.quickNav.button12.clickEvent, - newValue -> config.quickNav.button12.clickEvent = newValue) - .controller(StringControllerBuilder::create) - .build()) - .build()) + //Button 12 + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button", 12)) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.render")) + .binding(defaults.quickNav.button12.render, + () -> config.quickNav.button12.render, + newValue -> config.quickNav.button12.render = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.itemName")) + .binding(defaults.quickNav.button12.item.id, + () -> config.quickNav.button12.item.id, + newValue -> config.quickNav.button12.item.id = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.count")) + .binding(defaults.quickNav.button12.item.count, + () -> config.quickNav.button12.item.count, + newValue -> config.quickNav.button12.item.count = newValue) + .controller(opt -> IntegerFieldControllerBuilder.create(opt).range(1, 64)) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.item.nbt")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.quickNav.button.item.nbt.@Tooltip"))) + .binding(defaults.quickNav.button12.item.nbt, + () -> config.quickNav.button12.item.nbt, + newValue -> config.quickNav.button12.item.nbt = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.uiTitle")) + .binding(defaults.quickNav.button12.uiTitle, + () -> config.quickNav.button12.uiTitle, + newValue -> config.quickNav.button12.uiTitle = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("skyblocker.config.quickNav.button.clickEvent")) + .binding(defaults.quickNav.button12.clickEvent, + () -> config.quickNav.button12.clickEvent, + newValue -> config.quickNav.button12.clickEvent = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) - .build(); - } + .build(); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java index 005bebab..0a65aa3b 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java @@ -13,131 +13,131 @@ import net.minecraft.text.Text; public class SlayersCategory { - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.category.slayer")) + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.slayer")) - //Enderman Slayer - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.enableYangGlyphsNotification")) - .binding(defaults.slayer.endermanSlayer.enableYangGlyphsNotification, - () -> config.slayer.endermanSlayer.enableYangGlyphsNotification, - newValue -> config.slayer.endermanSlayer.enableYangGlyphsNotification = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightBeacons")) - .binding(defaults.slayer.endermanSlayer.highlightBeacons, - () -> config.slayer.endermanSlayer.highlightBeacons, - newValue -> config.slayer.endermanSlayer.highlightBeacons = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightNukekubiHeads")) - .binding(defaults.slayer.endermanSlayer.highlightNukekubiHeads, - () -> config.slayer.endermanSlayer.highlightNukekubiHeads, - newValue -> config.slayer.endermanSlayer.highlightNukekubiHeads = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .build()) + //Enderman Slayer + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.slayer.endermanSlayer")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.endermanSlayer.enableYangGlyphsNotification")) + .binding(defaults.slayers.endermanSlayer.enableYangGlyphsNotification, + () -> config.slayers.endermanSlayer.enableYangGlyphsNotification, + newValue -> config.slayers.endermanSlayer.enableYangGlyphsNotification = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.endermanSlayer.highlightBeacons")) + .binding(defaults.slayers.endermanSlayer.highlightBeacons, + () -> config.slayers.endermanSlayer.highlightBeacons, + newValue -> config.slayers.endermanSlayer.highlightBeacons = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.endermanSlayer.highlightNukekubiHeads")) + .binding(defaults.slayers.endermanSlayer.highlightNukekubiHeads, + () -> config.slayers.endermanSlayer.highlightNukekubiHeads, + newValue -> config.slayers.endermanSlayer.highlightNukekubiHeads = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) - //Vampire Slayer - .group(OptionGroup.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer")) - .collapsed(true) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableEffigyWaypoints")) - .binding(defaults.slayer.vampireSlayer.enableEffigyWaypoints, - () -> config.slayer.vampireSlayer.enableEffigyWaypoints, - newValue -> config.slayer.vampireSlayer.enableEffigyWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.compactEffigyWaypoints")) - .binding(defaults.slayer.vampireSlayer.compactEffigyWaypoints, - () -> config.slayer.vampireSlayer.compactEffigyWaypoints, - newValue -> config.slayer.vampireSlayer.compactEffigyWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.effigyUpdateFrequency")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.effigyUpdateFrequency.@Tooltip"))) - .binding(defaults.slayer.vampireSlayer.effigyUpdateFrequency, - () -> config.slayer.vampireSlayer.effigyUpdateFrequency, - newValue -> config.slayer.vampireSlayer.effigyUpdateFrequency = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableHolyIceIndicator")) - .binding(defaults.slayer.vampireSlayer.enableHolyIceIndicator, - () -> config.slayer.vampireSlayer.enableHolyIceIndicator, - newValue -> config.slayer.vampireSlayer.enableHolyIceIndicator = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.holyIceIndicatorTickDelay")) - .binding(defaults.slayer.vampireSlayer.holyIceIndicatorTickDelay, - () -> config.slayer.vampireSlayer.holyIceIndicatorTickDelay, - newValue -> config.slayer.vampireSlayer.holyIceIndicatorTickDelay = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.holyIceUpdateFrequency")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.holyIceUpdateFrequency.@Tooltip"))) - .binding(defaults.slayer.vampireSlayer.holyIceUpdateFrequency, - () -> config.slayer.vampireSlayer.holyIceUpdateFrequency, - newValue -> config.slayer.vampireSlayer.holyIceUpdateFrequency = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableHealingMelonIndicator")) - .binding(defaults.slayer.vampireSlayer.enableHealingMelonIndicator, - () -> config.slayer.vampireSlayer.enableHealingMelonIndicator, - newValue -> config.slayer.vampireSlayer.enableHealingMelonIndicator = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Float>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.healingMelonHealthThreshold")) - .binding(defaults.slayer.vampireSlayer.healingMelonHealthThreshold, - () -> config.slayer.vampireSlayer.healingMelonHealthThreshold, - newValue -> config.slayer.vampireSlayer.healingMelonHealthThreshold = newValue) - .controller(FloatFieldControllerBuilder::create) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableSteakStakeIndicator")) - .binding(defaults.slayer.vampireSlayer.enableSteakStakeIndicator, - () -> config.slayer.vampireSlayer.enableSteakStakeIndicator, - newValue -> config.slayer.vampireSlayer.enableSteakStakeIndicator = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.steakStakeUpdateFrequency.@Tooltip"))) - .binding(defaults.slayer.vampireSlayer.steakStakeUpdateFrequency, - () -> config.slayer.vampireSlayer.steakStakeUpdateFrequency, - newValue -> config.slayer.vampireSlayer.steakStakeUpdateFrequency = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) - .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.enableManiaIndicator")) - .binding(defaults.slayer.vampireSlayer.enableManiaIndicator, - () -> config.slayer.vampireSlayer.enableManiaIndicator, - newValue -> config.slayer.vampireSlayer.enableManiaIndicator = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) - .option(Option.<Integer>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.maniaUpdateFrequency")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.slayer.vampireSlayer.maniaUpdateFrequency.@Tooltip"))) - .binding(defaults.slayer.vampireSlayer.maniaUpdateFrequency, - () -> config.slayer.vampireSlayer.maniaUpdateFrequency, - newValue -> config.slayer.vampireSlayer.maniaUpdateFrequency = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) - .build()) - .build()) + //Vampire Slayer + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.enableEffigyWaypoints")) + .binding(defaults.slayers.vampireSlayer.enableEffigyWaypoints, + () -> config.slayers.vampireSlayer.enableEffigyWaypoints, + newValue -> config.slayers.vampireSlayer.enableEffigyWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.compactEffigyWaypoints")) + .binding(defaults.slayers.vampireSlayer.compactEffigyWaypoints, + () -> config.slayers.vampireSlayer.compactEffigyWaypoints, + newValue -> config.slayers.vampireSlayer.compactEffigyWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.effigyUpdateFrequency")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.slayer.vampireSlayer.effigyUpdateFrequency.@Tooltip"))) + .binding(defaults.slayers.vampireSlayer.effigyUpdateFrequency, + () -> config.slayers.vampireSlayer.effigyUpdateFrequency, + newValue -> config.slayers.vampireSlayer.effigyUpdateFrequency = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.enableHolyIceIndicator")) + .binding(defaults.slayers.vampireSlayer.enableHolyIceIndicator, + () -> config.slayers.vampireSlayer.enableHolyIceIndicator, + newValue -> config.slayers.vampireSlayer.enableHolyIceIndicator = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.holyIceIndicatorTickDelay")) + .binding(defaults.slayers.vampireSlayer.holyIceIndicatorTickDelay, + () -> config.slayers.vampireSlayer.holyIceIndicatorTickDelay, + newValue -> config.slayers.vampireSlayer.holyIceIndicatorTickDelay = newValue) + .controller(IntegerFieldControllerBuilder::create) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.holyIceUpdateFrequency")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.slayer.vampireSlayer.holyIceUpdateFrequency.@Tooltip"))) + .binding(defaults.slayers.vampireSlayer.holyIceUpdateFrequency, + () -> config.slayers.vampireSlayer.holyIceUpdateFrequency, + newValue -> config.slayers.vampireSlayer.holyIceUpdateFrequency = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.enableHealingMelonIndicator")) + .binding(defaults.slayers.vampireSlayer.enableHealingMelonIndicator, + () -> config.slayers.vampireSlayer.enableHealingMelonIndicator, + newValue -> config.slayers.vampireSlayer.enableHealingMelonIndicator = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Float>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.healingMelonHealthThreshold")) + .binding(defaults.slayers.vampireSlayer.healingMelonHealthThreshold, + () -> config.slayers.vampireSlayer.healingMelonHealthThreshold, + newValue -> config.slayers.vampireSlayer.healingMelonHealthThreshold = newValue) + .controller(FloatFieldControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.enableSteakStakeIndicator")) + .binding(defaults.slayers.vampireSlayer.enableSteakStakeIndicator, + () -> config.slayers.vampireSlayer.enableSteakStakeIndicator, + newValue -> config.slayers.vampireSlayer.enableSteakStakeIndicator = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.steakStakeUpdateFrequency")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.slayer.vampireSlayer.steakStakeUpdateFrequency.@Tooltip"))) + .binding(defaults.slayers.vampireSlayer.steakStakeUpdateFrequency, + () -> config.slayers.vampireSlayer.steakStakeUpdateFrequency, + newValue -> config.slayers.vampireSlayer.steakStakeUpdateFrequency = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.enableManiaIndicator")) + .binding(defaults.slayers.vampireSlayer.enableManiaIndicator, + () -> config.slayers.vampireSlayer.enableManiaIndicator, + newValue -> config.slayers.vampireSlayer.enableManiaIndicator = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.slayer.vampireSlayer.maniaUpdateFrequency")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.slayer.vampireSlayer.maniaUpdateFrequency.@Tooltip"))) + .binding(defaults.slayers.vampireSlayer.maniaUpdateFrequency, + () -> config.slayers.vampireSlayer.maniaUpdateFrequency, + newValue -> config.slayers.vampireSlayer.maniaUpdateFrequency = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 10).step(1)) + .build()) + .build()) - .build(); - } + .build(); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java new file mode 100644 index 00000000..c6936335 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java @@ -0,0 +1,360 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.skyblock.fancybars.StatusBarsConfigScreen; +import de.hysky.skyblocker.utils.render.title.TitleContainerConfigScreen; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; +import de.hysky.skyblocker.utils.waypoint.Waypoint; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.*; +import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; +import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class UIAndVisualsCategory { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals")) + + //Ungrouped Options + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.compactorDeletorPreview")) + .binding(defaults.uiAndVisuals.compactorDeletorPreview, + () -> config.uiAndVisuals.compactorDeletorPreview, + newValue -> config.uiAndVisuals.compactorDeletorPreview = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.dontStripSkinAlphaValues")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.dontStripSkinAlphaValues.@Tooltip"))) + .binding(defaults.uiAndVisuals.dontStripSkinAlphaValues, + () -> config.uiAndVisuals.dontStripSkinAlphaValues, + newValue -> config.uiAndVisuals.dontStripSkinAlphaValues = newValue) + .controller(ConfigUtils::createBooleanController) + .flag(OptionFlag.ASSET_RELOAD) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.backpackPreviewWithoutShift")) + .binding(defaults.uiAndVisuals.backpackPreviewWithoutShift, + () -> config.uiAndVisuals.backpackPreviewWithoutShift, + newValue -> config.uiAndVisuals.backpackPreviewWithoutShift = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.hideEmptyTooltips")) + .binding(defaults.uiAndVisuals.hideEmptyTooltips, + () -> config.uiAndVisuals.hideEmptyTooltips, + newValue -> config.uiAndVisuals.hideEmptyTooltips = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.fancyCraftingTable")) + .binding(defaults.uiAndVisuals.fancyCraftingTable, + () -> config.uiAndVisuals.fancyCraftingTable, + newValue -> config.uiAndVisuals.fancyCraftingTable = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.hideStatusEffectOverlay")) + .binding(defaults.uiAndVisuals.hideStatusEffectOverlay, + () -> config.uiAndVisuals.hideStatusEffectOverlay, + newValue -> config.uiAndVisuals.hideStatusEffectOverlay = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + + //Chest Value FIXME change dropdown to color controller + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.chestValue")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.chestValue.enableChestValue")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.chestValue.enableChestValue.@Tooltip"))) + .binding(defaults.uiAndVisuals.chestValue.enableChestValue, + () -> config.uiAndVisuals.chestValue.enableChestValue, + newValue -> config.uiAndVisuals.chestValue.enableChestValue = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Formatting>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.chestValue.color")) + .binding(defaults.uiAndVisuals.chestValue.color, + () -> config.uiAndVisuals.chestValue.color, + newValue -> config.uiAndVisuals.chestValue.color = newValue) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) + .build()) + .option(Option.<Formatting>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.chestValue.incompleteColor")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.chestValue.incompleteColor.@Tooltip"))) + .binding(defaults.uiAndVisuals.chestValue.incompleteColor, + () -> config.uiAndVisuals.chestValue.incompleteColor, + newValue -> config.uiAndVisuals.chestValue.incompleteColor = newValue) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) + .build()) + .build()) + + //Item Cooldown + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.itemCooldown")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.itemCooldown.enableItemCooldowns")) + .binding(defaults.uiAndVisuals.itemCooldown.enableItemCooldowns, + () -> config.uiAndVisuals.itemCooldown.enableItemCooldowns, + newValue -> config.uiAndVisuals.itemCooldown.enableItemCooldowns = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Title Container + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.titleContainer")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.titleContainer.@Tooltip"))) + .collapsed(true) + .option(Option.<Float>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.titleContainer.titleContainerScale")) + .binding(defaults.uiAndVisuals.titleContainer.titleContainerScale, + () -> config.uiAndVisuals.titleContainer.titleContainerScale, + newValue -> config.uiAndVisuals.titleContainer.titleContainerScale = newValue) + .controller(opt -> FloatFieldControllerBuilder.create(opt).range(30f, 140f)) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.titleContainer.config")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new TitleContainerConfigScreen(screen))) + .build()) + .build()) + + //Tab Hud + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.tabHudEnabled")) + .binding(defaults.uiAndVisuals.tabHud.tabHudEnabled, + () -> config.uiAndVisuals.tabHud.tabHudEnabled, + newValue -> config.uiAndVisuals.tabHud.tabHudEnabled = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.tabHudScale")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.tabHudScale.@Tooltip"))) + .binding(defaults.uiAndVisuals.tabHud.tabHudScale, + () -> config.uiAndVisuals.tabHud.tabHudScale, + newValue -> config.uiAndVisuals.tabHud.tabHudScale = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(10, 200).step(1)) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.enableHudBackground")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.enableHudBackground.@Tooltip"))) + .binding(defaults.uiAndVisuals.tabHud.enableHudBackground, + () -> config.uiAndVisuals.tabHud.enableHudBackground, + newValue -> config.uiAndVisuals.tabHud.enableHudBackground = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.plainPlayerNames")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.plainPlayerNames.@Tooltip"))) + .binding(defaults.uiAndVisuals.tabHud.plainPlayerNames, + () -> config.uiAndVisuals.tabHud.plainPlayerNames, + newValue -> config.uiAndVisuals.tabHud.plainPlayerNames = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<UIAndVisualsConfig.NameSorting>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.nameSorting")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.nameSorting.@Tooltip"))) + .binding(defaults.uiAndVisuals.tabHud.nameSorting, + () -> config.uiAndVisuals.tabHud.nameSorting, + newValue -> config.uiAndVisuals.tabHud.nameSorting = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .build()) + + // Fancy Auction House + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.fancyAuctionHouse")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.fancyAuctionHouse.enabled")) + .binding(defaults.uiAndVisuals.fancyAuctionHouse.enabled, + () -> config.uiAndVisuals.fancyAuctionHouse.enabled, + newValue -> config.uiAndVisuals.fancyAuctionHouse.enabled = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.fancyAuctionHouse.highlightUnderAvgPrice")) + .binding(defaults.uiAndVisuals.fancyAuctionHouse.highlightCheapBIN, + () -> config.uiAndVisuals.fancyAuctionHouse.highlightCheapBIN, + newValue -> config.uiAndVisuals.fancyAuctionHouse.highlightCheapBIN = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Fancy Bars + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.bars")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.bars.enableBars")) + .binding(defaults.uiAndVisuals.bars.enableBars, + () -> config.uiAndVisuals.bars.enableBars, + newValue -> config.uiAndVisuals.bars.enableBars = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(ButtonOption.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.bars.openScreen")) + .text(Text.translatable("text.skyblocker.open")) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new StatusBarsConfigScreen())) + .build()) + .build()) + + //Waypoints + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.waypoints")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.enableWaypoints")) + .binding(defaults.uiAndVisuals.waypoints.enableWaypoints, + () -> config.uiAndVisuals.waypoints.enableWaypoints, + newValue -> config.uiAndVisuals.waypoints.enableWaypoints = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Waypoint.Type>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType.@Tooltip"), + Text.translatable("skyblocker.config.uiAndVisuals.waypoints.waypointType"))) + .binding(defaults.uiAndVisuals.waypoints.waypointType, + () -> config.uiAndVisuals.waypoints.waypointType, + newValue -> config.uiAndVisuals.waypoints.waypointType = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) + .build()) + + //Teleport Overlays + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay.enableTeleportOverlays")) + .binding(defaults.uiAndVisuals.teleportOverlay.enableTeleportOverlays, + () -> config.uiAndVisuals.teleportOverlay.enableTeleportOverlays, + newValue -> config.uiAndVisuals.teleportOverlay.enableTeleportOverlays = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay.enableWeirdTransmission")) + .binding(defaults.uiAndVisuals.teleportOverlay.enableWeirdTransmission, + () -> config.uiAndVisuals.teleportOverlay.enableWeirdTransmission, + newValue -> config.uiAndVisuals.teleportOverlay.enableWeirdTransmission = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay.enableInstantTransmission")) + .binding(defaults.uiAndVisuals.teleportOverlay.enableInstantTransmission, + () -> config.uiAndVisuals.teleportOverlay.enableInstantTransmission, + newValue -> config.uiAndVisuals.teleportOverlay.enableInstantTransmission = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay.enableEtherTransmission")) + .binding(defaults.uiAndVisuals.teleportOverlay.enableEtherTransmission, + () -> config.uiAndVisuals.teleportOverlay.enableEtherTransmission, + newValue -> config.uiAndVisuals.teleportOverlay.enableEtherTransmission = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay.enableSinrecallTransmission")) + .binding(defaults.uiAndVisuals.teleportOverlay.enableSinrecallTransmission, + () -> config.uiAndVisuals.teleportOverlay.enableSinrecallTransmission, + newValue -> config.uiAndVisuals.teleportOverlay.enableSinrecallTransmission = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.teleportOverlay.enableWitherImpact")) + .binding(defaults.uiAndVisuals.teleportOverlay.enableWitherImpact, + () -> config.uiAndVisuals.teleportOverlay.enableWitherImpact, + newValue -> config.uiAndVisuals.teleportOverlay.enableWitherImpact = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Search overlay + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.enableBazaar")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.enableBazaar.@Tooltip"))) + .binding(defaults.uiAndVisuals.searchOverlay.enableBazaar, + () -> config.uiAndVisuals.searchOverlay.enableBazaar, + newValue -> config.uiAndVisuals.searchOverlay.enableBazaar = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.enableAuctionHouse")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.enableAuctionHouse.@Tooltip"))) + .binding(defaults.uiAndVisuals.searchOverlay.enableAuctionHouse, + () -> config.uiAndVisuals.searchOverlay.enableAuctionHouse, + newValue -> config.uiAndVisuals.searchOverlay.enableAuctionHouse = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.keepPreviousSearches")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.keepPreviousSearches.@Tooltip"))) + .binding(defaults.uiAndVisuals.searchOverlay.keepPreviousSearches, + () -> config.uiAndVisuals.searchOverlay.keepPreviousSearches, + newValue -> config.uiAndVisuals.searchOverlay.keepPreviousSearches = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.maxSuggestions")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.maxSuggestions.@Tooltip"))) + .binding(defaults.uiAndVisuals.searchOverlay.maxSuggestions, + () -> config.uiAndVisuals.searchOverlay.maxSuggestions, + newValue -> config.uiAndVisuals.searchOverlay.maxSuggestions = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 5).step(1)) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.historyLength")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.historyLength.@Tooltip"))) + .binding(defaults.uiAndVisuals.searchOverlay.historyLength, + () -> config.uiAndVisuals.searchOverlay.historyLength, + newValue -> config.uiAndVisuals.searchOverlay.historyLength = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 5).step(1)) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.enableCommands")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.searchOverlay.enableCommands.@Tooltip"))) + .binding(defaults.uiAndVisuals.searchOverlay.enableCommands, + () -> config.uiAndVisuals.searchOverlay.enableCommands, + newValue -> config.uiAndVisuals.searchOverlay.enableCommands = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + //Flame Overlay + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.flameOverlay")) + .collapsed(true) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.flameOverlay.flameHeight")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.flameOverlay.flameHeight.@Tooltip"))) + .binding(defaults.uiAndVisuals.flameOverlay.flameHeight, + () -> config.uiAndVisuals.flameOverlay.flameHeight, + newValue -> config.uiAndVisuals.flameOverlay.flameHeight = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1)) + .build()) + .option(Option.<Integer>createBuilder() + .name(Text.translatable("skyblocker.config.uiAndVisuals.flameOverlay.flameOpacity")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.flameOverlay.flameOpacity.@Tooltip"))) + .binding(defaults.uiAndVisuals.flameOverlay.flameOpacity, + () -> config.uiAndVisuals.flameOverlay.flameOpacity, + newValue -> config.uiAndVisuals.flameOverlay.flameOpacity = newValue) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1)) + .build()) + .build()) + + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java new file mode 100644 index 00000000..f857ad61 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java @@ -0,0 +1,61 @@ +package de.hysky.skyblocker.config.configs; + +import de.hysky.skyblocker.utils.chat.ChatFilterResult; +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class ChatConfig { + @SerialEntry + public ChatFilterResult hideAbility = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideHeal = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideAOTE = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideImplosion = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideAds = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideCombo = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideAutopet = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideShowOff = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideToggleSkyMall = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideMimicKill = ChatFilterResult.PASS; + + @SerialEntry + public ChatFilterResult hideDeath = ChatFilterResult.PASS; + + @SerialEntry + public boolean hideMana = false; + + @SerialEntry + public ChatFilterResult hideDicer = ChatFilterResult.PASS; + + @SerialEntry + public ChatRuleConfig chatRuleConfig = new ChatRuleConfig(); + + public static class ChatRuleConfig { + @SerialEntry + public int announcementLength = 60; + @SerialEntry + public int announcementScale = 3; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java new file mode 100644 index 00000000..8dd93aee --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java @@ -0,0 +1,35 @@ +package de.hysky.skyblocker.config.configs; + +import de.hysky.skyblocker.utils.waypoint.Waypoint; +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class CrimsonIsleConfig { + @SerialEntry + public Kuudra kuudra = new Kuudra(); + + public static class Kuudra { + @SerialEntry + public boolean supplyWaypoints = true; + + @SerialEntry + public boolean fuelWaypoints = true; + + @SerialEntry + public Waypoint.Type suppliesAndFuelWaypointType = Waypoint.Type.WAYPOINT; + + @SerialEntry + public boolean ballistaBuildWaypoints = true; + + @SerialEntry + public boolean safeSpotWaypoints = true; + + @SerialEntry + public boolean pearlWaypoints = true; + + @SerialEntry + public boolean noArrowPoisonWarning = true; + + @SerialEntry + public int arrowPoisonThreshold = 32; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java new file mode 100644 index 00000000..2c99dc56 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java @@ -0,0 +1,289 @@ +package de.hysky.skyblocker.config.configs; + +import de.hysky.skyblocker.utils.waypoint.Waypoint; +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import net.minecraft.util.Formatting; + +public class DungeonsConfig { + @SerialEntry + public boolean fancyPartyFinder = true; + + @SerialEntry + public boolean croesusHelper = true; + + @SerialEntry + public boolean playerSecretsTracker = false; + + @SerialEntry + public boolean starredMobGlow = false; + + @SerialEntry + public boolean starredMobBoundingBoxes = true; + + @SerialEntry + public boolean allowDroppingProtectedItems = false; + + @SerialEntry + public DungeonMap dungeonMap = new DungeonMap(); + + @SerialEntry + public PuzzleSolvers puzzleSolvers = new PuzzleSolvers(); + + @SerialEntry + public TheProfessor theProfessor = new TheProfessor(); + + @SerialEntry + public Livid livid = new Livid(); + + @SerialEntry + public Terminals terminals = new Terminals(); + + @SerialEntry + public SecretWaypoints secretWaypoints = new SecretWaypoints(); + + @SerialEntry + public MimicMessage mimicMessage = new MimicMessage(); + + @SerialEntry + public DoorHighlight doorHighlight = new DoorHighlight(); + + @SerialEntry + public DungeonScore dungeonScore = new DungeonScore(); + + @SerialEntry + public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit(); + + public static class DungeonMap { + @SerialEntry + public boolean enableMap = true; + + @SerialEntry + public float mapScaling = 1f; + + @SerialEntry + public int mapX = 2; + + @SerialEntry + public int mapY = 2; + } + + public static class PuzzleSolvers { + @SerialEntry + public boolean solveTicTacToe = true; + + @SerialEntry + public boolean solveThreeWeirdos = true; + + @SerialEntry + public boolean creeperSolver = true; + + @SerialEntry + public boolean solveWaterboard = true; + + @SerialEntry + public boolean blazeSolver = true; + + @SerialEntry + public boolean solveBoulder = true; + + @SerialEntry + public boolean solveIceFill = true; + + @SerialEntry + public boolean solveSilverfish = true; + + @SerialEntry + public boolean solveTrivia = true; + } + + public static class TheProfessor { + @SerialEntry + public boolean fireFreezeStaffTimer = true; + + @SerialEntry + public boolean floor3GuardianHealthDisplay = true; + } + + public static class Livid { + @SerialEntry + public boolean enableLividColorGlow = true; + + @SerialEntry + public boolean enableLividColorText = true; + + @SerialEntry + public boolean enableLividColorTitle = true; + + @SerialEntry + public String lividColorText = "The livid color is [color]"; + } + + public static class Terminals { + @SerialEntry + public boolean solveColor = true; + + @SerialEntry + public boolean solveOrder = true; + + @SerialEntry + public boolean solveStartsWith = true; + } + + public static class SecretWaypoints { + @SerialEntry + public boolean enableRoomMatching = true; + + @SerialEntry + public boolean enableSecretWaypoints = true; + + @SerialEntry + public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; + + @SerialEntry + public boolean showSecretText = true; + + @SerialEntry + public boolean enableEntranceWaypoints = true; + + @SerialEntry + public boolean enableSuperboomWaypoints = true; + + @SerialEntry + public boolean enableChestWaypoints = true; + + @SerialEntry + public boolean enableItemWaypoints = true; + + @SerialEntry + public boolean enableBatWaypoints = true; + + @SerialEntry + public boolean enableWitherWaypoints = true; + + @SerialEntry + public boolean enableLeverWaypoints = true; + + @SerialEntry + public boolean enableFairySoulWaypoints = true; + + @SerialEntry + public boolean enableStonkWaypoints = true; + + @SerialEntry + public boolean enableAotvWaypoints = true; + + @SerialEntry + public boolean enablePearlWaypoints = true; + + @SerialEntry + public boolean enableDefaultWaypoints = true; + } + + public static class MimicMessage { + @SerialEntry + public boolean sendMimicMessage = true; + + @SerialEntry + public String mimicMessage = "Mimic dead!"; + } + + public static class DoorHighlight { + @SerialEntry + public boolean enableDoorHighlight = true; + + @SerialEntry + public Type doorHighlightType = Type.OUTLINED_HIGHLIGHT; + + public enum Type { + HIGHLIGHT, + OUTLINED_HIGHLIGHT, + OUTLINE; + + @Override + public String toString() { + return switch (this) { + case HIGHLIGHT -> "Highlight"; + case OUTLINED_HIGHLIGHT -> "Outlined Highlight"; + case OUTLINE -> "Outline"; + }; + } + } + } + + public static class DungeonScore { + @SerialEntry + public boolean enableDungeonScore270Message = false; + + @SerialEntry + public boolean enableDungeonScore270Title = false; + + @SerialEntry + public boolean enableDungeonScore270Sound = false; + + @SerialEntry + public String dungeonScore270Message = "270 Score Reached!"; + + @SerialEntry + public boolean enableDungeonScore300Message = true; + + @SerialEntry + public boolean enableDungeonScore300Title = true; + + @SerialEntry + public boolean enableDungeonScore300Sound = true; + + @SerialEntry + public String dungeonScore300Message = "300 Score Reached!"; + + @SerialEntry + public boolean enableDungeonCryptsMessage = true; + + @SerialEntry + public int dungeonCryptsMessageThreshold = 250; + + @SerialEntry + public String dungeonCryptsMessage = "We only have [crypts] crypts out of 5, we need more!"; + + @SerialEntry + public boolean enableScoreHUD = true; + + @SerialEntry + public int scoreX = 29; + + @SerialEntry + public int scoreY = 134; + + @SerialEntry + public float scoreScaling = 1f; + } + + public static class DungeonChestProfit { + @SerialEntry + public boolean enableProfitCalculator = true; + + @SerialEntry + public boolean includeKismet = false; + + @SerialEntry + public boolean includeEssence = true; + + @SerialEntry + public boolean croesusProfit = true; + + @SerialEntry + public int neutralThreshold = 1000; + + @SerialEntry + public Formatting neutralColor = Formatting.DARK_GRAY; + + @SerialEntry + public Formatting profitColor = Formatting.DARK_GREEN; + + @SerialEntry + public Formatting lossColor = Formatting.RED; + + @SerialEntry + public Formatting incompleteColor = Formatting.BLUE; + } + +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/FarmingConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/FarmingConfig.java new file mode 100644 index 00000000..b2faf005 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/FarmingConfig.java @@ -0,0 +1,37 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class FarmingConfig { + + @SerialEntry + public Garden garden = new Garden(); + + public static class Garden { + @SerialEntry + public FarmingHud farmingHud = new FarmingHud(); + + @SerialEntry + public boolean dicerTitlePrevent = true; + + @SerialEntry + public boolean visitorHelper = true; + + @SerialEntry + public boolean lockMouseTool = false; + + @SerialEntry + public boolean lockMouseGroundOnly = false; + } + + public static class FarmingHud { + @SerialEntry + public boolean enableHud = true; + + @SerialEntry + public int x; + + @SerialEntry + public int y; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java new file mode 100644 index 00000000..56e110b6 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/GeneralConfig.java @@ -0,0 +1,220 @@ +package de.hysky.skyblocker.config.configs; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.skyblock.item.CustomArmorAnimatedDyes; +import de.hysky.skyblocker.skyblock.item.CustomArmorTrims; +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +import java.util.ArrayList; +import java.util.List; + +public class GeneralConfig { + @SerialEntry + public boolean enableTips = true; + + @SerialEntry + public boolean acceptReparty = true; + + @SerialEntry + public Shortcuts shortcuts = new Shortcuts(); + + @SerialEntry + public QuiverWarning quiverWarning = new QuiverWarning(); + + @SerialEntry + public ItemList itemList = new ItemList(); + + @SerialEntry + public ItemTooltip itemTooltip = new ItemTooltip(); + + @SerialEntry + public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); + + @SerialEntry + public ItemProtection itemProtection = new ItemProtection(); + + @SerialEntry + public WikiLookup wikiLookup = new WikiLookup(); + + @SerialEntry + public SpecialEffects specialEffects = new SpecialEffects(); + + @SerialEntry + public Hitbox hitbox = new Hitbox(); + + @SerialEntry + public List<Integer> lockedSlots = new ArrayList<>(); + + //maybe put this 5 somewhere else + @SerialEntry + public ObjectOpenHashSet<String> protectedItems = new ObjectOpenHashSet<>(); + + @SerialEntry + public Object2ObjectOpenHashMap<String, Text> customItemNames = new Object2ObjectOpenHashMap<>(); + + @SerialEntry + public Object2IntOpenHashMap<String> customDyeColors = new Object2IntOpenHashMap<>(); + + @SerialEntry + public Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customArmorTrims = new Object2ObjectOpenHashMap<>(); + + @SerialEntry + public Object2ObjectOpenHashMap<String, CustomArmorAnimatedDyes.AnimatedDye> customAnimatedDyes = new Object2ObjectOpenHashMap<>(); + + public static class Shortcuts { + @SerialEntry + public boolean enableShortcuts = true; + + @SerialEntry + public boolean enableCommandShortcuts = true; + + @SerialEntry + public boolean enableCommandArgShortcuts = true; + } + + + public static class QuiverWarning { + @SerialEntry + public boolean enableQuiverWarning = true; + + @SerialEntry + public boolean enableQuiverWarningInDungeons = true; + + @SerialEntry + public boolean enableQuiverWarningAfterDungeon = true; + } + + public static class ItemList { + @SerialEntry + public boolean enableItemList = true; + } + + public static class ItemTooltip { + @SerialEntry + public boolean enableNPCPrice = true; + + @SerialEntry + public boolean enableMotesPrice = true; + + @SerialEntry + public boolean enableAvgBIN = true; + + @SerialEntry + public Average avg = Average.THREE_DAY; + + @SerialEntry + public boolean enableLowestBIN = true; + + @SerialEntry + public boolean enableBazaarPrice = true; + + @SerialEntry + public boolean enableObtainedDate = true; + + @SerialEntry + public boolean enableMuseumInfo = true; + + @SerialEntry + public boolean enableExoticTooltip = true; + + @SerialEntry + public boolean enableAccessoriesHelper = true; + + @SerialEntry + public boolean dungeonQuality = true; + } + + public enum Average { + ONE_DAY, THREE_DAY, BOTH; + + @Override + public String toString() { + return I18n.translate("skyblocker.config.general.itemTooltip.avg." + name()); + } + } + + public static class ItemInfoDisplay { + @SerialEntry + public boolean attributeShardInfo = true; + + @SerialEntry + public boolean itemRarityBackgrounds = false; + + @SerialEntry + public RarityBackgroundStyle itemRarityBackgroundStyle = RarityBackgroundStyle.CIRCULAR; + + @SerialEntry + public float itemRarityBackgroundsOpacity = 1f; + } + + public enum RarityBackgroundStyle { + CIRCULAR(new Identifier(SkyblockerMod.NAMESPACE, "item_rarity_background_circular")), + SQUARE(new Identifier(SkyblockerMod.NAMESPACE, "item_rarity_background_square")); + + public final Identifier tex; + + RarityBackgroundStyle(Identifier tex) { + this.tex = tex; + } + + @Override + public String toString() { + return switch (this) { + case CIRCULAR -> "Circular"; + case SQUARE -> "Square"; + }; + } + } + + public static class ItemProtection { + @SerialEntry + public SlotLockStyle slotLockStyle = SlotLockStyle.FANCY; + } + + public enum SlotLockStyle { + CLASSIC(new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png")), + FANCY(new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/fancy_slot_lock.png")); + + public final Identifier tex; + + SlotLockStyle(Identifier tex) { + this.tex = tex; + } + + @Override + public String toString() { + return switch (this) { + case CLASSIC -> "Classic"; + case FANCY -> "FANCY"; + }; + } + } + + public static class WikiLookup { + @SerialEntry + public boolean enableWikiLookup = true; + + @SerialEntry + public boolean officialWiki = true; + } + + public static class SpecialEffects { + @SerialEntry + public boolean rareDungeonDropEffects = true; + } + + public static class Hitbox { + @SerialEntry + public boolean oldFarmlandHitbox = false; + + @SerialEntry + public boolean oldLeverHitbox = false; + } + +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java new file mode 100644 index 00000000..2abff6ac --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java @@ -0,0 +1,65 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class HelperConfig { + + @SerialEntry + public boolean enableNewYearCakesHelper = true; + + @SerialEntry + public MythologicalRitual mythologicalRitual = new MythologicalRitual(); + + @SerialEntry + public Experiments experiments = new Experiments(); + + @SerialEntry + public Fishing fishing = new Fishing(); + + @SerialEntry + public FairySouls fairySouls = new FairySouls(); + + public static class MythologicalRitual { + @SerialEntry + public boolean enableMythologicalRitualHelper = true; + } + + public static class Experiments { + @SerialEntry + public boolean enableChronomatronSolver = true; + + @SerialEntry + public boolean enableSuperpairsSolver = true; + + @SerialEntry + public boolean enableUltrasequencerSolver = true; + } + + public static class Fishing { + @SerialEntry + public boolean enableFishingHelper = true; + + @SerialEntry + public boolean enableFishingTimer = false; + + @SerialEntry + public boolean changeTimerColor = true; + + @SerialEntry + public float fishingTimerScale = 1f; + + @SerialEntry + public boolean hideOtherPlayersRods = false; + } + + public static class FairySouls { + @SerialEntry + public boolean enableFairySoulsHelper = false; + + @SerialEntry + public boolean highlightFoundSouls = true; + + @SerialEntry + public boolean highlightOnlyNearbySouls = false; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java new file mode 100644 index 00000000..fe845e55 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java @@ -0,0 +1,100 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class MiningConfig { + @SerialEntry + public boolean enableDrillFuel = true; + + @SerialEntry + public DwarvenMines dwarvenMines = new DwarvenMines(); + + @SerialEntry + public DwarvenHud dwarvenHud = new DwarvenHud(); + + @SerialEntry + public CrystalHollows crystalHollows = new CrystalHollows(); + + @SerialEntry + public CrystalsHud crystalsHud = new CrystalsHud(); + + @SerialEntry + public CrystalsWaypoints crystalsWaypoints = new CrystalsWaypoints(); + + public static class DwarvenMines { + @SerialEntry + public boolean solveFetchur = true; + + @SerialEntry + public boolean solvePuzzler = true; + } + + public static class DwarvenHud { + @SerialEntry + public boolean enabledCommissions = true; + + @SerialEntry + public boolean enabledPowder = true; + + @SerialEntry + public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE; + + @SerialEntry + public int commissionsX = 10; + + @SerialEntry + public int commissionsY = 10; + + @SerialEntry + public int powderX = 10; + + @SerialEntry + public int powderY = 70; + } + + public static class CrystalHollows { + @SerialEntry + public boolean metalDetectorHelper = true; + } + + public static class CrystalsHud { + @SerialEntry + public boolean enabled = true; + + @SerialEntry + public boolean showLocations = true; + + @SerialEntry + public int locationSize = 8; + + @SerialEntry + public int x = 10; + + @SerialEntry + public int y = 130; + + @SerialEntry + public float mapScaling = 1f; + } + + public static class CrystalsWaypoints { + @SerialEntry + public boolean enabled = true; + + @SerialEntry + public boolean findInChat = true; + } + + public enum DwarvenHudStyle { + SIMPLE, FANCY, CLASSIC; + + @Override + public String toString() { + return switch (this) { + case SIMPLE -> "Simple"; + case FANCY -> "Fancy"; + case CLASSIC -> "Classic"; + }; + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/MiscConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/MiscConfig.java new file mode 100644 index 00000000..919a26d8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/MiscConfig.java @@ -0,0 +1,33 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import net.minecraft.client.resource.language.I18n; + +public class MiscConfig { + + @SerialEntry + public RichPresence richPresence = new RichPresence(); + + public static class RichPresence { + @SerialEntry + public boolean enableRichPresence = false; + + @SerialEntry + public Info info = Info.LOCATION; + + @SerialEntry + public boolean cycleMode = false; + + @SerialEntry + public String customMessage = "Playing Skyblock"; + } + + public enum Info { + PURSE, BITS, LOCATION; + + @Override + public String toString() { + return I18n.translate("skyblocker.config.misc.richPresence.info." + name()); + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/OtherLocationsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/OtherLocationsConfig.java new file mode 100644 index 00000000..5bc1c4b7 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/OtherLocationsConfig.java @@ -0,0 +1,79 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class OtherLocationsConfig { + + @SerialEntry + public Barn barn = new Barn(); + + @SerialEntry + public Rift rift = new Rift(); + + @SerialEntry + public TheEnd end = new TheEnd(); + + @SerialEntry + public SpidersDen spidersDen = new SpidersDen(); + + public static class Barn { + @SerialEntry + public boolean solveHungryHiker = true; + + @SerialEntry + public boolean solveTreasureHunter = true; + } + + public static class Rift { + @SerialEntry + public boolean mirrorverseWaypoints = true; + + @SerialEntry + public boolean blobbercystGlow = true; + + @SerialEntry + public boolean enigmaSoulWaypoints = false; + + @SerialEntry + public boolean highlightFoundEnigmaSouls = true; + + @SerialEntry + public int mcGrubberStacks = 0; + } + + public static class TheEnd { + @SerialEntry + public boolean enableEnderNodeHelper = true; + + @SerialEntry + public boolean hudEnabled = true; + + @SerialEntry + public boolean zealotKillsEnabled = true; + + @SerialEntry + public boolean protectorLocationEnabled = true; + + @SerialEntry + public boolean waypoint = true; + + @SerialEntry + public int x = 10; + + @SerialEntry + public int y = 10; + } + + public static class SpidersDen { + @SerialEntry + public Relics relics = new Relics(); + } + + public static class Relics { + @SerialEntry + public boolean enableRelicsHelper = false; + + @SerialEntry + public boolean highlightFoundRelics = true; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java new file mode 100644 index 00000000..2c4347b6 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/QuickNavigationConfig.java @@ -0,0 +1,181 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class QuickNavigationConfig { + @SerialEntry + public boolean enableQuickNav = true; + + @SerialEntry + public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); + + @SerialEntry + public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); + + /* REGEX Explanation + * "Pets" : simple match on letters + * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" + */ + @SerialEntry + public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets"); + + /* REGEX Explanation + * "Wardrobe" : simple match on letters + * " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)" + */ + @SerialEntry + public QuickNavItem button4 = new QuickNavItem(true, + new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", + "/wardrobe"); + + @SerialEntry + public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-2081424676,-57521078,-2073572414,158072763],Properties:{textures:[{Value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}}}"), + "Sack of Sacks", "/sacks"); + + /* REGEX Explanation + * "(?:Rift )?" : optional match on the non-capturing group "Rift " + * "Storage" : simple match on letters + * "(?: \\([12]\\/2\\))?" : optional match on the non-capturing group " (1/2)" or " (2/2)" + */ + @SerialEntry + public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), + "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); + + @SerialEntry + public QuickNavItem button7 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}"), + "none", "/hub"); + + @SerialEntry + public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), + "none", "/warp dungeon_hub"); + + @SerialEntry + public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-562285948,532499670,-1705302742,775653035],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjVkZjU1NTkyNjQzMGQ1ZDc1YWRlZDIxZGQ5NjE5Yjc2YzViN2NhMmM3ZjU0MDE0NDA1MjNkNTNhOGJjZmFhYiJ9fX0=\"}]}}}"), + "Visit prtl", "/visit prtl"); + + @SerialEntry + public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", + "/etable"); + + + @SerialEntry + public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); + + @SerialEntry + public QuickNavItem button12 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft"); + + public static class QuickNav { + @SerialEntry + public boolean enableQuickNav = true; + + @SerialEntry + public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); + + @SerialEntry + public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); + + /* REGEX Explanation + * "Pets" : simple match on letters + * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" + */ + @SerialEntry + public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets"); + + /* REGEX Explanation + * "Wardrobe" : simple match on letters + * " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)" + */ + @SerialEntry + public QuickNavItem button4 = new QuickNavItem(true, + new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", + "/wardrobe"); + + @SerialEntry + public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-2081424676,-57521078,-2073572414,158072763],Properties:{textures:[{Value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}}}"), + "Sack of Sacks", "/sacks"); + + /* REGEX Explanation + * "(?:Rift )?" : optional match on the non-capturing group "Rift " + * "Storage" : simple match on letters + * "(?: \\([12]\\/2\\))?" : optional match on the non-capturing group " (1/2)" or " (2/2)" + */ + @SerialEntry + public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), + "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); + + @SerialEntry + public QuickNavItem button7 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}"), + "none", "/hub"); + + @SerialEntry + public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), + "none", "/warp dungeon_hub"); + + @SerialEntry + public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-562285948,532499670,-1705302742,775653035],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjVkZjU1NTkyNjQzMGQ1ZDc1YWRlZDIxZGQ5NjE5Yjc2YzViN2NhMmM3ZjU0MDE0NDA1MjNkNTNhOGJjZmFhYiJ9fX0=\"}]}}}"), + "Visit prtl", "/visit prtl"); + + @SerialEntry + public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", + "/etable"); + + + @SerialEntry + public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); + + @SerialEntry + public QuickNavItem button12 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft"); + } + + public static class QuickNavItem { + public QuickNavItem(Boolean render, ItemData itemData, String uiTitle, String clickEvent) { + this.render = render; + this.item = itemData; + this.clickEvent = clickEvent; + this.uiTitle = uiTitle; + } + + @SerialEntry + public Boolean render; + + @SerialEntry + public ItemData item; + + @SerialEntry + public String uiTitle; + + @SerialEntry + public String clickEvent; + } + + public static class ItemData { + public ItemData(String id, int count, String nbt) { + this.id = id; + this.count = count; + this.nbt = nbt; + } + + public ItemData(String id) { + this.id = id; + this.count = 1; + this.nbt = ""; + } + + @SerialEntry + public String id; + + @SerialEntry + public int count; + + @SerialEntry + public String nbt; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java new file mode 100644 index 00000000..ff6c2275 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/SlayersConfig.java @@ -0,0 +1,60 @@ +package de.hysky.skyblocker.config.configs; + +import dev.isxander.yacl3.config.v2.api.SerialEntry; + +public class SlayersConfig { + @SerialEntry + public EndermanSlayer endermanSlayer = new EndermanSlayer(); + + @SerialEntry + public VampireSlayer vampireSlayer = new VampireSlayer(); + + public static class EndermanSlayer { + @SerialEntry + public boolean enableYangGlyphsNotification = true; + + @SerialEntry + public boolean highlightBeacons = true; + + @SerialEntry + public boolean highlightNukekubiHeads = true; + } + + public static class VampireSlayer { + @SerialEntry + public boolean enableEffigyWaypoints = true; + + @SerialEntry + public boolean compactEffigyWaypoints; + + @SerialEntry + public int effigyUpdateFrequency = 5; + + @SerialEntry + public boolean enableHolyIceIndicator = true; + + @SerialEntry + public int holyIceIndicatorTickDelay = 10; + + @SerialEntry + public int holyIceUpdateFrequency = 5; + + @SerialEntry + public boolean enableHealingMelonIndicator = true; + + @SerialEntry + public float healingMelonHealthThreshold = 4f; + + @SerialEntry + public boolean enableSteakStakeIndicator = true; + + @SerialEntry + public int steakStakeUpdateFrequency = 5; + + @SerialEntry + public boolean enableManiaIndicator = true; + + @SerialEntry + public int maniaUpdateFrequency = 5; + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java new file mode 100644 index 00000000..267dde14 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java @@ -0,0 +1,250 @@ +package de.hysky.skyblocker.config.configs; + +import de.hysky.skyblocker.utils.waypoint.Waypoint; +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import net.minecraft.util.Formatting; + +import java.util.ArrayList; +import java.util.List; + +public class UIAndVisualsConfig { + @SerialEntry + public boolean compactorDeletorPreview = true; + + @SerialEntry + public boolean dontStripSkinAlphaValues = true; + + @SerialEntry + public boolean backpackPreviewWithoutShift = false; + + @SerialEntry + public boolean hideEmptyTooltips = true; + + @SerialEntry + public boolean fancyCraftingTable = true; + + @SerialEntry + public boolean hideStatusEffectOverlay = false; + + @SerialEntry + public ChestValue chestValue = new ChestValue(); + + @SerialEntry + public ItemCooldown itemCooldown = new ItemCooldown(); + + @SerialEntry + public TitleContainer titleContainer = new TitleContainer(); + + @SerialEntry + public TabHudConf tabHud = new TabHudConf(); + + @SerialEntry + public FancyAuctionHouse fancyAuctionHouse = new FancyAuctionHouse(); + + @SerialEntry + public Bars bars = new Bars(); + + @SerialEntry + public Waypoints waypoints = new Waypoints(); + + @SerialEntry + public TeleportOverlay teleportOverlay = new TeleportOverlay(); + + @SerialEntry + public SearchOverlay searchOverlay = new SearchOverlay(); + + @SerialEntry + public FlameOverlay flameOverlay = new FlameOverlay(); + + public static class ChestValue { + @SerialEntry + public boolean enableChestValue = true; + + @SerialEntry + public Formatting color = Formatting.DARK_GREEN; + + @SerialEntry + public Formatting incompleteColor = Formatting.BLUE; + } + + public static class ItemCooldown { + @SerialEntry + public boolean enableItemCooldowns = true; + } + + public static class TitleContainer { + @SerialEntry + public float titleContainerScale = 100; + + @SerialEntry + public int x = 540; + + @SerialEntry + public int y = 10; + + @SerialEntry + public Direction direction = Direction.HORIZONTAL; + + @SerialEntry + public Alignment alignment = Alignment.MIDDLE; + } + + public enum Direction { + HORIZONTAL, VERTICAL; + + @Override + public String toString() { + return switch (this) { + case HORIZONTAL -> "Horizontal"; + case VERTICAL -> "Vertical"; + }; + } + } + + public enum Alignment { + LEFT, RIGHT, MIDDLE; + + @Override + public String toString() { + return switch (this) { + case LEFT -> "Left"; + case RIGHT -> "Right"; + case MIDDLE -> "Middle"; + }; + } + } + + public static class TabHudConf { + @SerialEntry + public boolean tabHudEnabled = true; + + @SerialEntry + public int tabHudScale = 100; + + @SerialEntry + public boolean enableHudBackground = true; + + @SerialEntry + public boolean plainPlayerNames = false; + + @SerialEntry + public NameSorting nameSorting = NameSorting.DEFAULT; + } + + public enum NameSorting { + DEFAULT, ALPHABETICAL; + + @Override + public String toString() { + return switch (this) { + case DEFAULT -> "Default"; + case ALPHABETICAL -> "Alphabetical"; + }; + } + } + + public static class FancyAuctionHouse { + @SerialEntry + public boolean enabled = true; + + @SerialEntry + public boolean highlightCheapBIN = true; + } + + public static class Bars { + @SerialEntry + public boolean enableBars = true; + + // Kept in for backwards compatibility, remove if needed + @SerialEntry + public OldBarPositions barPositions = new OldBarPositions(); + } + + /** + * Backwards compat + */ + public static class OldBarPositions { + @SerialEntry + public OldBarPosition healthBarPosition = OldBarPosition.LAYER1; + + @SerialEntry + public OldBarPosition manaBarPosition = OldBarPosition.LAYER1; + + @SerialEntry + public OldBarPosition defenceBarPosition = OldBarPosition.LAYER1; + + @SerialEntry + public OldBarPosition experienceBarPosition = OldBarPosition.LAYER1; + + } + + /** + * Backwards compat + */ + public enum OldBarPosition { + LAYER1, LAYER2, RIGHT, NONE + } + + public static class Waypoints { + @SerialEntry + public boolean enableWaypoints = true; + + @SerialEntry + public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; + } + + public static class TeleportOverlay { + @SerialEntry + public boolean enableTeleportOverlays = true; + + @SerialEntry + public boolean enableWeirdTransmission = true; + + @SerialEntry + public boolean enableInstantTransmission = true; + + @SerialEntry + public boolean enableEtherTransmission = true; + + @SerialEntry + public boolean enableSinrecallTransmission = true; + + @SerialEntry + public boolean enableWitherImpact = true; + } + + public static class SearchOverlay { + @SerialEntry + public boolean enableBazaar = true; + + @SerialEntry + public boolean enableAuctionHouse = true; + + @SerialEntry + public boolean keepPreviousSearches = false; + + @SerialEntry + public int maxSuggestions = 3; + + @SerialEntry + public int historyLength = 3; + + @SerialEntry + public boolean enableCommands = false; + + @SerialEntry + public List<String> bazaarHistory = new ArrayList<>(); + + @SerialEntry + public List<String> auctionHistory = new ArrayList<>(); + } + + public static class FlameOverlay { + @SerialEntry + public int flameHeight = 100; + + @SerialEntry + public int flameOpacity = 100; + } + +} diff --git a/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java index 53151826..69f33aa0 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/AbstractInventoryScreenMixin.java @@ -14,6 +14,6 @@ public class AbstractInventoryScreenMixin { @Inject(method = "drawStatusEffects", at = @At("HEAD"), cancellable = true) private void skyblocker$dontDrawStatusEffects(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.hideStatusEffectOverlay) ci.cancel(); + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay) ci.cancel(); } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java index d4c930d2..0da6abfb 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayerEntityMixin.java @@ -38,7 +38,7 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity @Inject(method = "dropSelectedItem", at = @At("HEAD"), cancellable = true) public void skyblocker$dropSelectedItem(CallbackInfoReturnable<Boolean> cir) { if (Utils.isOnSkyblock() && (ItemProtection.isItemProtected(this.getInventory().getMainHandStack()) || HotbarSlotLock.isLocked(this.getInventory().selectedSlot)) - && (!SkyblockerConfigManager.get().locations.dungeons.allowDroppingProtectedItems || !Utils.isInDungeons())) { + && (!SkyblockerConfigManager.get().dungeons.allowDroppingProtectedItems || !Utils.isInDungeons())) { cir.setReturnValue(false); } } @@ -64,13 +64,13 @@ public abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity // Search Overlay if (client.currentScreen != null) { - if (SkyblockerConfigManager.get().general.searchOverlay.enableAuctionHouse && client.currentScreen.getTitle().getString().toLowerCase().contains("auction")) { + if (SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableAuctionHouse && client.currentScreen.getTitle().getString().toLowerCase().contains("auction")) { if (sign.getText(front).getMessage(3, false).getString().equalsIgnoreCase("enter query")) { SearchOverManager.updateSign(sign, front, true); client.setScreen(new OverlayScreen(Text.of(""))); callbackInfo.cancel(); } - } else if (SkyblockerConfigManager.get().general.searchOverlay.enableBazaar && client.currentScreen.getTitle().getString().toLowerCase().contains("bazaar")) { + } else if (SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableBazaar && client.currentScreen.getTitle().getString().toLowerCase().contains("bazaar")) { if (sign.getText(front).getMessage(3, false).getString().equalsIgnoreCase("enter query")) { SearchOverManager.updateSign(sign, front, false); client.setScreen(new OverlayScreen(Text.of(""))); diff --git a/src/main/java/de/hysky/skyblocker/mixins/DataTrackerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/DataTrackerMixin.java index 77bb09bb..a192f448 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/DataTrackerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/DataTrackerMixin.java @@ -32,7 +32,7 @@ public abstract class DataTrackerMixin { @SuppressWarnings("ConstantValue") @Inject(method = "writeUpdatedEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/data/DataTracker;copyToFrom(Lnet/minecraft/entity/data/DataTracker$Entry;Lnet/minecraft/entity/data/DataTracker$SerializedEntry;)V")) private <T> void skyblocker$onWriteUpdatedEntries(CallbackInfo ci, @Local DataTracker.Entry<T> entry, @Local DataTracker.SerializedEntry<T> serializedEntry) { - if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.enableYangGlyphsNotification && entry.getData() == EndermanEntityAccessor.getCARRIED_BLOCK() && entry.get() instanceof Optional<?> value && value.isPresent() && value.get() instanceof BlockState state && state.isOf(Blocks.BEACON) && ((Optional<?>) serializedEntry.value()).isEmpty()) { + if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayers.endermanSlayer.enableYangGlyphsNotification && entry.getData() == EndermanEntityAccessor.getCARRIED_BLOCK() && entry.get() instanceof Optional<?> value && value.isPresent() && value.get() instanceof BlockState state && state.isOf(Blocks.BEACON) && ((Optional<?>) serializedEntry.value()).isEmpty()) { MinecraftClient client = MinecraftClient.getInstance(); if (trackedEntity instanceof Entity entity && MobGlow.getArmorStands(entity).stream().anyMatch(armorStand -> armorStand.getName().getString().contains(client.getSession().getUsername()))) { client.inGameHud.setTitleTicks(5, 20, 10); diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java index 9ae25d85..04e6749c 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java @@ -109,7 +109,7 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen @Inject(at = @At("HEAD"), method = "mouseClicked") public void skyblocker$mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) { - if (SkyblockerConfigManager.get().locations.garden.visitorHelper && (Utils.getLocationRaw().equals("garden") && !getTitle().getString().contains("Logbook") || getTitle().getString().startsWith("Bazaar"))) + if (SkyblockerConfigManager.get().farming.garden.visitorHelper && (Utils.getLocationRaw().equals("garden") && !getTitle().getString().contains("Logbook") || getTitle().getString().startsWith("Bazaar"))) VisitorHelper.onMouseClicked(mouseX, mouseY, button, this.textRenderer); } @@ -120,18 +120,18 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen if (!Utils.isOnSkyblock()) return; // Hide Empty Tooltips - if (SkyblockerConfigManager.get().general.hideEmptyTooltips && stack.getName().getString().equals(" ")) { + if (SkyblockerConfigManager.get().uiAndVisuals.hideEmptyTooltips && stack.getName().getString().equals(" ")) { ci.cancel(); } // Backpack Preview - boolean shiftDown = SkyblockerConfigManager.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); + boolean shiftDown = SkyblockerConfigManager.get().uiAndVisuals.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); if (shiftDown && getTitle().getString().equals("Storage") && focusedSlot.inventory != client.player.getInventory() && BackpackPreview.renderPreview(context, this, focusedSlot.getIndex(), x, y)) { ci.cancel(); } // Compactor Preview - if (SkyblockerConfigManager.get().general.compactorDeletorPreview) { + if (SkyblockerConfigManager.get().uiAndVisuals.compactorDeletorPreview) { Matcher matcher = CompactorDeletorPreview.NAME.matcher(ItemUtils.getItemId(stack)); if (matcher.matches() && CompactorDeletorPreview.drawPreview(context, stack, matcher.group("type"), matcher.group("size"), x, y)) { ci.cancel(); @@ -185,9 +185,9 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); // Prevent clicks on filler items - if (SkyblockerConfigManager.get().general.hideEmptyTooltips && FILLER_ITEMS.contains(stack.getName().getString()) && + if (SkyblockerConfigManager.get().uiAndVisuals.hideEmptyTooltips && FILLER_ITEMS.contains(stack.getName().getString()) && // Allow clicks in Ultrasequencer and Superpairs - (!UltrasequencerSolver.INSTANCE.getName().matcher(title).matches() || SkyblockerConfigManager.get().general.experiments.enableUltrasequencerSolver)) { + (!UltrasequencerSolver.INSTANCE.getName().matcher(title).matches() || SkyblockerConfigManager.get().helpers.experiments.enableUltrasequencerSolver)) { ci.cancel(); return; } diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java index da87c2a3..fde54425 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenProviderMixin.java @@ -34,10 +34,10 @@ public interface HandledScreenProviderMixin<T extends ScreenHandler> { switch (screenHandler) { // Better party finder - case GenericContainerScreenHandler ignored when SkyblockerConfigManager.get().general.betterPartyFinder && nameLowercase.contains("select tier") -> PartyFinderScreen.isInKuudraPartyFinder = true; - case GenericContainerScreenHandler ignored when SkyblockerConfigManager.get().general.betterPartyFinder && nameLowercase.contains("catacombs") -> PartyFinderScreen.isInKuudraPartyFinder = false; + case GenericContainerScreenHandler ignored when SkyblockerConfigManager.get().dungeons.fancyPartyFinder && nameLowercase.contains("select tier") -> PartyFinderScreen.isInKuudraPartyFinder = true; + case GenericContainerScreenHandler ignored when SkyblockerConfigManager.get().dungeons.fancyPartyFinder && nameLowercase.contains("catacombs") -> PartyFinderScreen.isInKuudraPartyFinder = false; - case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.betterPartyFinder && PartyFinderScreen.possibleInventoryNames.contains(nameLowercase) -> { + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().dungeons.fancyPartyFinder && PartyFinderScreen.possibleInventoryNames.contains(nameLowercase) -> { if (client.currentScreen != null) { String lowerCase = client.currentScreen.getTitle().getString().toLowerCase(); if (lowerCase.contains("group builder")) return; @@ -55,7 +55,7 @@ public interface HandledScreenProviderMixin<T extends ScreenHandler> { } // Fancy AH - case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && (nameLowercase.contains("auctions browser") || nameLowercase.contains("auctions: ")) -> { + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.fancyAuctionHouse.enabled && (nameLowercase.contains("auctions browser") || nameLowercase.contains("auctions: ")) -> { AuctionHouseScreenHandler auctionHouseScreenHandler = AuctionHouseScreenHandler.of(containerScreenHandler, false); client.player.currentScreenHandler = auctionHouseScreenHandler; @@ -67,7 +67,7 @@ public interface HandledScreenProviderMixin<T extends ScreenHandler> { ci.cancel(); } - case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && nameLowercase.contains("auction view") -> { + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.fancyAuctionHouse.enabled && nameLowercase.contains("auction view") -> { AuctionHouseScreenHandler auctionHouseScreenHandler = AuctionHouseScreenHandler.of(containerScreenHandler, true); client.player.currentScreenHandler = auctionHouseScreenHandler; @@ -79,14 +79,14 @@ public interface HandledScreenProviderMixin<T extends ScreenHandler> { ci.cancel(); } - case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyAuctionHouse.enabled && (nameLowercase.contains("confirm purchase") || nameLowercase.contains("confirm bid")) && client.currentScreen instanceof AuctionViewScreen auctionViewScreen -> { + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.fancyAuctionHouse.enabled && (nameLowercase.contains("confirm purchase") || nameLowercase.contains("confirm bid")) && client.currentScreen instanceof AuctionViewScreen auctionViewScreen -> { client.setScreen(auctionViewScreen.getConfirmPurchasePopup(name)); client.player.currentScreenHandler = containerScreenHandler; ci.cancel(); } // Fancy crafting table - case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().general.fancyCraftingTable && name.getString().toLowerCase().contains("craft item") -> { + case GenericContainerScreenHandler containerScreenHandler when SkyblockerConfigManager.get().uiAndVisuals.fancyCraftingTable && name.getString().toLowerCase().contains("craft item") -> { SkyblockCraftingTableScreenHandler skyblockCraftingTableScreenHandler = new SkyblockCraftingTableScreenHandler(containerScreenHandler, player.getInventory()); client.player.currentScreenHandler = skyblockCraftingTableScreenHandler; client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableScreenHandler, player.getInventory(), Text.literal("Craft Item"))); diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java index 897b98b3..b939b401 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InGameHudMixin.java @@ -79,7 +79,7 @@ public abstract class InGameHudMixin { @Inject(method = { "renderExperienceBar", "renderExperienceLevel" }, at = @At("HEAD"), cancellable = true) private void skyblocker$renderExperienceBar(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.bars.enableBars && !Utils.isInTheRift()) + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars && !Utils.isInTheRift()) ci.cancel(); } @@ -93,13 +93,13 @@ public abstract class InGameHudMixin { @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) private void skyblocker$renderMountHealth(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.bars.enableBars && !Utils.isInTheRift()) + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars && !Utils.isInTheRift()) ci.cancel(); } @Inject(method = "renderStatusEffectOverlay", at = @At("HEAD"), cancellable = true) private void skyblocker$dontRenderStatusEffects(CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.hideStatusEffectOverlay) ci.cancel(); + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.hideStatusEffectOverlay) ci.cancel(); } @ModifyExpressionValue(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getAttackCooldownProgress(F)F")) @@ -116,7 +116,7 @@ public abstract class InGameHudMixin { @Inject(method = "setTitle", at = @At("HEAD"), cancellable = true) private void skyblocker$dicerTitlePrevent(Text title, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().locations.garden.dicerTitlePrevent && title != null && DICER_TITLE_BLACKLIST.matcher(title.getString()).matches()) { + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().farming.garden.dicerTitlePrevent && title != null && DICER_TITLE_BLACKLIST.matcher(title.getString()).matches()) { ci.cancel(); } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java index c7704558..d3b79efe 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java @@ -11,12 +11,12 @@ public class InGameOverlayRendererMixin { @ModifyArg(method = "renderFireOverlay", index = 2, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/BufferBuilder;vertex(Lorg/joml/Matrix4f;FFF)Lnet/minecraft/client/render/VertexConsumer;")) private static float configureFlameHeight(float y) { - return y - (0.5f - ((float) SkyblockerConfigManager.get().general.flameOverlay.flameHeight / 200.0f)); + return y - (0.5f - ((float) SkyblockerConfigManager.get().uiAndVisuals.flameOverlay.flameHeight / 200.0f)); } @ModifyArg(method = "renderFireOverlay", index = 3, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/VertexConsumer;color(FFFF)Lnet/minecraft/client/render/VertexConsumer;")) private static float configureFlameOpacity(float opacity) { - return opacity - (0.8f - ((float) SkyblockerConfigManager.get().general.flameOverlay.flameOpacity / 125.0f)); + return opacity - (0.8f - ((float) SkyblockerConfigManager.get().uiAndVisuals.flameOverlay.flameOpacity / 125.0f)); } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java index 3ebfc439..878a93ac 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ItemStackMixin.java @@ -87,7 +87,7 @@ public abstract class ItemStackMixin { @Unique private boolean skyblocker$shouldProcess() { - return Utils.isOnSkyblock() && SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel && ItemUtils.hasCustomDurability((ItemStack) (Object) this); + return Utils.isOnSkyblock() && SkyblockerConfigManager.get().mining.enableDrillFuel && ItemUtils.hasCustomDurability((ItemStack) (Object) this); } @Unique diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java index a1a9116c..a96a7727 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerListHudMixin.java @@ -28,7 +28,7 @@ public class PlayerListHudMixin { @Inject(at = @At("HEAD"), method = "render", cancellable = true) public void skyblocker$renderTabHud(CallbackInfo info, @Local(argsOnly = true) DrawContext context, @Local(argsOnly = true) int w) { - if (!Utils.isInDungeons() || !SkyblockerConfigManager.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { + if (!Utils.isInDungeons() || !SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) { return; } @@ -38,7 +38,7 @@ public class PlayerListHudMixin { } int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); - float scale = SkyblockerConfigManager.get().general.tabHud.tabHudScale / 100f; + float scale = SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudScale / 100f; w = (int) (w / scale); h = (int) (h / scale); diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java index f9e2c8cd..828d32e3 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java @@ -35,6 +35,6 @@ public class PlayerSkinTextureMixin { @WrapWithCondition(method = "remapTexture", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PlayerSkinTexture;stripAlpha(Lnet/minecraft/client/texture/NativeImage;IIII)V")) private boolean skyblocker$dontStripAlphaValues(NativeImage image, int x1, int y1, int x2, int y2) { - return !(SkyblockerConfigManager.get().general.dontStripSkinAlphaValues && this.isSkyblockSkinTexture); + return !(SkyblockerConfigManager.get().uiAndVisuals.dontStripSkinAlphaValues && this.isSkyblockSkinTexture); } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java b/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java index 71e7f56f..3b7bc8be 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/RenderFishMixin.java @@ -19,7 +19,7 @@ public abstract class RenderFishMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) private void skyblocker$render(FishingBobberEntity fishingBobberEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { //if rendered bobber is not the players and option to hide others is enabled do not render the bobber - if (Utils.isOnSkyblock() && fishingBobberEntity.getPlayerOwner() != MinecraftClient.getInstance().player && SkyblockerConfigManager.get().general.fishing.hideOtherPlayersRods) { + if (Utils.isOnSkyblock() && fishingBobberEntity.getPlayerOwner() != MinecraftClient.getInstance().player && SkyblockerConfigManager.get().helpers.fishing.hideOtherPlayersRods) { ci.cancel(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java index e04a30ef..7f8b2c71 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/ChestValue.java @@ -1,8 +1,9 @@ package de.hysky.skyblocker.skyblock; import com.google.gson.JsonObject; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.DungeonsConfig; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; import de.hysky.skyblocker.mixins.accessors.ScreenAccessor; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; @@ -42,12 +43,12 @@ public class ChestValue { Text title = screen.getTitle(); String titleString = title.getString(); if (DUNGEON_CHESTS.contains(titleString)) { - if (SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator) { + if (SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator) { ScreenEvents.afterTick(screen).register(screen_ -> ((ScreenAccessor) screen).setTitle(getDungeonChestProfit(genericContainerScreen.getScreenHandler(), title, titleString, client)) ); } - } else if (SkyblockerConfigManager.get().general.chestValue.enableChestValue && !titleString.equals("SkyBlock Menu")) { + } else if (SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue && !titleString.equals("SkyBlock Menu")) { Screens.getButtons(screen).add(ButtonWidget .builder(Text.literal("$"), buttonWidget -> { Screens.getButtons(screen).remove(buttonWidget); @@ -56,7 +57,7 @@ public class ChestValue { ); }) .dimensions(((HandledScreenAccessor) genericContainerScreen).getX() + ((HandledScreenAccessor) genericContainerScreen).getBackgroundWidth() - 16, ((HandledScreenAccessor) genericContainerScreen).getY() + 4, 12, 12) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.general.chestValue.@Tooltip"))) .build() ); } @@ -95,7 +96,7 @@ public class ChestValue { } //Essence price - if (name.contains("Essence") && SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.includeEssence) { + if (name.contains("Essence") && SkyblockerConfigManager.get().dungeons.dungeonChestProfit.includeEssence) { Matcher matcher = ESSENCE_PATTERN.matcher(name); if (matcher.matches()) { @@ -131,7 +132,7 @@ public class ChestValue { } } - if (SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.includeKismet && usedKismet) { + if (SkyblockerConfigManager.get().dungeons.dungeonChestProfit.includeKismet && usedKismet) { LongBooleanPair kismetPriceData = getItemPrice("KISMET_FEATHER"); if (!kismetPriceData.rightBoolean()) hasIncompleteData = true; @@ -210,12 +211,12 @@ public class ChestValue { } static Text getProfitText(long profit, boolean hasIncompleteData) { - SkyblockerConfig.DungeonChestProfit config = SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit; + DungeonsConfig.DungeonChestProfit config = SkyblockerConfigManager.get().dungeons.dungeonChestProfit; return Text.literal((profit > 0 ? " +" : ' ') + FORMATTER.format(profit) + " Coins").formatted(hasIncompleteData ? config.incompleteColor : (Math.abs(profit) < config.neutralThreshold) ? config.neutralColor : (profit > 0) ? config.profitColor : config.lossColor); } static Text getValueText(long value, boolean hasIncompleteData) { - SkyblockerConfig.ChestValue config = SkyblockerConfigManager.get().general.chestValue; + UIAndVisualsConfig.ChestValue config = SkyblockerConfigManager.get().uiAndVisuals.chestValue; return Text.literal(' ' + FORMATTER.format(value) + " Coins").formatted(hasIncompleteData ? config.incompleteColor : config.color); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java index 7676860f..79239825 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/FishingHelper.java @@ -61,7 +61,7 @@ public class FishingHelper { public static void onSound(PlaySoundS2CPacket packet) { String path = packet.getSound().value().getId().getPath(); - if (SkyblockerConfigManager.get().general.fishing.enableFishingHelper && startTimeFish != 0 && System.currentTimeMillis() >= startTimeFish + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) { + if (SkyblockerConfigManager.get().helpers.fishing.enableFishingHelper && startTimeFish != 0 && System.currentTimeMillis() >= startTimeFish + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) { ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null && player.fishHook != null) { Vec3d soundToFishHook = player.fishHook.getPos().subtract(packet.getX(), 0, packet.getZ()); @@ -76,15 +76,15 @@ public class FishingHelper { } public static void render(WorldRenderContext context) { - if (SkyblockerConfigManager.get().general.fishing.enableFishingTimer && startTime != 0) { + if (SkyblockerConfigManager.get().helpers.fishing.enableFishingTimer && startTime != 0) { ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null && player.fishHook != null) { float time = (int) ((System.currentTimeMillis() - startTime) / 100f) / 10f; //leave 1dp in seconds - float scale = SkyblockerConfigManager.get().general.fishing.fishingTimerScale; + float scale = SkyblockerConfigManager.get().helpers.fishing.fishingTimerScale; Vec3d pos = player.fishHook.getPos().add(0, 0.4 + scale / 10, 0); Text text; - if (time >= 20 && SkyblockerConfigManager.get().general.fishing.changeTimerColor) { + if (time >= 20 && SkyblockerConfigManager.get().helpers.fishing.changeTimerColor) { text = Text.literal(String.valueOf(time)).formatted(Formatting.GREEN); } else { text = Text.literal(String.valueOf(time)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java index c31e2107..717bd8d6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/StatusBarTracker.java @@ -72,10 +72,10 @@ public class StatusBarTracker { } private Text onOverlayMessage(Text text, boolean overlay) { - if (!overlay || !Utils.isOnSkyblock() || !SkyblockerConfigManager.get().general.bars.enableBars || Utils.isInTheRift()) { + if (!overlay || !Utils.isOnSkyblock() || !SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars || Utils.isInTheRift()) { return text; } - return Text.of(update(text.getString(), SkyblockerConfigManager.get().messages.hideMana)); + return Text.of(update(text.getString(), SkyblockerConfigManager.get().chat.hideMana)); } public String update(String actionBar, boolean filterManaUse) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java index f7f9836c..042b126b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/TeleportOverlay.java @@ -25,7 +25,7 @@ public class TeleportOverlay { } private static void render(WorldRenderContext wrc) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) { + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) { ItemStack heldItem = client.player.getMainHandStack(); String itemId = ItemTooltip.getInternalNameFromNBT(heldItem, true); NbtCompound customData = ItemUtils.getCustomData(heldItem); @@ -33,34 +33,34 @@ public class TeleportOverlay { if (itemId != null) { switch (itemId) { case "ASPECT_OF_THE_LEECH_1" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableWeirdTransmission) { + if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableWeirdTransmission) { render(wrc, 3); } } case "ASPECT_OF_THE_LEECH_2" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableWeirdTransmission) { + if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableWeirdTransmission) { render(wrc, 4); } } case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && customData != null && customData.getInt("ethermerge") == 1) { + if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && customData != null && customData.getInt("ethermerge") == 1) { render(wrc, customData, 57); - } else if (SkyblockerConfigManager.get().general.teleportOverlay.enableInstantTransmission) { + } else if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableInstantTransmission) { render(wrc, customData, 8); } } case "ETHERWARP_CONDUIT" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission) { + if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableEtherTransmission) { render(wrc, customData, 57); } } case "SINSEEKER_SCYTHE" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableSinrecallTransmission) { + if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableSinrecallTransmission) { render(wrc, customData, 4); } } case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> { - if (SkyblockerConfigManager.get().general.teleportOverlay.enableWitherImpact) { + if (SkyblockerConfigManager.get().uiAndVisuals.teleportOverlay.enableWitherImpact) { render(wrc, 10); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java index 9b2080a3..747ce9b4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java @@ -17,7 +17,7 @@ public class NewYearCakeBagHelper extends ContainerSolver { @Override protected boolean isEnabled() { - return SkyblockerConfigManager.get().general.enableNewYearCakesHelper; + return SkyblockerConfigManager.get().helpers.enableNewYearCakesHelper; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java index 2fdcf3b4..c403a81b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java @@ -50,7 +50,7 @@ public class NewYearCakesHelper extends ContainerSolver { @Override protected boolean isEnabled() { - return SkyblockerConfigManager.get().general.enableNewYearCakesHelper; + return SkyblockerConfigManager.get().helpers.enableNewYearCakesHelper; } public boolean addCake(int year) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java index 10823418..fd69d886 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java @@ -171,7 +171,7 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI<AuctionHouseS @Override protected void drawSlot(DrawContext context, Slot slot) { - if (SkyblockerConfigManager.get().general.fancyAuctionHouse.highlightCheapBIN && slot.hasStack() && isSlotHighlighted.getOrDefault(slot.id, false)) { + if (SkyblockerConfigManager.get().uiAndVisuals.fancyAuctionHouse.highlightCheapBIN && slot.hasStack() && isSlotHighlighted.getOrDefault(slot.id, false)) { context.drawBorder(slot.x, slot.y, 16, 16, new Color(0, 255, 0, 100).getRGB()); } super.drawSlot(context, slot); @@ -284,7 +284,7 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI<AuctionHouseS } else categoryTabWidget.setToggled(false); } } else if (slotId > 9 && slotId < (handler.getRows() - 1) * 9 && slotId % 9 > 1 && slotId % 9 < 8) { - if (!SkyblockerConfigManager.get().general.fancyAuctionHouse.highlightCheapBIN) return; + if (!SkyblockerConfigManager.get().uiAndVisuals.fancyAuctionHouse.highlightCheapBIN) return; List<Text> tooltip = ItemUtils.getLore(stack); for (int k = tooltip.size() - 1; k >= 0; k--) { Text text = tooltip.get(k); @@ -351,7 +351,7 @@ public class AuctionBrowserScreen extends AbstractCustomHypixelGUI<AuctionHouseS assert client != null; try { List<Text> tooltip = ItemUtils.getLore(stack); - String str = tooltip.get(0).getString().trim(); + String str = tooltip.getFirst().getString().trim(); str = str.substring(1, str.length() - 1); // remove parentheses String[] parts = str.split("/"); // split the string currentPage = Integer.parseInt(parts[0].replace(",", "")); // parse current page diff --git a/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java b/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java index 4a0213c1..828b68c3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/barn/HungryHiker.java @@ -19,7 +19,7 @@ public class HungryHiker extends ChatPatternListener { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().locations.barn.solveHungryHiker ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + return SkyblockerConfigManager.get().otherLocations.barn.solveHungryHiker ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/barn/TreasureHunter.java b/src/main/java/de/hysky/skyblocker/skyblock/barn/TreasureHunter.java index 032c7df9..3b41af31 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/barn/TreasureHunter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/barn/TreasureHunter.java @@ -18,7 +18,7 @@ public class TreasureHunter extends ChatPatternListener { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().locations.barn.solveTreasureHunter ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + return SkyblockerConfigManager.get().otherLocations.barn.solveTreasureHunter ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java index d61a0b59..b8d409ae 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleAnnouncementScreen.java @@ -27,7 +27,7 @@ public class ChatRuleAnnouncementScreen { * @param tickDelta difference from last render to remove from timer */ private static void render(DrawContext context, float tickDelta) { - int scale = SkyblockerConfigManager.get().messages.chatRuleConfig.announcementScale; + int scale = SkyblockerConfigManager.get().chat.chatRuleConfig.announcementScale; //decrement timer timer -= tickDelta; //scale text up and center @@ -43,6 +43,6 @@ public class ChatRuleAnnouncementScreen { protected static void setText(Text newText) { text = newText; - timer = SkyblockerConfigManager.get().messages.chatRuleConfig.announcementLength; + timer = SkyblockerConfigManager.get().chat.chatRuleConfig.announcementLength; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java index c99aeed8..cb6e8cc8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRuleConfigScreen.java @@ -24,13 +24,13 @@ public class ChatRuleConfigScreen extends Screen { private static final int SPACER_Y = 25; private final Map<MutableText, SoundEvent> soundsLookup = Map.ofEntries( - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.pling"), SoundEvents.BLOCK_NOTE_BLOCK_PLING.value()), - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.cave"), SoundEvents.AMBIENT_CAVE.value()), - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.zombie"), SoundEvents.ENTITY_ZOMBIE_AMBIENT), - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.crit"), SoundEvents.ENTITY_PLAYER_ATTACK_CRIT), - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.arrowHit"), SoundEvents.ENTITY_ARROW_HIT_PLAYER), - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.amethyst"), SoundEvents.BLOCK_AMETHYST_BLOCK_HIT), - entry(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.anvil"), SoundEvents.BLOCK_ANVIL_LAND) + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.pling"), SoundEvents.BLOCK_NOTE_BLOCK_PLING.value()), + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.cave"), SoundEvents.AMBIENT_CAVE.value()), + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.zombie"), SoundEvents.ENTITY_ZOMBIE_AMBIENT), + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.crit"), SoundEvents.ENTITY_PLAYER_ATTACK_CRIT), + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.arrowHit"), SoundEvents.ENTITY_ARROW_HIT_PLAYER), + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.amethyst"), SoundEvents.BLOCK_AMETHYST_BLOCK_HIT), + entry(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.anvil"), SoundEvents.BLOCK_ANVIL_LAND) ); private int buttonWidth = 75; @@ -69,7 +69,7 @@ public class ChatRuleConfigScreen extends Screen { private final Screen parent; public ChatRuleConfigScreen(Screen parent, int chatRuleIndex) { - super(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen")); + super(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen")); this.chatRuleIndex = chatRuleIndex; this.chatRule = ChatRulesHandler.chatRuleList.get(chatRuleIndex); this.parent = parent; @@ -101,63 +101,63 @@ public class ChatRuleConfigScreen extends Screen { int lineXOffset; nameLabelTextPos = currentPos; - lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.name")) + SPACER_X; + lineXOffset = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.name")) + SPACER_X; nameInput = new TextFieldWidget(client.textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 100, 20, Text.of("")); nameInput.setText(chatRule.getName()); - nameInput.setTooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.name.@Tooltip"))); + nameInput.setTooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.name.@Tooltip"))); currentPos = IntIntPair.of(currentPos.leftInt(), currentPos.rightInt() + SPACER_Y); inputsLabelTextPos = currentPos; currentPos = IntIntPair.of(currentPos.leftInt() + 10, currentPos.rightInt() + SPACER_Y); filterLabelTextPos = currentPos; - lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.filter")) + SPACER_X; + lineXOffset = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.filter")) + SPACER_X; filterInput = new TextFieldWidget(client.textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of("")); filterInput.setMaxLength(96); filterInput.setText(chatRule.getFilter()); - filterInput.setTooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.filter.@Tooltip"))); + filterInput.setTooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.filter.@Tooltip"))); currentPos = IntIntPair.of(currentPos.leftInt(),currentPos.rightInt() + SPACER_Y); lineXOffset = 0; partialMatchTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset, currentPos.rightInt()); - lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.partialMatch")) + SPACER_X; + lineXOffset += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.partialMatch")) + SPACER_X; partialMatchToggle = ButtonWidget.builder(enabledButtonText(chatRule.getPartialMatch()), a -> { chatRule.setPartialMatch(!chatRule.getPartialMatch()); partialMatchToggle.setMessage(enabledButtonText(chatRule.getPartialMatch())); }) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.partialMatch.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.partialMatch.@Tooltip"))) .build(); lineXOffset += buttonWidth + SPACER_X; regexTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset,currentPos.rightInt()); - lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.regex")) + SPACER_X; + lineXOffset += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.regex")) + SPACER_X; regexToggle = ButtonWidget.builder(enabledButtonText(chatRule.getRegex()), a -> { chatRule.setRegex(!chatRule.getRegex()); regexToggle.setMessage(enabledButtonText(chatRule.getRegex())); }) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.regex.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.regex.@Tooltip"))) .build(); lineXOffset += buttonWidth + SPACER_X; ignoreCaseTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset,currentPos.rightInt()); - lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.ignoreCase")) + SPACER_X; + lineXOffset += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.ignoreCase")) + SPACER_X; ignoreCaseToggle = ButtonWidget.builder(enabledButtonText(chatRule.getIgnoreCase()), a -> { chatRule.setIgnoreCase(!chatRule.getIgnoreCase()); ignoreCaseToggle.setMessage(enabledButtonText(chatRule.getIgnoreCase())); }) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.ignoreCase.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.ignoreCase.@Tooltip"))) .build(); currentPos = IntIntPair.of(currentPos.leftInt(), currentPos.rightInt() + SPACER_Y); locationLabelTextPos = currentPos; - lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.locations")) + SPACER_X; + lineXOffset = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.locations")) + SPACER_X; locationsInput = new TextFieldWidget(client.textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of("")); locationsInput.setText(chatRule.getValidLocations()); - MutableText locationToolTip = Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.locations.@Tooltip"); + MutableText locationToolTip = Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.locations.@Tooltip"); locationToolTip.append("\n"); ChatRulesHandler.locationsList.forEach(location -> locationToolTip.append(" " + location + ",\n")); locationsInput.setTooltip(Tooltip.of(locationToolTip)); @@ -167,42 +167,42 @@ public class ChatRuleConfigScreen extends Screen { currentPos = IntIntPair.of(currentPos.leftInt(), currentPos.rightInt() + SPACER_Y); hideMessageTextPos = currentPos; - lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.hideMessage")) + SPACER_X; + lineXOffset = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.hideMessage")) + SPACER_X; hideMessageToggle = ButtonWidget.builder(enabledButtonText(chatRule.getHideMessage()), a -> { chatRule.setHideMessage(!chatRule.getHideMessage()); hideMessageToggle.setMessage(enabledButtonText(chatRule.getHideMessage())); }) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.hideMessage.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.hideMessage.@Tooltip"))) .build(); lineXOffset += buttonWidth + SPACER_X; actionBarTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset,currentPos.rightInt()); - lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.actionBar")) + SPACER_X; + lineXOffset += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.actionBar")) + SPACER_X; actionBarToggle = ButtonWidget.builder(enabledButtonText(chatRule.getShowActionBar()), a -> { chatRule.setShowActionBar(!chatRule.getShowActionBar()); actionBarToggle.setMessage(enabledButtonText(chatRule.getShowActionBar())); }) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.actionBar.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.actionBar.@Tooltip"))) .build(); lineXOffset = 0; currentPos = IntIntPair.of(currentPos.leftInt(), currentPos.rightInt() + SPACER_Y); announcementTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset, currentPos.rightInt()); - lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.announcement")) + SPACER_X; + lineXOffset += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.announcement")) + SPACER_X; announcementToggle = ButtonWidget.builder(enabledButtonText(chatRule.getShowAnnouncement()), a -> { chatRule.setShowAnnouncement(!chatRule.getShowAnnouncement()); announcementToggle.setMessage(enabledButtonText(chatRule.getShowAnnouncement())); }) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.announcement.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.announcement.@Tooltip"))) .build(); lineXOffset += buttonWidth + SPACER_X; customSoundLabelTextPos = IntIntPair.of(currentPos.leftInt() + lineXOffset,currentPos.rightInt()); - lineXOffset += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds")) + SPACER_X; + lineXOffset += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds")) + SPACER_X; soundsToggle = ButtonWidget.builder(getSoundName(), a -> { currentSoundIndex += 1; if (currentSoundIndex == soundsLookup.size()) { @@ -217,18 +217,18 @@ public class ChatRuleConfigScreen extends Screen { }}) .position(currentPos.leftInt() + lineXOffset, currentPos.rightInt()) .size(buttonWidth,20) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.@Tooltip"))) .build(); currentPos = IntIntPair.of(currentPos.leftInt(), currentPos.rightInt() + SPACER_Y); replaceMessageLabelTextPos = currentPos; - lineXOffset = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace")) + SPACER_X; + lineXOffset = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.replace")) + SPACER_X; replaceMessageInput = new TextFieldWidget(client.textRenderer, currentPos.leftInt() + lineXOffset, currentPos.rightInt(), 200, 20, Text.of("")); replaceMessageInput.setMaxLength(96); - replaceMessageInput.setTooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace.@Tooltip"))); + replaceMessageInput.setTooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.replace.@Tooltip"))); replaceMessageInput.setText(chatRule.getReplaceMessage()); - ButtonWidget finishButton = ButtonWidget.builder(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.finish"), a -> close()) + ButtonWidget finishButton = ButtonWidget.builder(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.finish"), a -> close()) .position(this.width - buttonWidth - SPACER_Y, this.height - SPACER_Y) .size(buttonWidth, 20) .build(); @@ -266,9 +266,9 @@ public class ChatRuleConfigScreen extends Screen { private int getMaxUsedWidth() { if (client == null) return 0; //text - int total = client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.partialMatch")); - total += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.regex")); - total += client.textRenderer.getWidth(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.ignoreCase")); + int total = client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.partialMatch")); + total += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.regex")); + total += client.textRenderer.getWidth(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.ignoreCase")); //space total += SPACER_X * 6; //button width @@ -287,9 +287,9 @@ public class ChatRuleConfigScreen extends Screen { private Text enabledButtonText(boolean enabled) { if (enabled) { - return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.true").withColor(Color.GREEN.getRGB()); + return Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.true").withColor(Color.GREEN.getRGB()); } else { - return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.false").withColor(Color.RED.getRGB()); + return Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.false").withColor(Color.RED.getRGB()); } } @@ -300,19 +300,19 @@ public class ChatRuleConfigScreen extends Screen { //draw labels ands text int yOffset = (SPACER_Y - this.textRenderer.fontHeight) / 2; - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.inputs"), inputsLabelTextPos.leftInt(), inputsLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.name"), nameLabelTextPos.leftInt(), nameLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.filter"), filterLabelTextPos.leftInt(), filterLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.partialMatch"), partialMatchTextPos.leftInt(), partialMatchTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.regex"), regexTextPos.leftInt(), regexTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.ignoreCase"), ignoreCaseTextPos.leftInt(), ignoreCaseTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.locations"), locationLabelTextPos.leftInt(), locationLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.outputs"), outputsLabelTextPos.leftInt(), outputsLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.hideMessage"), hideMessageTextPos.leftInt(), hideMessageTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.actionBar"), actionBarTextPos.leftInt(), actionBarTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.announcement"), announcementTextPos.leftInt(), announcementTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds"), customSoundLabelTextPos.leftInt(), customSoundLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); - context.drawTextWithShadow(this.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.replace"), replaceMessageLabelTextPos.leftInt(), replaceMessageLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.inputs"), inputsLabelTextPos.leftInt(), inputsLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.name"), nameLabelTextPos.leftInt(), nameLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.filter"), filterLabelTextPos.leftInt(), filterLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.partialMatch"), partialMatchTextPos.leftInt(), partialMatchTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.regex"), regexTextPos.leftInt(), regexTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.ignoreCase"), ignoreCaseTextPos.leftInt(), ignoreCaseTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.locations"), locationLabelTextPos.leftInt(), locationLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.outputs"), outputsLabelTextPos.leftInt(), outputsLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.hideMessage"), hideMessageTextPos.leftInt(), hideMessageTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.actionBar"), actionBarTextPos.leftInt(), actionBarTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.announcement"), announcementTextPos.leftInt(), announcementTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds"), customSoundLabelTextPos.leftInt(), customSoundLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); + context.drawTextWithShadow(this.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.replace"), replaceMessageLabelTextPos.leftInt(), replaceMessageLabelTextPos.rightInt() + yOffset, 0xFFFFFFFF); } /** @@ -337,7 +337,7 @@ public class ChatRuleConfigScreen extends Screen { private MutableText getSoundName() { if (currentSoundIndex == -1) { - return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.sounds.none"); + return Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.sounds.none"); } return soundsLookup.keySet().stream().toList().get(currentSoundIndex); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java index 747e826b..29c052b8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java @@ -82,9 +82,9 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig @Override public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleName"), width / 2 - 125, y + 5, 0xFFFFFFFF); - context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleEnabled"), width / 2, y + 5, 0xFFFFFFFF); - context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.modify"), width / 2 + 100, y + 5, 0xFFFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleName"), width / 2 - 125, y + 5, 0xFFFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.ruleEnabled"), width / 2, y + 5, 0xFFFFFFFF); + context.drawCenteredTextWithShadow(client.textRenderer, Text.translatable("skyblocker.config.chat.chatRules.screen.modify"), width / 2 + 100, y + 5, 0xFFFFFFFF); } } @@ -115,17 +115,17 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig .position(width / 2 - 25, 5) .build(); - openConfigButton = ButtonWidget.builder(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.editRule"), a -> { + openConfigButton = ButtonWidget.builder(Text.translatable("skyblocker.config.chat.chatRules.screen.editRule"), a -> { client.setScreen(new ChatRuleConfigScreen(screen, chatRuleIndex)); }) .size(50, 20) .position(width / 2 + 45, 5) - .tooltip(Tooltip.of(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.editRule.@Tooltip"))) + .tooltip(Tooltip.of(Text.translatable("skyblocker.config.chat.chatRules.screen.editRule.@Tooltip"))) .build(); deleteButton = ButtonWidget.builder(Text.translatable("selectServer.delete"), a -> { oldScrollAmount = getScrollAmount(); - client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.deleteQuestion"), Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.deleteWarning", chatRule.getName()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); + client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.config.chat.chatRules.screen.deleteQuestion"), Text.translatable("skyblocker.config.chat.chatRules.screen.deleteWarning", chatRule.getName()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); }) .size(50, 20) .position(width / 2 + 105, 5) @@ -136,9 +136,9 @@ public class ChatRulesConfigListWidget extends ElementListWidget<ChatRulesConfig private Text enabledButtonText() { if (chatRule.getEnabled()) { - return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.true").withColor(Color.GREEN.getRGB()); + return Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.true").withColor(Color.GREEN.getRGB()); } else { - return Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen.false").withColor(Color.RED.getRGB()); + return Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen.false").withColor(Color.RED.getRGB()); } } private void toggleEnabled() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java index 49ef735d..d986f9c7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigScreen.java @@ -15,7 +15,7 @@ public class ChatRulesConfigScreen extends Screen { private final Screen parent; public ChatRulesConfigScreen(Screen parent) { - super(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.ruleScreen")); + super(Text.translatable("skyblocker.config.chat.chatRules.screen.ruleScreen")); this.parent = parent; } @@ -37,7 +37,7 @@ public class ChatRulesConfigScreen extends Screen { close(); } }).build()); - ButtonWidget buttonNew1 = ButtonWidget.builder(Text.translatable("text.autoconfig.skyblocker.option.messages.chatRules.screen.new"), buttonNew -> chatRulesConfigListWidget.addRuleAfterSelected()).build(); + ButtonWidget buttonNew1 = ButtonWidget.builder(Text.translatable("skyblocker.config.chat.chatRules.screen.new"), buttonNew -> chatRulesConfigListWidget.addRuleAfterSelected()).build(); adder.add(buttonNew1); ButtonWidget buttonDone = ButtonWidget.builder(ScreenTexts.DONE, button -> { chatRulesConfigListWidget.saveRules(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java index 7ddbeb99..7c3c634a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/ArrowPoisonWarning.java @@ -4,6 +4,7 @@ import java.util.function.Supplier; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.CrimsonIsleConfig; import de.hysky.skyblocker.skyblock.crimson.kuudra.Kuudra.KuudraPhase; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; @@ -17,7 +18,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class ArrowPoisonWarning { - private static final Supplier<SkyblockerConfig.Kuudra> CONFIG = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; + private static final Supplier<CrimsonIsleConfig.Kuudra> CONFIG = () -> SkyblockerConfigManager.get().crimsonIsle.kuudra; private static final int THREE_SECONDS = 20 * 3; private static final Title NONE_TITLE = new Title(Text.translatable("skyblocker.crimson.kuudra.noArrowPoison").formatted(Formatting.GREEN)); private static final Title LOW_TITLE = new Title(Text.translatable("skyblocker.crimson.kuudra.lowArrowPoison").formatted(Formatting.GREEN)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java index 00cd85a0..5b586f71 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/kuudra/KuudraWaypoints.java @@ -2,10 +2,12 @@ package de.hysky.skyblocker.skyblock.crimson.kuudra; import java.io.BufferedReader; import java.util.List; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.function.Supplier; +import de.hysky.skyblocker.config.configs.CrimsonIsleConfig; import org.slf4j.Logger; import com.google.gson.JsonElement; @@ -32,130 +34,130 @@ import net.minecraft.util.math.Box; import net.minecraft.util.math.MathHelper; public class KuudraWaypoints { - private static final Logger LOGGER = LogUtils.getLogger(); - private static final float[] SUPPLIES_COLOR = { 255f / 255f, 0f, 0f }; - private static final float[] PEARL_COLOR = { 57f / 255f, 117f / 255f, 125f / 255f }; - private static final float[] SAFE_SPOT_COLOR = { 255f / 255f, 85f / 255f, 255f / 255f }; - private static final Supplier<Type> SUPPLIES_AND_FUEL_TYPE = () -> SkyblockerConfigManager.get().locations.crimsonIsle.kuudra.suppliesAndFuelWaypointType; - private static final ObjectArrayList<Waypoint> SAFE_SPOT_WAYPOINTS = new ObjectArrayList<>(); - private static final ObjectArrayList<Waypoint> PEARL_WAYPOINTS = new ObjectArrayList<>(); - private static final Function<float[], Codec<List<Waypoint>>> CODEC = cc -> PosUtils.ALT_BLOCK_POS_CODEC.xmap( - pos -> new Waypoint(pos, () -> Waypoint.Type.HIGHLIGHT, cc, false), - waypoint -> waypoint.pos) - .listOf(); - - //Use non final lists and swap them out to avoid ConcurrentModificationExceptions - private static ObjectArrayList<Waypoint> supplyWaypoints = ObjectArrayList.of(); - private static ObjectArrayList<Waypoint> ballistaBuildWaypoints = ObjectArrayList.of(); - private static ObjectArrayList<Waypoint> fuelWaypoints = ObjectArrayList.of(); - private static boolean loaded; - - static void load(MinecraftClient client) { - CompletableFuture<Void> safeSpots = loadWaypoints(client, new Identifier(SkyblockerMod.NAMESPACE, "crimson/kuudra/safe_spot_waypoints.json"), SAFE_SPOT_WAYPOINTS, SAFE_SPOT_COLOR); - CompletableFuture<Void> pearls = loadWaypoints(client, new Identifier(SkyblockerMod.NAMESPACE, "crimson/kuudra/pearl_waypoints.json"), PEARL_WAYPOINTS, PEARL_COLOR); - - CompletableFuture.allOf(safeSpots, pearls).whenComplete((_result, _throwable) -> loaded = true); - } - - private static CompletableFuture<Void> loadWaypoints(MinecraftClient client, Identifier file, ObjectArrayList<Waypoint> list, float[] colorComponents) { - return CompletableFuture.supplyAsync(() -> { - try (BufferedReader reader = client.getResourceManager().openAsReader(file)) { - return CODEC.apply(colorComponents).parse(JsonOps.INSTANCE, getWaypoints(reader)).getOrThrow(); - } catch (Exception e) { - LOGGER.error("[Skyblocker Kuudra Waypoints] Failed to load kuudra waypoints from: {}", file, e); - - return List.<Waypoint>of(); - } - }).thenAccept(list::addAll); - } - - private static JsonElement getWaypoints(BufferedReader reader) { - return JsonParser.parseReader(reader).getAsJsonObject().getAsJsonArray("waypoints"); - } - - static void tick() { - MinecraftClient client = MinecraftClient.getInstance(); - SkyblockerConfig.Kuudra config = SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; - - if (Utils.isInKuudra() && (config.supplyWaypoints || config.fuelWaypoints || config.ballistaBuildWaypoints)) { - Box searchBox = client.player.getBoundingBox().expand(500d); - ObjectArrayList<Waypoint> supplies = new ObjectArrayList<>(); - ObjectArrayList<Waypoint> fuelCells = new ObjectArrayList<>(); - - if (config.supplyWaypoints || config.fuelWaypoints) { - List<GiantEntity> giants = client.world.getEntitiesByClass(GiantEntity.class, searchBox, giant -> giant.getY() < 67); - - for (GiantEntity giant : giants) { - double yawOffset = giant.getYaw() + 115; - - double x = giant.getX() + 4.5 * Math.cos((yawOffset) * MathHelper.RADIANS_PER_DEGREE); - double y = 75; - double z = giant.getZ() + 4.5 * Math.sin((yawOffset) * MathHelper.RADIANS_PER_DEGREE); - - Waypoint waypoint = new Waypoint(BlockPos.ofFloored(x, y, z), SUPPLIES_AND_FUEL_TYPE, SUPPLIES_COLOR, false); - - switch (Kuudra.phase) { - case RETRIEVE_SUPPLIES -> supplies.add(waypoint); - case DPS -> fuelCells.add(waypoint); - default -> supplies.add(waypoint); - } - } - } - - ObjectArrayList<Waypoint> ballistaBuildSpots = new ObjectArrayList<>(); - - if (config.ballistaBuildWaypoints) { - List<ArmorStandEntity> armorStands = client.world.getEntitiesByClass(ArmorStandEntity.class, searchBox, ArmorStandEntity::hasCustomName); - - for (ArmorStandEntity armorStand : armorStands) { - String name = armorStand.getName().getString(); - - if (config.ballistaBuildWaypoints && name.contains("SNEAK + PUNCH")) { - ballistaBuildSpots.add(new Waypoint(armorStand.getBlockPos(), () -> Waypoint.Type.WAYPOINT, SUPPLIES_COLOR, false)); - } - } - } - - supplyWaypoints = supplies; - ballistaBuildWaypoints = ballistaBuildSpots; - fuelWaypoints = fuelCells; - } - } - - static void render(WorldRenderContext context) { - SkyblockerConfig.Kuudra config = SkyblockerConfigManager.get().locations.crimsonIsle.kuudra; - - if (Utils.isInKuudra() && loaded) { - if (config.supplyWaypoints) { - for (Waypoint waypoint : supplyWaypoints) { - waypoint.render(context); - } - } - - if (config.ballistaBuildWaypoints) { - for (Waypoint waypoint : ballistaBuildWaypoints) { - waypoint.render(context); - } - } - - if (config.fuelWaypoints) { - for (Waypoint waypoint : fuelWaypoints) { - waypoint.render(context); - } - } - - if (config.safeSpotWaypoints) { - for (Waypoint waypoint : SAFE_SPOT_WAYPOINTS) { - waypoint.render(context); - } - } - - //TODO maybe have "dynamic" waypoints that draw a line to the actual spot - if (config.pearlWaypoints) { - for (Waypoint waypoint : PEARL_WAYPOINTS) { - waypoint.render(context); - } - } - } - } + private static final Logger LOGGER = LogUtils.getLogger(); + private static final float[] SUPPLIES_COLOR = {255f / 255f, 0f, 0f}; + private static final float[] PEARL_COLOR = {57f / 255f, 117f / 255f, 125f / 255f}; + private static final float[] SAFE_SPOT_COLOR = {255f / 255f, 85f / 255f, 255f / 255f}; + private static final Supplier<Type> SUPPLIES_AND_FUEL_TYPE = () -> SkyblockerConfigManager.get().crimsonIsle.kuudra.suppliesAndFuelWaypointType; + private static final ObjectArrayList<Waypoint> SAFE_SPOT_WAYPOINTS = new ObjectArrayList<>(); + private static final ObjectArrayList<Waypoint> PEARL_WAYPOINTS = new ObjectArrayList<>(); + private static final Function<float[], Codec<List<Waypoint>>> CODEC = cc -> PosUtils.ALT_BLOCK_POS_CODEC.xmap( + pos -> new Waypoint(pos, () -> Waypoint.Type.HIGHLIGHT, cc, false), + waypoint -> waypoint.pos) + .listOf(); + + //Use non final lists and swap them out to avoid ConcurrentModificationExceptions + private static ObjectArrayList<Waypoint> supplyWaypoints = ObjectArrayList.of(); + private static ObjectArrayList<Waypoint> ballistaBuildWaypoints = ObjectArrayList.of(); + private static ObjectArrayList<Waypoint> fuelWaypoints = ObjectArrayList.of(); + private static boolean loaded; + + static void load(MinecraftClient client) { + CompletableFuture<Void> safeSpots = loadWaypoints(client, new Identifier(SkyblockerMod.NAMESPACE, "crimson/kuudra/safe_spot_waypoints.json"), SAFE_SPOT_WAYPOINTS, SAFE_SPOT_COLOR); + CompletableFuture<Void> pearls = loadWaypoints(client, new Identifier(SkyblockerMod.NAMESPACE, "crimson/kuudra/pearl_waypoints.json"), PEARL_WAYPOINTS, PEARL_COLOR); + + CompletableFuture.allOf(safeSpots, pearls).whenComplete((_result, _throwable) -> loaded = true); + } + + private static CompletableFuture<Void> loadWaypoints(MinecraftClient client, Identifier file, ObjectArrayList<Waypoint> list, float[] colorComponents) { + return CompletableFuture.supplyAsync(() -> { + try (BufferedReader reader = client.getResourceManager().openAsReader(file)) { + return CODEC.apply(colorComponents).parse(JsonOps.INSTANCE, getWaypoints(reader)).getOrThrow(); + } catch (Exception e) { + LOGGER.error("[Skyblocker Kuudra Waypoints] Failed to load kuudra waypoints from: {}", file, e); + + return List.<Waypoint>of(); + } + }).thenAccept(list::addAll); + } + + private static JsonElement getWaypoints(BufferedReader reader) { + return JsonParser.parseReader(reader).getAsJsonObject().getAsJsonArray("waypoints"); + } + + static void tick() { + MinecraftClient client = MinecraftClient.getInstance(); + CrimsonIsleConfig.Kuudra config = SkyblockerConfigManager.get().crimsonIsle.kuudra; + + if (Utils.isInKuudra() && (config.supplyWaypoints || config.fuelWaypoints || config.ballistaBuildWaypoints) && client.player != null) { + Box searchBox = client.player.getBoundingBox().expand(500d); + ObjectArrayList<Waypoint> supplies = new ObjectArrayList<>(); + ObjectArrayList<Waypoint> fuelCells = new ObjectArrayList<>(); + + if ((config.supplyWaypoints || config.fuelWaypoints) && client.world != null) { + List<GiantEntity> giants = client.world.getEntitiesByClass(GiantEntity.class, searchBox, giant -> giant.getY() < 67); + + for (GiantEntity giant : giants) { + double yawOffset = giant.getYaw() + 115; + + double x = giant.getX() + 4.5 * Math.cos((yawOffset) * MathHelper.RADIANS_PER_DEGREE); + double y = 75; + double z = giant.getZ() + 4.5 * Math.sin((yawOffset) * MathHelper.RADIANS_PER_DEGREE); + + Waypoint waypoint = new Waypoint(BlockPos.ofFloored(x, y, z), SUPPLIES_AND_FUEL_TYPE, SUPPLIES_COLOR, false); + + if (Objects.requireNonNull(Kuudra.phase) == Kuudra.KuudraPhase.DPS) { + fuelCells.add(waypoint); + } else { + supplies.add(waypoint); + } + } + } + + ObjectArrayList<Waypoint> ballistaBuildSpots = new ObjectArrayList<>(); + + if (config.ballistaBuildWaypoints && client.world != null) { + List<ArmorStandEntity> armorStands = client.world.getEntitiesByClass(ArmorStandEntity.class, searchBox, ArmorStandEntity::hasCustomName); + + for (ArmorStandEntity armorStand : armorStands) { + String name = armorStand.getName().getString(); + + if (config.ballistaBuildWaypoints && name.contains("SNEAK + PUNCH")) { + ballistaBuildSpots.add(new Waypoint(armorStand.getBlockPos(), () -> Waypoint.Type.WAYPOINT, SUPPLIES_COLOR, false)); + } + } + } + + supplyWaypoints = supplies; + ballistaBuildWaypoints = ballistaBuildSpots; + fuelWaypoints = fuelCells; + } + } + + static void render(WorldRenderContext context) { + CrimsonIsleConfig.Kuudra config = SkyblockerConfigManager.get().crimsonIsle.kuudra; + + if (Utils.isInKuudra() && loaded) { + if (config.supplyWaypoints) { + for (Waypoint waypoint : supplyWaypoints) { + waypoint.render(context); + } + } + + if (config.ballistaBuildWaypoints) { + for (Waypoint waypoint : ballistaBuildWaypoints) { + waypoint.render(context); + } + } + + if (config.fuelWaypoints) { + for (Waypoint waypoint : fuelWaypoints) { + waypoint.render(context); + } + } + + if (config.safeSpotWaypoints) { + for (Waypoint waypoint : SAFE_SPOT_WAYPOINTS) { + waypoint.render(context); + } + } + + //TODO maybe have "dynamic" waypoints that draw a line to the actual spot + if (config.pearlWaypoints) { + for (Waypoint waypoint : PEARL_WAYPOINTS) { + waypoint.render(context); + } + } + } + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java index 0bc34c57..d317a2e8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -19,7 +19,7 @@ public class CroesusHelper extends ContainerSolver { @Override protected boolean isEnabled() { - return SkyblockerConfigManager.get().locations.dungeons.croesusHelper; + return SkyblockerConfigManager.get().dungeons.croesusHelper; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java index c6cbe2ce..70e785cb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/CroesusProfit.java @@ -28,7 +28,7 @@ public class CroesusProfit extends ContainerSolver { @Override protected boolean isEnabled() { - return SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.croesusProfit; + return SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java index 7a6cdcd0..1e896794 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMap.java @@ -46,9 +46,9 @@ public class DungeonMap { MapState state = FilledMapItem.getMapState(mapId, client.world); if (state == null) return; - int x = SkyblockerConfigManager.get().locations.dungeons.mapX; - int y = SkyblockerConfigManager.get().locations.dungeons.mapY; - float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling; + int x = SkyblockerConfigManager.get().dungeons.dungeonMap.mapX; + int y = SkyblockerConfigManager.get().dungeons.dungeonMap.mapY; + float scaling = SkyblockerConfigManager.get().dungeons.dungeonMap.mapScaling; VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers(); MapRenderer mapRenderer = client.gameRenderer.getMapRenderer(); @@ -69,7 +69,7 @@ public class DungeonMap { } private static void render(DrawContext context) { - if (Utils.isInDungeons() && DungeonScore.isDungeonStarted() && !DungeonManager.isInBoss() && SkyblockerConfigManager.get().locations.dungeons.enableMap) { + if (Utils.isInDungeons() && DungeonScore.isDungeonStarted() && !DungeonManager.isInBoss() && SkyblockerConfigManager.get().dungeons.dungeonMap.enableMap) { render(context.getMatrices()); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index 0f42c495..068510c2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -11,10 +11,10 @@ import java.awt.*; public class DungeonMapConfigScreen extends Screen { - private int mapX = SkyblockerConfigManager.get().locations.dungeons.mapX; - private int mapY = SkyblockerConfigManager.get().locations.dungeons.mapY; - private int scoreX = SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreX; - private int scoreY = SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreY; + private int mapX = SkyblockerConfigManager.get().dungeons.dungeonMap.mapX; + private int mapY = SkyblockerConfigManager.get().dungeons.dungeonMap.mapY; + private int scoreX = SkyblockerConfigManager.get().dungeons.dungeonScore.scoreX; + private int scoreY = SkyblockerConfigManager.get().dungeons.dungeonScore.scoreY; private static final Identifier MAP_BACKGROUND = new Identifier("textures/map/map_background.png"); private final Screen parent; @@ -38,8 +38,8 @@ public class DungeonMapConfigScreen extends Screen { @Override public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { - int mapSize = (int) (128 * SkyblockerConfigManager.get().locations.dungeons.mapScaling); - float scoreScaling = SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreScaling; + int mapSize = (int) (128 * SkyblockerConfigManager.get().dungeons.dungeonMap.mapScaling); + float scoreScaling = SkyblockerConfigManager.get().dungeons.dungeonScore.scoreScaling; int scoreWidth = (int) (textRenderer.getWidth(DungeonScoreHUD.getFormattedScoreText()) * scoreScaling); int scoreHeight = (int) (textRenderer.fontHeight * scoreScaling); if (RenderHelper.pointIsInArea(mouseX, mouseY, mapX, mapY, mapX + mapSize, mapY + mapSize) && button == 0) { @@ -57,8 +57,8 @@ public class DungeonMapConfigScreen extends Screen { if (button == 1) { mapX = 2; mapY = 2; - scoreX = Math.max((int) ((mapX + (64 * SkyblockerConfigManager.get().locations.dungeons.mapScaling)) - textRenderer.getWidth(DungeonScoreHUD.getFormattedScoreText()) * SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreScaling / 2), 0); - scoreY = (int) (mapY + (128 * SkyblockerConfigManager.get().locations.dungeons.mapScaling) + 4); + scoreX = Math.max((int) ((mapX + (64 * SkyblockerConfigManager.get().dungeons.dungeonMap.mapScaling)) - textRenderer.getWidth(DungeonScoreHUD.getFormattedScoreText()) * SkyblockerConfigManager.get().dungeons.dungeonScore.scoreScaling / 2), 0); + scoreY = (int) (mapY + (128 * SkyblockerConfigManager.get().dungeons.dungeonMap.mapScaling) + 4); } return super.mouseClicked(mouseX, mouseY, button); @@ -66,17 +66,17 @@ public class DungeonMapConfigScreen extends Screen { @Override public void close() { - SkyblockerConfigManager.get().locations.dungeons.mapX = mapX; - SkyblockerConfigManager.get().locations.dungeons.mapY = mapY; - SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreX = scoreX; - SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreY = scoreY; + SkyblockerConfigManager.get().dungeons.dungeonMap.mapX = mapX; + SkyblockerConfigManager.get().dungeons.dungeonMap.mapY = mapY; + SkyblockerConfigManager.get().dungeons.dungeonScore.scoreX = scoreX; + SkyblockerConfigManager.get().dungeons.dungeonScore.scoreY = scoreY; SkyblockerConfigManager.save(); this.client.setScreen(parent); } public void renderHUDMap(DrawContext context, int x, int y) { - float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling; + float scaling = SkyblockerConfigManager.get().dungeons.dungeonMap.mapScaling; int size = (int) (128 * scaling); context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java index f9e33410..7a5abed1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java @@ -5,6 +5,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.DungeonsConfig; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; import de.hysky.skyblocker.utils.Constants; @@ -27,8 +28,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class DungeonScore { - private static final SkyblockerConfig.DungeonScore SCORE_CONFIG = SkyblockerConfigManager.get().locations.dungeons.dungeonScore; - private static final SkyblockerConfig.MimicMessage MIMIC_MESSAGE_CONFIG = SkyblockerConfigManager.get().locations.dungeons.mimicMessage; + private static final DungeonsConfig.DungeonScore SCORE_CONFIG = SkyblockerConfigManager.get().dungeons.dungeonScore; + private static final DungeonsConfig.MimicMessage MIMIC_MESSAGE_CONFIG = SkyblockerConfigManager.get().dungeons.mimicMessage; private static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Dungeon Score"); //Scoreboard patterns private static final Pattern CLEARED_PATTERN = Pattern.compile("Cleared: (?<cleared>\\d+)%.*"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java index 8d402172..1896eb53 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScoreHUD.java @@ -21,15 +21,15 @@ public class DungeonScoreHUD { private static final Text extraSpace = Text.literal(" ").append(Text.literal(" ").formatted(Formatting.BOLD)); private static void render(DrawContext context) { - if (Utils.isInDungeons() && DungeonScore.isDungeonStarted() && SkyblockerConfigManager.get().locations.dungeons.dungeonScore.enableScoreHUD) { - int x = SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreX; - int y = SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreY; + if (Utils.isInDungeons() && DungeonScore.isDungeonStarted() && SkyblockerConfigManager.get().dungeons.dungeonScore.enableScoreHUD) { + int x = SkyblockerConfigManager.get().dungeons.dungeonScore.scoreX; + int y = SkyblockerConfigManager.get().dungeons.dungeonScore.scoreY; render(context, x, y); } } public static void render(DrawContext context, int x, int y) { - float scale = SkyblockerConfigManager.get().locations.dungeons.dungeonScore.scoreScaling; + float scale = SkyblockerConfigManager.get().dungeons.dungeonScore.scoreScaling; MatrixStack matrixStack = context.getMatrices(); matrixStack.push(); matrixStack.scale(scale, scale, 0); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java index 7c0aab4c..b2a9b521 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/FireFreezeStaffTimer.java @@ -24,7 +24,7 @@ public class FireFreezeStaffTimer { if (client.currentScreen != null) return; - if (SkyblockerConfigManager.get().locations.dungeons.fireFreezeStaffTimer && fireFreezeTimer != 0) { + if (SkyblockerConfigManager.get().dungeons.theProfessor.fireFreezeStaffTimer && fireFreezeTimer != 0) { long now = System.currentTimeMillis(); if (now >= fireFreezeTimer + 5000) { @@ -51,7 +51,7 @@ public class FireFreezeStaffTimer { } private static void onChatMessage(Text text, boolean overlay) { - if (!overlay && SkyblockerConfigManager.get().locations.dungeons.fireFreezeStaffTimer && Formatting.strip(text.getString()) + if (!overlay && SkyblockerConfigManager.get().dungeons.theProfessor.fireFreezeStaffTimer && Formatting.strip(text.getString()) .equals("[BOSS] The Professor: Oh? You found my Guardians' one weakness?")) { fireFreezeTimer = System.currentTimeMillis() + 5000L; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/GuardianHealth.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/GuardianHealth.java index e17c490d..288f30ee 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/GuardianHealth.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/GuardianHealth.java @@ -32,7 +32,7 @@ public class GuardianHealth { } private static void onWorldRender(WorldRenderContext context) { - if (!SkyblockerConfigManager.get().locations.dungeons.floor3GuardianHealthDisplay) return; + if (!SkyblockerConfigManager.get().dungeons.theProfessor.floor3GuardianHealthDisplay) return; MinecraftClient client = MinecraftClient.getInstance(); @@ -78,7 +78,7 @@ public class GuardianHealth { } private static void onChatMessage(Text text, boolean overlay) { - if (Utils.isInDungeons() && SkyblockerConfigManager.get().locations.dungeons.floor3GuardianHealthDisplay && !inBoss) { + if (Utils.isInDungeons() && SkyblockerConfigManager.get().dungeons.theProfessor.floor3GuardianHealthDisplay && !inBoss) { String unformatted = Formatting.strip(text.getString()); inBoss = unformatted.equals("[BOSS] The Professor: I was burdened with terrible news recently..."); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java index ee9791d5..42810b60 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.DungeonsConfig; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.Utils; @@ -42,13 +43,13 @@ public class LividColor { "Vendetta Livid", Formatting.WHITE ); public static final Set<String> LIVID_NAMES = Set.copyOf(LIVID_TO_FORMATTING.keySet()); - public static final SkyblockerConfig.LividColor CONFIG = SkyblockerConfigManager.get().locations.dungeons.lividColor; + public static final DungeonsConfig.Livid CONFIG = SkyblockerConfigManager.get().dungeons.livid; private static int tenTicks = 0; private static Formatting color; public static void init() { ClientReceiveMessageEvents.GAME.register((message, overlay) -> { - SkyblockerConfig.LividColor config = SkyblockerConfigManager.get().locations.dungeons.lividColor; + DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid; if ((config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow) && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) { tenTicks = 8; } @@ -58,7 +59,7 @@ public class LividColor { public static void update() { MinecraftClient client = MinecraftClient.getInstance(); if (tenTicks != 0) { - SkyblockerConfig.LividColor config = SkyblockerConfigManager.get().locations.dungeons.lividColor; + DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid; if ((config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow) && Utils.isInDungeons() && client.world != null) { if (tenTicks == 1) { onLividColorFound(client, Blocks.RED_WOOL); @@ -94,11 +95,11 @@ public class LividColor { } public static boolean allowGlow() { - return !SkyblockerConfigManager.get().locations.dungeons.lividColor.enableLividColorGlow || !DungeonManager.getBoss().isFloor(5); + return !SkyblockerConfigManager.get().dungeons.livid.enableLividColorGlow || !DungeonManager.getBoss().isFloor(5); } public static boolean shouldGlow(String name) { - return SkyblockerConfigManager.get().locations.dungeons.lividColor.enableLividColorGlow && color == LIVID_TO_FORMATTING.get(name); + return SkyblockerConfigManager.get().dungeons.livid.enableLividColorGlow && color == LIVID_TO_FORMATTING.get(name); } @SuppressWarnings("DataFlowIssue") diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java index a9ffafec..588e2431 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyEntry.java @@ -67,7 +67,7 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> { //System.out.println(tooltips); MinecraftClient client = MinecraftClient.getInstance(); - Text title = tooltips.get(0); + Text title = tooltips.getFirst(); String partyHost = title.getString().split("'s")[0]; int membersIndex = -1; @@ -106,7 +106,7 @@ public class PartyEntry extends ElementListWidget.Entry<PartyEntry> { } else if (lowerCase.contains("dungeon:")) { dungeon = tooltipText.split(":")[1].trim(); - } else if (!text.getSiblings().isEmpty() && Objects.equals(text.getSiblings().get(0).getStyle().getColor(), TextColor.fromRgb(Formatting.RED.getColorValue())) && !lowerCase.startsWith(" ")) { + } else if (!text.getSiblings().isEmpty() && Objects.equals(text.getSiblings().getFirst().getStyle().getColor(), TextColor.fromRgb(Formatting.RED.getColorValue())) && !lowerCase.startsWith(" ")) { isLocked = true; lockReason = text; } else if (lowerCase.contains("note:")) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java index fc66ab06..d22084f2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/PartyFinderScreen.java @@ -276,7 +276,7 @@ public class PartyFinderScreen extends Screen { ClientPlayNetworkHandler networkHandler = this.client.getNetworkHandler(); if (networkHandler != null && sign != null) { List<String> originalText = Arrays.stream(sign.getText(signFront).getMessages(true)).map(Text::getString).toList(); - networkHandler.sendPacket(new UpdateSignC2SPacket(sign.getPos(), signFront, originalText.get(0), originalText.get(1), originalText.get(2), originalText.get(3))); + networkHandler.sendPacket(new UpdateSignC2SPacket(sign.getPos(), signFront, originalText.getFirst(), originalText.get(1), originalText.get(2), originalText.get(3))); } } super.close(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/CreeperBeams.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/CreeperBeams.java index 419ce85c..3d9e05ae 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/CreeperBeams.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/CreeperBeams.java @@ -157,12 +157,12 @@ public class CreeperBeams extends DungeonPuzzle { allLines.sort(Comparator.comparingDouble(ObjectDoublePair::rightDouble)); while (result.size() < 5 && !allLines.isEmpty()) { - Beam solution = allLines.get(0).left(); + Beam solution = allLines.getFirst().left(); result.add(solution); // remove the line we just added and other lines that use blocks we're using for // that line - allLines.remove(0); + allLines.removeFirst(); allLines.removeIf(beam -> solution.containsComponentOf(beam.left())); } @@ -177,7 +177,7 @@ public class CreeperBeams extends DungeonPuzzle { public void render(WorldRenderContext wrc) { // don't render if solved or disabled - if (!shouldSolve() || !SkyblockerConfigManager.get().locations.dungeons.creeperSolver) { + if (!shouldSolve() || !SkyblockerConfigManager.get().dungeons.puzzleSolvers.creeperSolver) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/DungeonBlaze.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/DungeonBlaze.java index fa7f1e92..8ac79f39 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/DungeonBlaze.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/DungeonBlaze.java @@ -93,7 +93,7 @@ public class DungeonBlaze extends DungeonPuzzle { */ private static void updateBlazeEntities(List<ObjectIntPair<ArmorStandEntity>> blazes) { if (!blazes.isEmpty()) { - lowestBlaze = blazes.get(0).left(); + lowestBlaze = blazes.getFirst().left(); int highestIndex = blazes.size() - 1; highestBlaze = blazes.get(highestIndex).left(); if (blazes.size() > 1) { @@ -111,7 +111,7 @@ public class DungeonBlaze extends DungeonPuzzle { @Override public void render(WorldRenderContext wrc) { try { - if (highestBlaze != null && lowestBlaze != null && highestBlaze.isAlive() && lowestBlaze.isAlive() && SkyblockerConfigManager.get().locations.dungeons.blazeSolver) { + if (highestBlaze != null && lowestBlaze != null && highestBlaze.isAlive() && lowestBlaze.isAlive() && SkyblockerConfigManager.get().dungeons.puzzleSolvers.blazeSolver) { if (highestBlaze.getY() < 69) { renderBlazeOutline(highestBlaze, nextHighestBlaze, wrc); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/IceFill.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/IceFill.java index 57386674..8bc14b52 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/IceFill.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/IceFill.java @@ -54,7 +54,7 @@ public class IceFill extends DungeonPuzzle { context.getSource().sendFeedback(Constants.PREFIX.get().append(boardToString(INSTANCE.iceFillBoards[2]))); return Command.SINGLE_SUCCESS; })).then(literal("printPath1").executes(context -> { - context.getSource().sendFeedback(Constants.PREFIX.get().append(INSTANCE.iceFillPaths.get(0).toString())); + context.getSource().sendFeedback(Constants.PREFIX.get().append(INSTANCE.iceFillPaths.getFirst().toString())); return Command.SINGLE_SUCCESS; })).then(literal("printPath2").executes(context -> { context.getSource().sendFeedback(Constants.PREFIX.get().append(INSTANCE.iceFillPaths.get(1).toString())); @@ -80,7 +80,7 @@ public class IceFill extends DungeonPuzzle { @Override public void tick(MinecraftClient client) { - if (!SkyblockerConfigManager.get().locations.dungeons.solveIceFill || client.world == null || !DungeonManager.isCurrentRoomMatched() || solve != null && !solve.isDone()) { + if (!SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveIceFill || client.world == null || !DungeonManager.isCurrentRoomMatched() || solve != null && !solve.isDone()) { return; } Room room = DungeonManager.getCurrentRoom(); @@ -150,7 +150,7 @@ public class IceFill extends DungeonPuzzle { @Override public void render(WorldRenderContext context) { - if (!SkyblockerConfigManager.get().locations.dungeons.solveIceFill || !DungeonManager.isCurrentRoomMatched()) { + if (!SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveIceFill || !DungeonManager.isCurrentRoomMatched()) { return; } Room room = DungeonManager.getCurrentRoom(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Silverfish.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Silverfish.java index b5cbc8ee..3b0ee65c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Silverfish.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Silverfish.java @@ -65,7 +65,7 @@ public class Silverfish extends DungeonPuzzle { @Override public void tick(MinecraftClient client) { - if (!SkyblockerConfigManager.get().locations.dungeons.solveSilverfish || client.world == null || !DungeonManager.isCurrentRoomMatched()) { + if (!SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveSilverfish || client.world == null || !DungeonManager.isCurrentRoomMatched()) { return; } Room room = DungeonManager.getCurrentRoom(); @@ -86,7 +86,7 @@ public class Silverfish extends DungeonPuzzle { if (entities.isEmpty()) { return; } - BlockPos newSilverfishBlockPos = room.actualToRelative(entities.get(0).getBlockPos()); + BlockPos newSilverfishBlockPos = room.actualToRelative(entities.getFirst().getBlockPos()); Vector2ic newSilverfishPos = new Vector2i(24 - newSilverfishBlockPos.getZ(), 23 - newSilverfishBlockPos.getX()); if (newSilverfishPos.x() < 0 || newSilverfishPos.x() >= 17 || newSilverfishPos.y() < 0 || newSilverfishPos.y() >= 17) { return; @@ -158,7 +158,7 @@ public class Silverfish extends DungeonPuzzle { @Override public void render(WorldRenderContext context) { - if (!SkyblockerConfigManager.get().locations.dungeons.solveSilverfish || !DungeonManager.isCurrentRoomMatched() || silverfishPath.isEmpty()) { + if (!SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveSilverfish || !DungeonManager.isCurrentRoomMatched() || silverfishPath.isEmpty()) { return; } Room room = DungeonManager.getCurrentRoom(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/ThreeWeirdos.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/ThreeWeirdos.java index fd7a8dbf..30119204 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/ThreeWeirdos.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/ThreeWeirdos.java @@ -17,7 +17,7 @@ public class ThreeWeirdos extends ChatPatternListener { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().locations.dungeons.solveThreeWeirdos ? null : ChatFilterResult.PASS; + return SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveThreeWeirdos ? null : ChatFilterResult.PASS; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java index 1683276e..3c0b0dc9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/TicTacToe.java @@ -111,7 +111,7 @@ public class TicTacToe extends DungeonPuzzle { @Override public void render(WorldRenderContext context) { try { - if (SkyblockerConfigManager.get().locations.dungeons.solveTicTacToe && nextBestMoveToMake != null) { + if (SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveTicTacToe && nextBestMoveToMake != null) { RenderHelper.renderOutline(context, nextBestMoveToMake, RED_COLOR_COMPONENTS, 5, false); } } catch (Exception e) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java index eb09cf6e..874907c3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/Trivia.java @@ -29,7 +29,7 @@ public class Trivia extends ChatPatternListener { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().locations.dungeons.solveTrivia ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + return SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveTrivia ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/boulder/Boulder.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/boulder/Boulder.java index 878c8d0a..68671896 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/boulder/Boulder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/boulder/Boulder.java @@ -43,7 +43,7 @@ public class Boulder extends DungeonPuzzle { @Override public void tick(MinecraftClient client) { - if (!shouldSolve() || !SkyblockerConfigManager.get().locations.dungeons.solveBoulder || client.world == null || !DungeonManager.isCurrentRoomMatched()) { + if (!shouldSolve() || !SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveBoulder || client.world == null || !DungeonManager.isCurrentRoomMatched()) { return; } @@ -195,7 +195,7 @@ public class Boulder extends DungeonPuzzle { @Override public void render(WorldRenderContext context) { - if (!shouldSolve() || !SkyblockerConfigManager.get().locations.dungeons.solveBoulder || !DungeonManager.isCurrentRoomMatched()) + if (!shouldSolve() || !SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveBoulder || !DungeonManager.isCurrentRoomMatched()) return; float alpha = 1.0f; float lineWidth = 5.0f; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/waterboard/Waterboard.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/waterboard/Waterboard.java index 2efadfda..4e8122c3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/waterboard/Waterboard.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/puzzle/waterboard/Waterboard.java @@ -133,7 +133,7 @@ public class Waterboard extends DungeonPuzzle { @Override public void tick(MinecraftClient client) { - if (!SkyblockerConfigManager.get().locations.dungeons.solveWaterboard || client.world == null || !DungeonManager.isCurrentRoomMatched() || solve != null && !solve.isDone()) { + if (!SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveWaterboard || client.world == null || !DungeonManager.isCurrentRoomMatched() || solve != null && !solve.isDone()) { return; } Room room = DungeonManager.getCurrentRoom(); @@ -337,7 +337,7 @@ public class Waterboard extends DungeonPuzzle { @Override public void render(WorldRenderContext context) { - if (!SkyblockerConfigManager.get().locations.dungeons.solveWaterboard || !DungeonManager.isCurrentRoomMatched()) return; + if (!SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveWaterboard || !DungeonManager.isCurrentRoomMatched()) return; Room room = DungeonManager.getCurrentRoom(); // Render the best combination. @@ -377,7 +377,7 @@ public class Waterboard extends DungeonPuzzle { private ActionResult onUseBlock(PlayerEntity player, World world, Hand hand, BlockHitResult blockHitResult) { BlockState state = world.getBlockState(blockHitResult.getBlockPos()); - if (SkyblockerConfigManager.get().locations.dungeons.solveWaterboard && blockHitResult.getType() == HitResult.Type.BLOCK && waypoints[6] != null && DungeonManager.isCurrentRoomMatched() && blockHitResult.getBlockPos().equals(DungeonManager.getCurrentRoom().relativeToActual(WATER_LEVER)) && state.contains(LeverBlock.POWERED)) { + if (SkyblockerConfigManager.get().dungeons.puzzleSolvers.solveWaterboard && blockHitResult.getType() == HitResult.Type.BLOCK && waypoints[6] != null && DungeonManager.isCurrentRoomMatched() && blockHitResult.getBlockPos().equals(DungeonManager.getCurrentRoom().relativeToActual(WATER_LEVER)) && state.contains(LeverBlock.POWERED)) { if (!state.get(LeverBlock.POWERED)) { bestCombinationsUpdated = false; Scheduler.INSTANCE.schedule(() -> waypoints[6].setMissing(), 50); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java index 8bb22e7e..e4504cc9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java @@ -12,7 +12,7 @@ import com.mojang.brigadier.builder.RequiredArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.mojang.serialization.JsonOps; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.configs.DungeonsConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.skyblock.dungeon.DungeonBoss; @@ -227,7 +227,7 @@ public class DungeonManager { */ public static void init() { CUSTOM_WAYPOINTS_DIR = SkyblockerMod.CONFIG_DIR.resolve("custom_secret_waypoints.json"); - if (!SkyblockerConfigManager.get().locations.dungeons.secretWaypoints.enableRoomMatching) { + if (!SkyblockerConfigManager.get().dungeons.secretWaypoints.enableRoomMatching) { return; } // Execute with MinecraftClient as executor since we need to wait for MinecraftClient#resourceManager to be set @@ -628,7 +628,7 @@ public class DungeonManager { } // Process key found messages for door highlight - if (SkyblockerConfigManager.get().locations.dungeons.doorHighlight.enableDoorHighlight) { + if (SkyblockerConfigManager.get().dungeons.doorHighlight.enableDoorHighlight) { Matcher matcher = KEY_FOUND.matcher(message); if (matcher.matches()) { String name = matcher.group("name"); @@ -755,12 +755,12 @@ public class DungeonManager { } /** - * Checks if {@link SkyblockerConfig.SecretWaypoints#enableRoomMatching room matching} is enabled and the player is in a dungeon. + * Checks if {@link DungeonsConfig.SecretWaypoints#enableRoomMatching room matching} is enabled and the player is in a dungeon. * * @return whether room matching and dungeon secrets should be processed */ private static boolean shouldProcess() { - return SkyblockerConfigManager.get().locations.dungeons.secretWaypoints.enableRoomMatching && Utils.isInDungeons(); + return SkyblockerConfigManager.get().dungeons.secretWaypoints.enableRoomMatching && Utils.isInDungeons(); } /** diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java index 5b20b48f..e6a8b9d1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/Room.java @@ -310,7 +310,7 @@ public class Room implements Tickable, Renderable { } // Wither and blood door - if (SkyblockerConfigManager.get().locations.dungeons.doorHighlight.enableDoorHighlight && doorPos == null) { + if (SkyblockerConfigManager.get().dungeons.doorHighlight.enableDoorHighlight && doorPos == null) { doorPos = DungeonMapUtils.getWitherBloodDoorPos(client.world, segments); if (doorPos != null) { doorBox = new Box(doorPos.getX(), doorPos.getY(), doorPos.getZ(), doorPos.getX() + DOOR_SIZE.getX(), doorPos.getY() + DOOR_SIZE.getY(), doorPos.getZ() + DOOR_SIZE.getZ()); @@ -420,7 +420,7 @@ public class Room implements Tickable, Renderable { if (matchState == MatchState.MATCHING) { // If one room matches, load the secrets for that room and set state to double-checking. Triple<Direction, Vector2ic, List<String>> directionRoom = possibleRooms.stream().filter(directionRooms -> directionRooms.getRight().size() == 1).findAny().orElseThrow(); - name = directionRoom.getRight().get(0); + name = directionRoom.getRight().getFirst(); direction = directionRoom.getLeft(); physicalCornerPos = directionRoom.getMiddle(); DungeonManager.LOGGER.info("[Skyblocker Dungeon Secrets] Room {} matched after checking {} block(s), starting double checking", name, checkedBlocks.size()); @@ -526,7 +526,7 @@ public class Room implements Tickable, Renderable { } synchronized (this) { - if (SkyblockerConfigManager.get().locations.dungeons.secretWaypoints.enableSecretWaypoints && isMatched()) { + if (SkyblockerConfigManager.get().dungeons.secretWaypoints.enableSecretWaypoints && isMatched()) { for (SecretWaypoint secretWaypoint : secretWaypoints.values()) { if (secretWaypoint.shouldRender()) { secretWaypoint.render(context); @@ -535,11 +535,11 @@ public class Room implements Tickable, Renderable { } } - if (!SkyblockerConfigManager.get().locations.dungeons.doorHighlight.enableDoorHighlight || doorPos == null) { + if (!SkyblockerConfigManager.get().dungeons.doorHighlight.enableDoorHighlight || doorPos == null) { return; } float[] colorComponents = keyFound ? GREEN_COLOR_COMPONENTS : RED_COLOR_COMPONENTS; - switch (SkyblockerConfigManager.get().locations.dungeons.doorHighlight.doorHighlightType) { + switch (SkyblockerConfigManager.get().dungeons.doorHighlight.doorHighlightType) { case HIGHLIGHT -> RenderHelper.renderFilled(context, doorPos, DOOR_SIZE, colorComponents, 0.5f, true); case OUTLINED_HIGHLIGHT -> { RenderHelper.renderFilled(context, doorPos, DOOR_SIZE, colorComponents, 0.5f, true); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java index 44df9d8c..42fe6dbe 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java @@ -7,6 +7,7 @@ import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.DungeonsConfig; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.waypoint.Waypoint; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; @@ -38,7 +39,7 @@ public class SecretWaypoint extends Waypoint { ).apply(instance, SecretWaypoint::new)); public static final Codec<List<SecretWaypoint>> LIST_CODEC = CODEC.listOf(); static final List<String> SECRET_ITEMS = List.of("Decoy", "Defuse Kit", "Dungeon Chest Key", "Healing VIII", "Inflatable Jerry", "Spirit Leap", "Training Weights", "Trap", "Treasure Talisman"); - private static final Supplier<SkyblockerConfig.SecretWaypoints> CONFIG = () -> SkyblockerConfigManager.get().locations.dungeons.secretWaypoints; + private static final Supplier<DungeonsConfig.SecretWaypoints> CONFIG = () -> SkyblockerConfigManager.get().dungeons.secretWaypoints; static final Supplier<Type> TYPE_SUPPLIER = () -> CONFIG.get().waypointType; final int secretIndex; final Category category; @@ -131,10 +132,10 @@ public class SecretWaypoint extends Waypoint { DEFAULT("default", secretWaypoints -> secretWaypoints.enableDefaultWaypoints, 190, 255, 252); private static final Codec<Category> CODEC = StringIdentifiable.createCodec(Category::values); private final String name; - private final Predicate<SkyblockerConfig.SecretWaypoints> enabledPredicate; + private final Predicate<DungeonsConfig.SecretWaypoints> enabledPredicate; private final float[] colorComponents; - Category(String name, Predicate<SkyblockerConfig.SecretWaypoints> enabledPredicate, int... intColorComponents) { + Category(String name, Predicate<DungeonsConfig.SecretWaypoints> enabledPredicate, int... intColorComponents) { this.name = name; this.enabledPredicate = enabledPredicate; colorComponents = new float[intColorComponents.length]; @@ -164,7 +165,7 @@ public class SecretWaypoint extends Waypoint { } boolean isEnabled() { - return enabledPredicate.test(SkyblockerConfigManager.get().locations.dungeons.secretWaypoints); + return enabledPredicate.test(SkyblockerConfigManager.get().dungeons.secretWaypoints); } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java index 2f748792..fd960163 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/SecretsTracker.java @@ -116,7 +116,7 @@ public class SecretsTracker { } private static void onMessage(Text text, boolean overlay) { - if (Utils.isInDungeons() && SkyblockerConfigManager.get().locations.dungeons.playerSecretsTracker && !overlay) { + if (Utils.isInDungeons() && SkyblockerConfigManager.get().dungeons.playerSecretsTracker && !overlay) { String message = Formatting.strip(text.getString()); try { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 933fefa9..01673f23 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -29,7 +29,7 @@ public class ColorTerminal extends ContainerSolver { @Override protected boolean isEnabled() { targetColor = null; - return SkyblockerConfigManager.get().locations.dungeons.terminals.solveColor; + return SkyblockerConfigManager.get().dungeons.terminals.solveColor; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index 4789e0f4..d8d9a63a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -24,7 +24,7 @@ public class OrderTerminal extends ContainerSolver { protected boolean isEnabled() { orderedSlots = null; currentNum = 0; - return SkyblockerConfigManager.get().locations.dungeons.terminals.solveOrder; + return SkyblockerConfigManager.get().dungeons.terminals.solveOrder; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index 0bfb896e..c4cc8e47 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -23,7 +23,7 @@ public class StartsWithTerminal extends ContainerSolver { @Override protected boolean isEnabled() { - return SkyblockerConfigManager.get().locations.dungeons.terminals.solveStartsWith; + return SkyblockerConfigManager.get().dungeons.terminals.solveStartsWith; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java index a4af804c..a74dbc5e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java @@ -35,18 +35,18 @@ public class CrystalsHud { .executes(Scheduler.queueOpenScreenCommand(CrystalsHudConfigScreen::new)))))); HudRenderEvents.AFTER_MAIN_HUD.register((context, tickDelta) -> { - if (!SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.enabled + if (!SkyblockerConfigManager.get().mining.crystalsHud.enabled || CLIENT.player == null || !visible) { return; } - render(context, tickDelta, SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.x, - SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.y); + render(context, tickDelta, SkyblockerConfigManager.get().mining.crystalsHud.x, + SkyblockerConfigManager.get().mining.crystalsHud.y); }); } protected static int getDimensionsForConfig() { - return (int) (62 * SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.mapScaling); + return (int) (62 * SkyblockerConfigManager.get().mining.crystalsHud.mapScaling); } @@ -59,7 +59,7 @@ public class CrystalsHud { * @param hudY Top left Y coordinate of the map */ private static void render(DrawContext context, float tickDelta, int hudX, int hudY) { - float scale = SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.mapScaling; + float scale = SkyblockerConfigManager.get().mining.crystalsHud.mapScaling; //make sure the map renders infront of some stuff - improve this in the future with better layering (1.20.5?) //and set position and scale @@ -72,13 +72,13 @@ public class CrystalsHud { context.drawTexture(MAP_TEXTURE, 0, 0, 0, 0, 62, 62, 62, 62); //if enabled add waypoint locations to map - if (SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.showLocations) { + if (SkyblockerConfigManager.get().mining.crystalsHud.showLocations) { Map<String,CrystalsWaypoint> ActiveWaypoints = CrystalsLocationsManager.activeWaypoints; for (CrystalsWaypoint waypoint : ActiveWaypoints.values()) { Color waypointColor = waypoint.category.color; Vector2ic renderPos = transformLocation(waypoint.pos.getX(), waypoint.pos.getZ()); - int locationSize = SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.locationSize; + int locationSize = SkyblockerConfigManager.get().mining.crystalsHud.locationSize; if (SMALL_LOCATIONS.contains(waypoint.name.getString())) {//if small location half the location size locationSize /= 2; @@ -150,7 +150,7 @@ public class CrystalsHud { * */ public static void update() { - if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().locations.dwarvenMines.crystalsHud.enabled) { + if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().mining.crystalsHud.enabled) { visible = false; return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java index 15e605b9..823a8bcd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java @@ -26,7 +26,7 @@ public class CrystalsHudConfigScreen extends HudConfigScreen { @SuppressWarnings("SuspiciousNameCombination") @Override protected List<IntIntMutablePair> getConfigPos(SkyblockerConfig config) { - return List.of(IntIntMutablePair.of(config.locations.dwarvenMines.crystalsHud.x, config.locations.dwarvenMines.crystalsHud.y)); + return List.of(IntIntMutablePair.of(config.mining.crystalsHud.x, config.mining.crystalsHud.y)); } @Override @@ -38,7 +38,7 @@ public class CrystalsHudConfigScreen extends HudConfigScreen { @Override protected void savePos(SkyblockerConfig configManager, List<Widget> widgets) { - configManager.locations.dwarvenMines.crystalsHud.x = widgets.get(0).getX(); - configManager.locations.dwarvenMines.crystalsHud.y = widgets.get(0).getY(); + configManager.mining.crystalsHud.x = widgets.getFirst().getX(); + configManager.mining.crystalsHud.y = widgets.getFirst().getY(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsLocationsManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsLocationsManager.java index 9c37de51..6f4c86a7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsLocationsManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsLocationsManager.java @@ -63,7 +63,7 @@ public class CrystalsLocationsManager { } private static void extractLocationFromMessage(Text message, Boolean overlay) { - if (!SkyblockerConfigManager.get().locations.dwarvenMines.crystalsWaypoints.findInChat || !Utils.isInCrystalHollows()) { + if (!SkyblockerConfigManager.get().mining.crystalsWaypoints.findInChat || !Utils.isInCrystalHollows()) { return; } @@ -177,7 +177,7 @@ public class CrystalsLocationsManager { if (CLIENT.player == null || CLIENT.getNetworkHandler() == null) { return 0; } - CLIENT.player.sendMessage(Constants.PREFIX.get().append(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.crystalsWaypoints.shareFail").formatted(Formatting.RED)), false); + CLIENT.player.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.config.mining.crystalsWaypoints.shareFail").formatted(Formatting.RED)), false); } return Command.SINGLE_SUCCESS; @@ -191,7 +191,7 @@ public class CrystalsLocationsManager { } public static void render(WorldRenderContext context) { - if (SkyblockerConfigManager.get().locations.dwarvenMines.crystalsWaypoints.enabled) { + if (SkyblockerConfigManager.get().mining.crystalsWaypoints.enabled) { for (CrystalsWaypoint crystalsWaypoint : activeWaypoints.values()) { if (crystalsWaypoint.shouldRender()) { crystalsWaypoint.render(context); @@ -205,7 +205,7 @@ public class CrystalsLocationsManager { } public static void update() { - if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().locations.dwarvenMines.crystalsWaypoints.enabled || !Utils.isInCrystalHollows()) { + if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().mining.crystalsWaypoints.enabled || !Utils.isInCrystalHollows()) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsWaypoint.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsWaypoint.java index fbb43083..053f3536 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsWaypoint.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsWaypoint.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.dwarven; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.utils.render.RenderHelper; import de.hysky.skyblocker.utils.waypoint.Waypoint; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; @@ -19,7 +19,7 @@ import java.util.function.Supplier; import java.util.function.ToDoubleFunction; public class CrystalsWaypoint extends Waypoint { - private static final Supplier<SkyblockerConfig.Waypoints> CONFIG = () -> SkyblockerConfigManager.get().general.waypoints; + private static final Supplier<UIAndVisualsConfig.Waypoints> CONFIG = () -> SkyblockerConfigManager.get().uiAndVisuals.waypoints; private static final Supplier<Type> TYPE_SUPPLIER = () -> CONFIG.get().waypointType; final Category category; final Text name; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java index ea97ad6c..242c513a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -62,7 +62,7 @@ public class DwarvenHud { )); HudRenderEvents.AFTER_MAIN_HUD.register((context, tickDelta) -> { - if (!SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledPowder + if (!SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder || CLIENT.options.playerListKey.isPressed() || CLIENT.player == null || (!Utils.isInDwarvenMines() && !Utils.isInCrystalHollows())) { @@ -70,16 +70,16 @@ public class DwarvenHud { } render(HudCommsWidget.INSTANCE, HudPowderWidget.INSTANCE, context, - SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.x, - SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.y, - SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.powderX, - SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.powderY, + SkyblockerConfigManager.get().mining.dwarvenHud.commissionsX, + SkyblockerConfigManager.get().mining.dwarvenHud.commissionsY, + SkyblockerConfigManager.get().mining.dwarvenHud.powderX, + SkyblockerConfigManager.get().mining.dwarvenHud.powderY, commissionList); }); } protected static void render(HudCommsWidget hcw, HudPowderWidget hpw, DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List<Commission> commissions) { - switch (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.style) { + switch (SkyblockerConfigManager.get().mining.dwarvenHud.style) { case SIMPLE -> renderSimple(hcw, hpw, context, comHudX, comHudY, powderHudX, powderHudY, commissions); case FANCY -> renderFancy(hcw, hpw, context, comHudX, comHudY, powderHudX, powderHudY, commissions); case CLASSIC -> renderClassic(context, comHudX, comHudY, powderHudX, powderHudY, commissions); @@ -97,11 +97,11 @@ public class DwarvenHud { */ @Deprecated(since = "1.20.3+1.20.6", forRemoval = true) private static void renderClassic(DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List<Commission> commissions) { - if (SkyblockerConfigManager.get().general.tabHud.enableHudBackground) { + if (SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground) { context.fill(comHudX, comHudY, comHudX + 200, comHudY + (20 * commissions.size()), 0x64000000); context.fill(powderHudX, powderHudY, powderHudX + 200, powderHudY + 40, 0x64000000); } - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions) { int y = 0; for (Commission commission : commissions) { float percentage; @@ -119,7 +119,7 @@ public class DwarvenHud { y += 20; } } - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledPowder) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder) { //render mithril powder then gemstone context.drawTextWithShadow(CLIENT.textRenderer, Text.literal("Mithril: " + mithrilPowder).formatted(Formatting.AQUA), @@ -131,40 +131,40 @@ public class DwarvenHud { } private static void renderSimple(HudCommsWidget hcw, HudPowderWidget hpw, DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List<Commission> commissions) { - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions) { hcw.updateData(commissions, false); hcw.update(); hcw.setX(comHudX); hcw.setY(comHudY); - hcw.render(context, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + hcw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); } - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledPowder) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder) { hpw.update(); hpw.setX(powderHudX); hpw.setY(powderHudY); - hpw.render(context, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + hpw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); } } private static void renderFancy(HudCommsWidget hcw, HudPowderWidget hpw, DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List<Commission> commissions) { - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions) { hcw.updateData(commissions, true); hcw.update(); hcw.setX(comHudX); hcw.setY(comHudY); - hcw.render(context, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + hcw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); } - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledPowder) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder) { hpw.update(); hpw.setX(powderHudX); hpw.setY(powderHudY); - hpw.render(context, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + hpw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); } } public static void update() { if (CLIENT.player == null || CLIENT.getNetworkHandler() == null - || !SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabledPowder + || !SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder || !Utils.isInCrystalHollows() && !Utils.isInDwarvenMines()) { return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index 79a139f9..baa3ed55 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.dwarven; import de.hysky.skyblocker.config.HudConfigScreen; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.MiningConfig; import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import de.hysky.skyblocker.skyblock.tabhud.widget.Widget; import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; @@ -23,7 +24,7 @@ public class DwarvenHudConfigScreen extends HudConfigScreen { public DwarvenHudConfigScreen(Screen parent) { super(Text.literal("Dwarven HUD Config"), parent, List.of(HudCommsWidget.INSTANCE_CFG, HudPowderWidget.INSTANCE_CFG)); - if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.style == SkyblockerConfig.DwarvenHudStyle.CLASSIC) { + if (SkyblockerConfigManager.get().mining.dwarvenHud.style == MiningConfig.DwarvenHudStyle.CLASSIC) { HudCommsWidget.INSTANCE_CFG.setWidth(200); HudCommsWidget.INSTANCE_CFG.setHeight(20 * CFG_COMMS.size()); HudPowderWidget.INSTANCE_CFG.setWidth(200); @@ -35,21 +36,21 @@ public class DwarvenHudConfigScreen extends HudConfigScreen { @Override protected List<IntIntMutablePair> getConfigPos(SkyblockerConfig config) { return List.of( - IntIntMutablePair.of(config.locations.dwarvenMines.dwarvenHud.x, config.locations.dwarvenMines.dwarvenHud.y), - IntIntMutablePair.of(config.locations.dwarvenMines.dwarvenHud.powderX, config.locations.dwarvenMines.dwarvenHud.powderY) + IntIntMutablePair.of(config.mining.dwarvenHud.commissionsX, config.mining.dwarvenHud.commissionsY), + IntIntMutablePair.of(config.mining.dwarvenHud.powderX, config.mining.dwarvenHud.powderY) ); } @Override protected void renderWidget(DrawContext context, List<Widget> widgets) { - DwarvenHud.render(HudCommsWidget.INSTANCE_CFG, HudPowderWidget.INSTANCE_CFG, context, widgets.get(0).getX(), widgets.get(0).getY(), widgets.get(1).getX(), widgets.get(1).getY(), CFG_COMMS); + DwarvenHud.render(HudCommsWidget.INSTANCE_CFG, HudPowderWidget.INSTANCE_CFG, context, widgets.getFirst().getX(), widgets.getFirst().getY(), widgets.get(1).getX(), widgets.get(1).getY(), CFG_COMMS); } @Override protected void savePos(SkyblockerConfig configManager, List<Widget> widgets) { - configManager.locations.dwarvenMines.dwarvenHud.x = widgets.get(0).getX(); - configManager.locations.dwarvenMines.dwarvenHud.y = widgets.get(0).getY(); - configManager.locations.dwarvenMines.dwarvenHud.powderX = widgets.get(1).getX(); - configManager.locations.dwarvenMines.dwarvenHud.powderY = widgets.get(1).getY(); + configManager.mining.dwarvenHud.commissionsX = widgets.getFirst().getX(); + configManager.mining.dwarvenHud.commissionsY = widgets.getFirst().getY(); + configManager.mining.dwarvenHud.powderX = widgets.get(1).getX(); + configManager.mining.dwarvenHud.powderY = widgets.get(1).getY(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Fetchur.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Fetchur.java index 2ddaf6b5..08cb381d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Fetchur.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Fetchur.java @@ -23,7 +23,7 @@ public class Fetchur extends ChatPatternListener { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().locations.dwarvenMines.solveFetchur ? ChatFilterResult.FILTER : ChatFilterResult.PASS; + return SkyblockerConfigManager.get().mining.dwarvenMines.solveFetchur ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/MetalDetector.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/MetalDetector.java index 4d126b7c..dd97e5d1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/MetalDetector.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/MetalDetector.java @@ -101,7 +101,7 @@ public class MetalDetector { * @param overlay if the message is an overlay message */ private static void getDistanceMessage(Text text, boolean overlay) { - if (!overlay || !SkyblockerConfigManager.get().locations.dwarvenMines.metalDetectorHelper || !Utils.isInCrystalHollows() || !(Utils.getIslandArea().substring(2).equals("Mines of Divan")) || CLIENT.player == null) { + if (!overlay || !SkyblockerConfigManager.get().mining.crystalHollows.metalDetectorHelper || !Utils.isInCrystalHollows() || !(Utils.getIslandArea().substring(2).equals("Mines of Divan")) || CLIENT.player == null) { checkChestFound(text); return; } @@ -236,12 +236,12 @@ public class MetalDetector { */ private static void render(WorldRenderContext context) { //only render enabled and if there is a few location options and in the mines of divan - if (!SkyblockerConfigManager.get().locations.dwarvenMines.metalDetectorHelper || !Utils.isInCrystalHollows() || possibleBlocks.isEmpty() || possibleBlocks.size() > 8 || !(Utils.getIslandArea().substring(2).equals("Mines of Divan"))) { + if (!SkyblockerConfigManager.get().mining.crystalHollows.metalDetectorHelper || !Utils.isInCrystalHollows() || possibleBlocks.isEmpty() || possibleBlocks.size() > 8 || !(Utils.getIslandArea().substring(2).equals("Mines of Divan"))) { return; } //only one location render just that and guiding line to it if (possibleBlocks.size() == 1) { - Vec3i block = possibleBlocks.get(0).add(0, -1, 0); //the block you are taken to is one block above the chest + Vec3i block = possibleBlocks.getFirst().add(0, -1, 0); //the block you are taken to is one block above the chest CrystalsWaypoint waypoint = new CrystalsWaypoint(CrystalsWaypoint.Category.CORLEONE, Text.translatable("skyblocker.dwarvenMines.metalDetectorHelper.treasure"), new BlockPos(block.getX(), block.getY(), block.getZ())); waypoint.render(context); RenderHelper.renderLineFromCursor(context, Vec3d.ofCenter(block), LIGHT_GRAY, 1f, 5f); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Puzzler.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Puzzler.java index 1f5c0c90..400f40ff 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Puzzler.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/Puzzler.java @@ -18,7 +18,7 @@ public class Puzzler extends ChatPatternListener { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().locations.dwarvenMines.solvePuzzler ? null : ChatFilterResult.PASS; + return SkyblockerConfigManager.get().mining.dwarvenMines.solvePuzzler ? null : ChatFilterResult.PASS; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java index a2298ecf..8f7ef286 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java @@ -46,7 +46,7 @@ public class BeaconHighlighter { * @param context An instance of WorldRenderContext for the RenderHelper to use */ private static void render(WorldRenderContext context) { - if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) { + if (Utils.isInTheEnd() && SkyblockerConfigManager.get().slayers.endermanSlayer.highlightBeacons) { for (BlockPos pos : beaconPositions) { RenderHelper.renderFilled(context, pos, RED_COLOR_COMPONENTS, 0.5f, true); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudConfigScreen.java index 659fc79f..4540ce6e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudConfigScreen.java @@ -17,12 +17,12 @@ public class EndHudConfigScreen extends HudConfigScreen { @SuppressWarnings("SuspiciousNameCombination") @Override protected List<IntIntMutablePair> getConfigPos(SkyblockerConfig config) { - return List.of(IntIntMutablePair.of(config.locations.end.x, config.locations.end.y)); + return List.of(IntIntMutablePair.of(config.otherLocations.end.x, config.otherLocations.end.y)); } @Override protected void savePos(SkyblockerConfig configManager, List<Widget> widgets) { - configManager.locations.end.x = widgets.get(0).getX(); - configManager.locations.end.y = widgets.get(0).getY(); + configManager.otherLocations.end.x = widgets.getFirst().getX(); + configManager.otherLocations.end.y = widgets.getFirst().getY(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java index ca3c8cd8..53c4336e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -37,15 +37,15 @@ public class EndHudWidget extends Widget { ENDERMAN_HEAD.set(DataComponentTypes.PROFILE, new ProfileComponent(Optional.of("MHF_Enderman"), Optional.empty(), new PropertyMap())); POPPY.addEnchantment(Enchantments.INFINITY, 1); - INSTANCE.setX(SkyblockerConfigManager.get().locations.end.x); - INSTANCE.setY(SkyblockerConfigManager.get().locations.end.y); + INSTANCE.setX(SkyblockerConfigManager.get().otherLocations.end.x); + INSTANCE.setY(SkyblockerConfigManager.get().otherLocations.end.y); } @Override public void updateContent() { // Zealots - if (SkyblockerConfigManager.get().locations.end.zealotKillsEnabled) { + if (SkyblockerConfigManager.get().otherLocations.end.zealotKillsEnabled) { addComponent(new IcoTextComponent(ENDERMAN_HEAD, Text.literal("Zealots").formatted(Formatting.BOLD))); addComponent(new PlainTextComponent(Text.translatable("skyblocker.end.hud.zealotsSinceLastEye", TheEnd.zealotsSinceLastEye))); addComponent(new PlainTextComponent(Text.translatable("skyblocker.end.hud.zealotsTotalKills", TheEnd.zealotsKilled))); @@ -57,7 +57,7 @@ public class EndHudWidget extends Widget { } // Endstone protector - if (SkyblockerConfigManager.get().locations.end.protectorLocationEnabled) { + if (SkyblockerConfigManager.get().otherLocations.end.protectorLocationEnabled) { addComponent(new IcoTextComponent(POPPY, Text.literal("Endstone Protector").formatted(Formatting.BOLD))); if (TheEnd.stage == 5) { addComponent(new PlainTextComponent(Text.translatable("skyblocker.end.hud.stage", "IMMINENT"))); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EnderNodes.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EnderNodes.java index b4af7256..b0282a69 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EnderNodes.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EnderNodes.java @@ -98,7 +98,7 @@ public class EnderNodes { } private static boolean shouldProcess() { - return SkyblockerConfigManager.get().locations.end.enableEnderNodeHelper && Utils.isInTheEnd(); + return SkyblockerConfigManager.get().otherLocations.end.enableEnderNodeHelper && Utils.isInTheEnd(); } private static void reset() { @@ -117,7 +117,7 @@ public class EnderNodes { private long lastConfirmed; private EnderNode(BlockPos pos) { - super(pos, () -> SkyblockerConfigManager.get().general.waypoints.waypointType, DyeColor.CYAN.getColorComponents(), false); + super(pos, () -> SkyblockerConfigManager.get().uiAndVisuals.waypoints.waypointType, DyeColor.CYAN.getColorComponents(), false); } private void updateParticles() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/TheEnd.java b/src/main/java/de/hysky/skyblocker/skyblock/end/TheEnd.java index 6f2a0e40..ac961dd8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/TheEnd.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/TheEnd.java @@ -75,9 +75,9 @@ public class TheEnd { HudRenderEvents.AFTER_MAIN_HUD.register((drawContext, tickDelta) -> { if (!Utils.isInTheEnd()) return; - if (!SkyblockerConfigManager.get().locations.end.hudEnabled) return; + if (!SkyblockerConfigManager.get().otherLocations.end.hudEnabled) return; - EndHudWidget.INSTANCE.render(drawContext, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + EndHudWidget.INSTANCE.render(drawContext, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); }); ClientChunkEvents.CHUNK_LOAD.register((world, chunk) -> { @@ -183,7 +183,7 @@ public class TheEnd { if (entities.isEmpty()) { return false; } - return entities.get(0).getName().getString().toLowerCase().contains("zealot"); + return entities.getFirst().getName().getString().toLowerCase().contains("zealot"); } public static boolean isSpecialZealot(EndermanEntity enderman) { @@ -261,7 +261,7 @@ public class TheEnd { } private static void renderWaypoint(WorldRenderContext context) { - if (!SkyblockerConfigManager.get().locations.end.waypoint) return; + if (!SkyblockerConfigManager.get().otherLocations.end.waypoint) return; if (currentProtectorLocation == null || stage != 5) return; currentProtectorLocation.waypoint().render(context); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java index 5522ceca..095c5d10 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java @@ -30,11 +30,11 @@ public class MobBoundingBoxes { String name = entity.getName().getString(); return switch (entity) { - case PlayerEntity _p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes; + case PlayerEntity _p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes; case ArmorStandEntity _armorStand -> false; // Regular Mobs - default -> SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes && MobGlow.isStarred(entity); + default -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes && MobGlow.isStarred(entity); }; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index 75ba700e..d6f9410b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -1,6 +1,5 @@ package de.hysky.skyblocker.skyblock.entity; -import com.mojang.authlib.properties.Property; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dungeon.LividColor; import de.hysky.skyblocker.skyblock.end.TheEnd; @@ -8,15 +7,12 @@ import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.SlayerUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.ProfileComponent; import net.minecraft.entity.Entity; import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.entity.mob.EndermanEntity; import net.minecraft.entity.passive.BatEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.predicate.entity.EntityPredicates; import net.minecraft.util.Formatting; import net.minecraft.util.math.Box; @@ -36,27 +32,27 @@ public class MobGlow { if (Utils.isInDungeons() && !entity.isInvisible()) { return switch (entity) { // Minibosses - case PlayerEntity p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().locations.dungeons.starredMobGlow; + case PlayerEntity p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().dungeons.starredMobGlow; case PlayerEntity p when LividColor.LIVID_NAMES.contains(name) -> LividColor.shouldGlow(name); // Bats - case BatEntity b -> SkyblockerConfigManager.get().locations.dungeons.starredMobGlow || SkyblockerConfigManager.get().locations.dungeons.starredMobBoundingBoxes; + case BatEntity b -> SkyblockerConfigManager.get().dungeons.starredMobGlow || SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes; // Armor Stands case ArmorStandEntity _armorStand -> false; // Regular Mobs - default -> SkyblockerConfigManager.get().locations.dungeons.starredMobGlow && isStarred(entity); + default -> SkyblockerConfigManager.get().dungeons.starredMobGlow && isStarred(entity); }; } return switch (entity) { // Rift - case PlayerEntity p when Utils.isInTheRift() && !entity.isInvisible() && name.equals("Blobbercyst ") -> SkyblockerConfigManager.get().locations.rift.blobbercystGlow; + case PlayerEntity p when Utils.isInTheRift() && !entity.isInvisible() && name.equals("Blobbercyst ") -> SkyblockerConfigManager.get().otherLocations.rift.blobbercystGlow; // Enderman Slayer // Highlights Nukekubi Heads - case ArmorStandEntity armorStand when Utils.isInTheEnd() && SlayerUtils.isInSlayer() && isNukekubiHead(armorStand) -> SkyblockerConfigManager.get().slayer.endermanSlayer.highlightNukekubiHeads; + case ArmorStandEntity armorStand when Utils.isInTheEnd() && SlayerUtils.isInSlayer() && isNukekubiHead(armorStand) -> SkyblockerConfigManager.get().slayers.endermanSlayer.highlightNukekubiHeads; // Special Zelot case EndermanEntity enderman when Utils.isInTheEnd() && !entity.isInvisible() -> TheEnd.isSpecialZealot(enderman); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java index 98738112..f43b1842 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.experiment; import com.google.common.collect.ImmutableMap; import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.gui.screen.Screen; @@ -52,7 +53,7 @@ public class ChronomatronSolver extends ExperimentSolver { } @Override - protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + protected boolean isEnabled(HelperConfig.Experiments experimentsConfig) { return experimentsConfig.enableChronomatronSolver; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java index 6efcd420..f91055c7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.experiment; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.render.gui.ContainerSolver; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.screen.Screen; @@ -37,10 +37,10 @@ public abstract class ExperimentSolver extends ContainerSolver { @Override protected final boolean isEnabled() { - return isEnabled(SkyblockerConfigManager.get().general.experiments); + return isEnabled(SkyblockerConfigManager.get().helpers.experiments); } - protected abstract boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig); + protected abstract boolean isEnabled(HelperConfig.Experiments experimentsConfig); @Override protected void start(GenericContainerScreen screen) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java index e7502c89..f4850bf8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.experiment; import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.gui.screen.Screen; @@ -28,7 +29,7 @@ public class SuperpairsSolver extends ExperimentSolver { } @Override - protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + protected boolean isEnabled(HelperConfig.Experiments experimentsConfig) { return experimentsConfig.enableSuperpairsSolver; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 3f1fc72d..88f0e5c3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.experiment; import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.render.gui.ColorHighlight; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import net.minecraft.client.gui.screen.Screen; @@ -28,7 +29,7 @@ public class UltrasequencerSolver extends ExperimentSolver { } @Override - protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + protected boolean isEnabled(HelperConfig.Experiments experimentsConfig) { return experimentsConfig.enableUltrasequencerSolver; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java index 2ee119fe..141a48ed 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/FancyStatusBars.java @@ -2,8 +2,8 @@ package de.hysky.skyblocker.skyblock.fancybars; import com.google.gson.JsonObject; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.skyblock.StatusBarTracker; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.Scheduler; @@ -58,7 +58,7 @@ public class FancyStatusBars { // Fetch from old status bar config int[] counts = new int[3]; // counts for RIGHT, LAYER1, LAYER2 StatusBar health = statusBars.get("health"); - SkyblockerConfig.OldBarPositions barPositions = SkyblockerConfigManager.get().general.bars.barPositions; + UIAndVisualsConfig.OldBarPositions barPositions = SkyblockerConfigManager.get().uiAndVisuals.bars.barPositions; loadOldBarPosition(health, counts, barPositions.healthBarPosition); StatusBar intelligence = statusBars.get("intelligence"); loadOldBarPosition(intelligence, counts, barPositions.manaBarPosition); @@ -103,7 +103,7 @@ public class FancyStatusBars { * @param counts the counts for each bar position (LAYER1, LAYER2, RIGHT) * @param position the position to load */ - private static void loadOldBarPosition(StatusBar bar, int[] counts, SkyblockerConfig.OldBarPosition position) { + private static void loadOldBarPosition(StatusBar bar, int[] counts, UIAndVisualsConfig.OldBarPosition position) { switch (position) { case RIGHT: bar.anchor = BarPositioner.BarAnchor.HOTBAR_RIGHT; @@ -265,7 +265,7 @@ public class FancyStatusBars { public boolean render(DrawContext context, int scaledWidth, int scaledHeight) { var player = client.player; - if (!SkyblockerConfigManager.get().general.bars.enableBars || player == null || Utils.isInTheRift()) + if (!SkyblockerConfigManager.get().uiAndVisuals.bars.enableBars || player == null || Utils.isInTheRift()) return false; Collection<StatusBar> barCollection = statusBars.values(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/AbilityFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/AbilityFilter.java index 17842891..1675dd89 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/AbilityFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/AbilityFilter.java @@ -10,6 +10,6 @@ public class AbilityFilter extends SimpleChatFilter { @Override protected ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideAbility; + return SkyblockerConfigManager.get().chat.hideAbility; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/AdFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/AdFilter.java index 5c9cd4a5..53f7066c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/AdFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/AdFilter.java @@ -34,6 +34,6 @@ public class AdFilter extends ChatPatternListener { @Override protected ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideAds; + return SkyblockerConfigManager.get().chat.hideAds; } }
\ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/AoteFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/AoteFilter.java index 5d660037..98e252f3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/AoteFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/AoteFilter.java @@ -10,6 +10,6 @@ public class AoteFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideAOTE; + return SkyblockerConfigManager.get().chat.hideAOTE; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/AutopetFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/AutopetFilter.java index 958be11e..3e535ec9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/AutopetFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/AutopetFilter.java @@ -16,7 +16,7 @@ public class AutopetFilter extends ChatPatternListener { @Override public boolean onMatch(Text _message, Matcher matcher) { - if (SkyblockerConfigManager.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR) { + if (SkyblockerConfigManager.get().chat.hideAutopet == ChatFilterResult.ACTION_BAR) { Objects.requireNonNull(MinecraftClient.getInstance().player).sendMessage( Text.literal( _message.getString().replace("VIEW RULE", "") @@ -27,9 +27,9 @@ public class AutopetFilter extends ChatPatternListener { @Override public ChatFilterResult state() { - if (SkyblockerConfigManager.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR) + if (SkyblockerConfigManager.get().chat.hideAutopet == ChatFilterResult.ACTION_BAR) return ChatFilterResult.FILTER; else - return SkyblockerConfigManager.get().messages.hideAutopet; + return SkyblockerConfigManager.get().chat.hideAutopet; } }
\ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/ComboFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/ComboFilter.java index d6a40d2d..e6103720 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/ComboFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/ComboFilter.java @@ -11,6 +11,6 @@ public class ComboFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideCombo; + return SkyblockerConfigManager.get().chat.hideCombo; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/DeathFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/DeathFilter.java index f2b9e7c5..b286c9b5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/DeathFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/DeathFilter.java @@ -15,7 +15,7 @@ public class DeathFilter extends ChatPatternListener { @Override protected ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideDeath; + return SkyblockerConfigManager.get().chat.hideDeath; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/DicerFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/DicerFilter.java index a3f78684..b2022f1f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/DicerFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/DicerFilter.java @@ -10,6 +10,6 @@ public class DicerFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideDicer; + return SkyblockerConfigManager.get().chat.hideDicer; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/HealFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/HealFilter.java index 8b46efb5..604a0f5c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/HealFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/HealFilter.java @@ -10,6 +10,6 @@ public class HealFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideHeal; + return SkyblockerConfigManager.get().chat.hideHeal; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/ImplosionFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/ImplosionFilter.java index 730f6d5d..a120c0e5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/ImplosionFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/ImplosionFilter.java @@ -10,6 +10,6 @@ public class ImplosionFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideImplosion; + return SkyblockerConfigManager.get().chat.hideImplosion; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/MimicFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/MimicFilter.java index cb845254..1659713c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/MimicFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/MimicFilter.java @@ -11,12 +11,12 @@ import java.util.regex.Matcher; public class MimicFilter extends ChatPatternListener { public MimicFilter() { - super(".*?(?:Mimic dead!?|Mimic Killed!|\\$SKYTILS-DUNGEON-SCORE-MIMIC\\$|\\Q" + SkyblockerConfigManager.get().locations.dungeons.mimicMessage.mimicMessage + "\\E)$"); + super(".*?(?:Mimic dead!?|Mimic Killed!|\\$SKYTILS-DUNGEON-SCORE-MIMIC\\$|\\Q" + SkyblockerConfigManager.get().dungeons.mimicMessage.mimicMessage + "\\E)$"); } @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideMimicKill; + return SkyblockerConfigManager.get().chat.hideMimicKill; } @Override diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/MoltenWaveFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/MoltenWaveFilter.java index aa3bb64d..d935138b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/MoltenWaveFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/MoltenWaveFilter.java @@ -10,6 +10,6 @@ public class MoltenWaveFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideMoltenWave; + return SkyblockerConfigManager.get().chat.hideMoltenWave; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/ShowOffFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/ShowOffFilter.java index 84d32007..94c23504 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/ShowOffFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/ShowOffFilter.java @@ -14,6 +14,6 @@ public class ShowOffFilter extends SimpleChatFilter { @Override protected ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideShowOff; + return SkyblockerConfigManager.get().chat.hideShowOff; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/TeleportPadFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/TeleportPadFilter.java index 57fac590..5c30b039 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/TeleportPadFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/TeleportPadFilter.java @@ -11,6 +11,6 @@ public class TeleportPadFilter extends SimpleChatFilter { @Override public ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideTeleportPad; + return SkyblockerConfigManager.get().chat.hideTeleportPad; } }
\ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/filters/ToggleSkyMallFilter.java b/src/main/java/de/hysky/skyblocker/skyblock/filters/ToggleSkyMallFilter.java index 6ee13aff..b1907391 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/filters/ToggleSkyMallFilter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/filters/ToggleSkyMallFilter.java @@ -11,6 +11,6 @@ public class ToggleSkyMallFilter extends SimpleChatFilter { @Override protected ChatFilterResult state() { - return SkyblockerConfigManager.get().messages.hideToggleSkyMall; + return SkyblockerConfigManager.get().chat.hideToggleSkyMall; } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java index 43fdf001..201e6716 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHud.java @@ -67,7 +67,7 @@ public class FarmingHud { } FarmingHudWidget.INSTANCE.update(); - FarmingHudWidget.INSTANCE.render(context, SkyblockerConfigManager.get().general.tabHud.enableHudBackground); + FarmingHudWidget.INSTANCE.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); } }); ClientPlayerBlockBreakEvents.AFTER.register((world, player, pos, state) -> { @@ -93,7 +93,7 @@ public class FarmingHud { } private static boolean shouldRender() { - return SkyblockerConfigManager.get().locations.garden.farmingHud.enableHud && Utils.getLocation() == Location.GARDEN; + return SkyblockerConfigManager.get().farming.garden.farmingHud.enableHud && Utils.getLocation() == Location.GARDEN; } public static int counter() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudConfigScreen.java index 5384d47a..0271c66a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudConfigScreen.java @@ -18,13 +18,13 @@ public class FarmingHudConfigScreen extends HudConfigScreen { @Override protected List<IntIntMutablePair> getConfigPos(SkyblockerConfig config) { return List.of( - IntIntMutablePair.of(config.locations.garden.farmingHud.x, config.locations.garden.farmingHud.y) + IntIntMutablePair.of(config.farming.garden.farmingHud.x, config.farming.garden.farmingHud.y) ); } @Override protected void savePos(SkyblockerConfig configManager, List<Widget> widgets) { - configManager.locations.garden.farmingHud.x = widgets.get(0).getX(); - configManager.locations.garden.farmingHud.y = widgets.get(0).getY(); + configManager.farming.garden.farmingHud.x = widgets.getFirst().getX(); + configManager.farming.garden.farmingHud.y = widgets.getFirst().getY(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java index d03323be..f12f6fa8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -49,8 +49,8 @@ public class FarmingHudWidget extends Widget { public FarmingHudWidget() { super(TITLE, Formatting.YELLOW.getColorValue()); - setX(SkyblockerConfigManager.get().locations.garden.farmingHud.x); - setY(SkyblockerConfigManager.get().locations.garden.farmingHud.y); + setX(SkyblockerConfigManager.get().farming.garden.farmingHud.x); + setY(SkyblockerConfigManager.get().farming.garden.farmingHud.y); update(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java index edea50de..ee857618 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java @@ -18,10 +18,10 @@ public class LowerSensitivity { if (sensitivityLowered) lowerSensitivity(false); return; } - if (SkyblockerConfigManager.get().locations.garden.lockMouseTool) { + if (SkyblockerConfigManager.get().farming.garden.lockMouseTool) { ItemStack mainHandStack = MinecraftClient.getInstance().player.getMainHandStack(); String itemId = ItemUtils.getItemId(mainHandStack); - boolean shouldLockMouse = FarmingHudWidget.FARMING_TOOLS.containsKey(itemId) && (!SkyblockerConfigManager.get().locations.garden.lockMouseGroundOnly || MinecraftClient.getInstance().player.isOnGround()); + boolean shouldLockMouse = FarmingHudWidget.FARMING_TOOLS.containsKey(itemId) && (!SkyblockerConfigManager.get().farming.garden.lockMouseGroundOnly || MinecraftClient.getInstance().player.isOnGround()); if (shouldLockMouse && !sensitivityLowered) lowerSensitivity(true); else if (!shouldLockMouse && sensitivityLowered) lowerSensitivity(false); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java index c855c3e3..682933f4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java @@ -46,7 +46,7 @@ public class VisitorHelper { public static void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { String title = screen.getTitle().getString(); - if (SkyblockerConfigManager.get().locations.garden.visitorHelper && screen instanceof HandledScreen<?> handledScreen && (Utils.getLocationRaw().equals("garden") && !title.contains("Logbook") || title.startsWith("Bazaar"))) { + if (SkyblockerConfigManager.get().farming.garden.visitorHelper && screen instanceof HandledScreen<?> handledScreen && (Utils.getLocationRaw().equals("garden") && !title.contains("Logbook") || title.startsWith("Bazaar"))) { ScreenEvents.afterRender(screen).register((screen_, context, mouseX, mouseY, delta) -> renderScreen(title, context, client.textRenderer, handledScreen.getScreenHandler(), mouseX, mouseY)); } }); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java index be934810..96c21d22 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemCooldowns.java @@ -75,7 +75,7 @@ public class ItemCooldowns { } public static void afterBlockBreak(World world, PlayerEntity player, BlockPos pos, BlockState state) { - if (!SkyblockerConfigManager.get().general.itemCooldown.enableItemCooldowns) return; + if (!SkyblockerConfigManager.get().uiAndVisuals.itemCooldown.enableItemCooldowns) return; String usedItemId = ItemUtils.getItemId(player.getMainHandStack()); if (usedItemId.isEmpty()) return; if (state.isIn(BlockTags.LOGS)) { @@ -89,7 +89,7 @@ public class ItemCooldowns { } private static TypedActionResult<ItemStack> onItemInteract(PlayerEntity player, World world, Hand hand) { - if (!SkyblockerConfigManager.get().general.itemCooldown.enableItemCooldowns) + if (!SkyblockerConfigManager.get().uiAndVisuals.itemCooldown.enableItemCooldowns) return TypedActionResult.pass(ItemStack.EMPTY); String usedItemId = ItemUtils.getItemId(player.getMainHandStack()); if (usedItemId.equals(GRAPPLING_HOOK_ID) && player.fishHook != null) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java index 8a23ea6d..c34e8926 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemRarityBackgrounds.java @@ -10,6 +10,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.utils.ItemUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.Scheduler; @@ -23,7 +24,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.Text; public class ItemRarityBackgrounds { - private static final SkyblockerConfig.ItemInfoDisplay CONFIG = SkyblockerConfigManager.get().general.itemInfoDisplay; + private static final GeneralConfig.ItemInfoDisplay CONFIG = SkyblockerConfigManager.get().general.itemInfoDisplay; private static final Supplier<Sprite> SPRITE = () -> MinecraftClient.getInstance().getGuiAtlasManager().getSprite(CONFIG.itemRarityBackgroundStyle.tex); public static final ImmutableMap<String, SkyblockItemRarity> LORE_RARITIES = ImmutableMap.ofEntries( Map.entry("ADMIN", SkyblockItemRarity.ADMIN), diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java index 0cffa05c..d2fda215 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.skyblock.item.MuseumItemCache; import de.hysky.skyblocker.skyblock.item.tooltip.AccessoriesHelper.AccessoryReport; import de.hysky.skyblocker.utils.Constants; @@ -33,7 +34,7 @@ import java.util.concurrent.CompletableFuture; public class ItemTooltip { protected static final Logger LOGGER = LoggerFactory.getLogger(ItemTooltip.class.getName()); private static final MinecraftClient client = MinecraftClient.getInstance(); - protected static final SkyblockerConfig.ItemTooltip config = SkyblockerConfigManager.get().general.itemTooltip; + protected static final GeneralConfig.ItemTooltip config = SkyblockerConfigManager.get().general.itemTooltip; private static volatile boolean sentNullWarning = false; public static void getTooltip(ItemStack stack, Item.TooltipContext tooltipContext, TooltipType tooltipType, List<Text> lines) { @@ -99,10 +100,10 @@ public class ItemTooltip { neuName = getNeuName(internalID, neuName); if (!neuName.isEmpty() && lbinExist) { - SkyblockerConfig.Average type = config.avg; + GeneralConfig.Average type = config.avg; // "No data" line because of API not keeping old data, it causes NullPointerException - if (type == SkyblockerConfig.Average.ONE_DAY || type == SkyblockerConfig.Average.BOTH) { + if (type == GeneralConfig.Average.ONE_DAY || type == GeneralConfig.Average.BOTH) { lines.add( Text.literal(String.format("%-19s", "1 Day Avg. Price:")) .formatted(Formatting.GOLD) @@ -112,7 +113,7 @@ public class ItemTooltip { ) ); } - if (type == SkyblockerConfig.Average.THREE_DAY || type == SkyblockerConfig.Average.BOTH) { + if (type == GeneralConfig.Average.THREE_DAY || type == GeneralConfig.Average.BOTH) { lines.add( Text.literal(String.format("%-19s", "3 Day Avg. Price:")) .formatted(Formatting.GOLD) @@ -139,7 +140,7 @@ public class ItemTooltip { 10, "M7" ); - if (SkyblockerConfigManager.get().general.dungeonQuality) { + if (SkyblockerConfigManager.get().general.itemTooltip.dungeonQuality) { NbtCompound customData = ItemUtils.getCustomData(stack); if (customData != null && customData.contains("baseStatBoostPercentage")) { int baseStatBoostPercentage = customData.getInt("baseStatBoostPercentage"); @@ -372,7 +373,7 @@ public class ItemTooltip { } private static Text getMotesMessage(int price, int count) { - float motesMultiplier = SkyblockerConfigManager.get().locations.rift.mcGrubberStacks * 0.05f + 1; + float motesMultiplier = SkyblockerConfigManager.get().otherLocations.rift.mcGrubberStacks * 0.05f + 1; // Calculate the total price int totalPrice = price * count; @@ -413,14 +414,14 @@ public class ItemTooltip { TooltipInfoType.LOWEST_BINS.downloadIfEnabled(futureList); if (config.enableAvgBIN) { - SkyblockerConfig.Average type = config.avg; + GeneralConfig.Average type = config.avg; - if (type == SkyblockerConfig.Average.BOTH || TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null || minute % 5 == 0) { + if (type == GeneralConfig.Average.BOTH || TooltipInfoType.ONE_DAY_AVERAGE.getData() == null || TooltipInfoType.THREE_DAY_AVERAGE.getData() == null || minute % 5 == 0) { TooltipInfoType.ONE_DAY_AVERAGE.download(futureList); TooltipInfoType.THREE_DAY_AVERAGE.download(futureList); - } else if (type == SkyblockerConfig.Average.ONE_DAY) { + } else if (type == GeneralConfig.Average.ONE_DAY) { TooltipInfoType.ONE_DAY_AVERAGE.download(futureList); - } else if (type == SkyblockerConfig.Average.THREE_DAY) { + } else if (type == GeneralConfig.Average.THREE_DAY) { TooltipInfoType.THREE_DAY_AVERAGE.download(futureList); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java index 6edee8d6..88f09496 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipInfoType.java @@ -4,6 +4,7 @@ import com.google.gson.JsonObject; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.GeneralConfig; import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.Utils; @@ -17,10 +18,10 @@ import org.jetbrains.annotations.Nullable; public enum TooltipInfoType implements Runnable { NPC("https://hysky.de/api/npcprice", itemTooltip -> itemTooltip.enableNPCPrice, true), - BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().general.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), - LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().general.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableLowestBIN, false), + BAZAAR("https://hysky.de/api/bazaar", itemTooltip -> itemTooltip.enableBazaarPrice || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableBazaarPrice, false), + LOWEST_BINS("https://hysky.de/api/auctions/lowestbins", itemTooltip -> itemTooltip.enableLowestBIN || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.enableProfitCalculator || SkyblockerConfigManager.get().dungeons.dungeonChestProfit.croesusProfit || SkyblockerConfigManager.get().uiAndVisuals.chestValue.enableChestValue, itemTooltip -> itemTooltip.enableLowestBIN, false), ONE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/1day.json", itemTooltip -> itemTooltip.enableAvgBIN, false), - THREE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/3day.json", itemTooltip -> itemTooltip.enableAvgBIN || SkyblockerConfigManager.get().general.searchOverlay.enableAuctionHouse, itemTooltip -> itemTooltip.enableAvgBIN, false), + THREE_DAY_AVERAGE("https://hysky.de/api/auctions/lowestbins/average/3day.json", itemTooltip -> itemTooltip.enableAvgBIN || SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableAuctionHouse, itemTooltip -> itemTooltip.enableAvgBIN, false), MOTES("https://hysky.de/api/motesprice", itemTooltip -> itemTooltip.enableMotesPrice, itemTooltip -> itemTooltip.enableMotesPrice && Utils.isInTheRift(), true), OBTAINED(itemTooltip -> itemTooltip.enableObtainedDate), MUSEUM("https://hysky.de/api/museum", itemTooltip -> itemTooltip.enableMuseumInfo, true), @@ -28,8 +29,8 @@ public enum TooltipInfoType implements Runnable { ACCESSORIES("https://hysky.de/api/accessories", itemTooltip -> itemTooltip.enableAccessoriesHelper, true, AccessoriesHelper::refreshData); private final String address; - private final Predicate<SkyblockerConfig.ItemTooltip> dataEnabled; - private final Predicate<SkyblockerConfig.ItemTooltip> tooltipEnabled; + private final Predicate<GeneralConfig.ItemTooltip> dataEnabled; + private final Predicate<GeneralConfig.ItemTooltip> tooltipEnabled; private JsonObject data; private final boolean cacheable; private long hash; @@ -38,7 +39,7 @@ public enum TooltipInfoType implements Runnable { /** * Use this for when you're adding tooltip info that has no data associated with it */ - TooltipInfoType(Predicate<SkyblockerConfig.ItemTooltip> enabled) { + TooltipInfoType(Predicate<GeneralConfig.ItemTooltip> enabled) { this(null, itemTooltip -> false, enabled, false, null); } @@ -48,7 +49,7 @@ public enum TooltipInfoType implements Runnable { * @param cacheable whether the data should be cached * @param callback called when the {@code data} is refreshed */ - TooltipInfoType(String address, Predicate<SkyblockerConfig.ItemTooltip> enabled, boolean cacheable, Consumer<JsonObject> callback) { + TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> enabled, boolean cacheable, Consumer<JsonObject> callback) { this(address, enabled, enabled, cacheable, callback); } @@ -57,7 +58,7 @@ public enum TooltipInfoType implements Runnable { * @param enabled the predicate to check if the data should be downloaded and the tooltip should be shown * @param cacheable whether the data should be cached */ - TooltipInfoType(String address, Predicate<SkyblockerConfig.ItemTooltip> enabled, boolean cacheable) { + TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> enabled, boolean cacheable) { this(address, enabled, enabled, cacheable, null); } @@ -67,7 +68,7 @@ public enum TooltipInfoType implements Runnable { * @param tooltipEnabled the predicate to check if the tooltip should be shown * @param cacheable whether the data should be cached */ - TooltipInfoType(String address, Predicate<SkyblockerConfig.ItemTooltip> dataEnabled, Predicate<SkyblockerConfig.ItemTooltip> tooltipEnabled, boolean cacheable) { + TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> dataEnabled, Predicate<GeneralConfig.ItemTooltip> tooltipEnabled, boolean cacheable) { this(address, dataEnabled, tooltipEnabled, cacheable, null); } @@ -75,10 +76,9 @@ public enum TooltipInfoType implements Runnable { * @param address the address to download the data from * @param dataEnabled the predicate to check if data should be downloaded * @param tooltipEnabled the predicate to check if the tooltip should be shown - * @param data the data * @param cacheable whether the data should be cached */ - TooltipInfoType(String address, Predicate<SkyblockerConfig.ItemTooltip> dataEnabled, Predicate<SkyblockerConfig.ItemTooltip> tooltipEnabled, boolean cacheable, @Nullable Consumer<JsonObject> callback) { + TooltipInfoType(String address, Predicate<GeneralConfig.ItemTooltip> dataEnabled, Predicate<GeneralConfig.ItemTooltip> tooltipEnabled, boolean cacheable, @Nullable Consumer<JsonObject> callback) { this.address = address; this.dataEnabled = dataEnabled; this.tooltipEnabled = tooltipEnabled; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java index 4fd0f8cd..5ac0ba8d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java @@ -71,7 +71,7 @@ public class ItemRepository { } List<String> info = item.getInfo(); - String wikiLink0 = info.get(0); + String wikiLink0 = info.getFirst(); String wikiLink1 = info.size() > 1 ? info.get(1) : ""; String wikiDomain = SkyblockerConfigManager.get().general.wikiLookup.officialWiki ? "https://wiki.hypixel.net" : "https://hypixel-skyblock.fandom.com"; if (wikiLink0.startsWith(wikiDomain)) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java index 961a2cc2..1ef352e3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java @@ -93,7 +93,7 @@ public class SearchResultsWidget implements Drawable { SkyblockCraftingRecipe recipe = this.recipeResults.get(this.currentPage); for (ResultButtonWidget button : resultButtons) button.clearItemStack(); - resultButtons.get(5).setItemStack(recipe.getGrid().get(0)); + resultButtons.get(5).setItemStack(recipe.getGrid().getFirst()); resultButtons.get(6).setItemStack(recipe.getGrid().get(1)); resultButtons.get(7).setItemStack(recipe.getGrid().get(2)); resultButtons.get(10).setItemStack(recipe.getGrid().get(3)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java index 8e203b84..5529e466 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNav.java @@ -2,8 +2,8 @@ package de.hysky.skyblocker.skyblock.quicknav; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.QuickNavigationConfig; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.datafixer.ItemStackComponentizationFixer; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; @@ -14,6 +14,8 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.nbt.StringNbtReader; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.List; @@ -21,6 +23,7 @@ import java.util.Locale; import java.util.regex.PatternSyntaxException; public class QuickNav { + private static final Logger LOGGER = LoggerFactory.getLogger(QuickNav.class); public static void init() { ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { @@ -34,7 +37,7 @@ public class QuickNav { public static List<QuickNavButton> init(String screenTitle) { List<QuickNavButton> buttons = new ArrayList<>(); - SkyblockerConfig.QuickNav data = SkyblockerConfigManager.get().quickNav; + QuickNavigationConfig data = SkyblockerConfigManager.get().quickNav; try { if (data.button1.render) buttons.add(parseButton(data.button1, screenTitle, 0)); if (data.button2.render) buttons.add(parseButton(data.button2, screenTitle, 1)); @@ -49,21 +52,21 @@ public class QuickNav { if (data.button11.render) buttons.add(parseButton(data.button11, screenTitle, 10)); if (data.button12.render) buttons.add(parseButton(data.button12, screenTitle, 11)); } catch (CommandSyntaxException e) { - e.printStackTrace(); + LOGGER.error("[Skyblocker] Failed to initialize Quick Nav Button", e); } return buttons; } - private static QuickNavButton parseButton(SkyblockerConfig.QuickNavItem buttonInfo, String screenTitle, int id) throws CommandSyntaxException { - SkyblockerConfig.ItemData itemData = buttonInfo.item; - String nbtString = "{id:\"minecraft:" + itemData.itemName.toLowerCase(Locale.ROOT) + "\",Count:1"; + private static QuickNavButton parseButton(QuickNavigationConfig.QuickNavItem buttonInfo, String screenTitle, int id) throws CommandSyntaxException { + QuickNavigationConfig.ItemData itemData = buttonInfo.item; + String nbtString = "{id:\"minecraft:" + itemData.id.toLowerCase(Locale.ROOT) + "\",Count:1"; if (itemData.nbt.length() > 2) nbtString += "," + itemData.nbt; nbtString += "}"; boolean uiTitleMatches = false; try { uiTitleMatches = screenTitle.matches(buttonInfo.uiTitle); } catch (PatternSyntaxException e) { - e.printStackTrace(); + LOGGER.error("[Skyblocker] Failed to parse Quick Nav Button", e); ClientPlayerEntity player = MinecraftClient.getInstance().player; if (player != null) { player.sendMessage(Text.of(Formatting.RED + "[Skyblocker] Invalid regex in quicknav button " + (id + 1) + "!"), false); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/EffigyWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/EffigyWaypoints.java index f2831b0d..11963857 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/EffigyWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/EffigyWaypoints.java @@ -28,7 +28,7 @@ public class EffigyWaypoints { private static final List<BlockPos> UNBROKEN_EFFIGIES = new ArrayList<>(); protected static void updateEffigies() { - if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château")) return; + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château")) return; UNBROKEN_EFFIGIES.clear(); @@ -41,7 +41,7 @@ public class EffigyWaypoints { List<Text> prefixAndSuffix = Utils.TEXT_SCOREBOARD.get(i).getSiblings(); //Add contents of prefix and suffix to list - effigiesText.addAll(prefixAndSuffix.get(0).getSiblings()); + effigiesText.addAll(prefixAndSuffix.getFirst().getSiblings()); effigiesText.addAll(prefixAndSuffix.get(1).getSiblings()); for (int i2 = 1; i2 < effigiesText.size(); i2++) { @@ -55,10 +55,10 @@ public class EffigyWaypoints { } protected static void render(WorldRenderContext context) { - if (SkyblockerConfigManager.get().slayer.vampireSlayer.enableEffigyWaypoints && Utils.getIslandArea().contains("Stillgore Château")) { + if (SkyblockerConfigManager.get().slayers.vampireSlayer.enableEffigyWaypoints && Utils.getIslandArea().contains("Stillgore Château")) { for (BlockPos effigy : UNBROKEN_EFFIGIES) { float[] colorComponents = DyeColor.RED.getColorComponents(); - if (SkyblockerConfigManager.get().slayer.vampireSlayer.compactEffigyWaypoints) { + if (SkyblockerConfigManager.get().slayers.vampireSlayer.compactEffigyWaypoints) { RenderHelper.renderFilledWithBeaconBeam(context, effigy.down(6), colorComponents, 0.5F, true); } else { RenderHelper.renderFilledWithBeaconBeam(context, effigy, colorComponents, 0.5F, true); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/EnigmaSouls.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/EnigmaSouls.java index 8d0c30b8..039d331c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/EnigmaSouls.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/EnigmaSouls.java @@ -9,6 +9,7 @@ import com.mojang.brigadier.CommandDispatcher; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.OtherLocationsConfig; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.PosUtils; import de.hysky.skyblocker.utils.Utils; @@ -41,7 +42,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit public class EnigmaSouls { private static final Logger LOGGER = LoggerFactory.getLogger(EnigmaSouls.class); - private static final Supplier<Waypoint.Type> TYPE_SUPPLIER = () -> SkyblockerConfigManager.get().general.waypoints.waypointType; + private static final Supplier<Waypoint.Type> TYPE_SUPPLIER = () -> SkyblockerConfigManager.get().uiAndVisuals.waypoints.waypointType; private static final Identifier WAYPOINTS_JSON = new Identifier(SkyblockerMod.NAMESPACE, "rift/enigma_soul_waypoints.json"); private static final Map<BlockPos, ProfileAwareWaypoint> SOUL_WAYPOINTS = new HashMap<>(42); private static final Path FOUND_SOULS_FILE = SkyblockerMod.CONFIG_DIR.resolve("found_enigma_souls.json"); @@ -109,7 +110,7 @@ public class EnigmaSouls { } static void render(WorldRenderContext context) { - SkyblockerConfig.Rift config = SkyblockerConfigManager.get().locations.rift; + OtherLocationsConfig.Rift config = SkyblockerConfigManager.get().otherLocations.rift; if (Utils.isInTheRift() && config.enigmaSoulWaypoints && soulsLoaded.isDone()) { for (Waypoint soul : SOUL_WAYPOINTS.values()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/HealingMelonIndicator.java index b94ebac1..c5b22576 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/HealingMelonIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/HealingMelonIndicator.java @@ -13,12 +13,12 @@ public class HealingMelonIndicator { private static final Title title = new Title("skyblocker.rift.healNow", Formatting.DARK_RED); public static void updateHealth() { - if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château")) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château")) { TitleContainer.removeTitle(title); return; } ClientPlayerEntity player = MinecraftClient.getInstance().player; - if (player != null && player.getHealth() <= SkyblockerConfigManager.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) { + if (player != null && player.getHealth() <= SkyblockerConfigManager.get().slayers.vampireSlayer.healingMelonHealthThreshold * 2F) { RenderHelper.displayInTitleContainerAndPlaySound(title); } else { TitleContainer.removeTitle(title); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/ManiaIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/ManiaIndicator.java index d38151ff..54ea9093 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/ManiaIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/ManiaIndicator.java @@ -17,7 +17,7 @@ public class ManiaIndicator { private static final Title title = new Title("skyblocker.rift.mania", Formatting.RED); protected static void updateMania() { - if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { TitleContainer.removeTitle(title); return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/MirrorverseWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/MirrorverseWaypoints.java index 83199e99..7d7d0c34 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/MirrorverseWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/MirrorverseWaypoints.java @@ -64,7 +64,7 @@ public class MirrorverseWaypoints { protected static void render(WorldRenderContext wrc) { //I would also check for the mirrorverse location but the scoreboard stuff is not performant at all... - if (Utils.isInTheRift() && SkyblockerConfigManager.get().locations.rift.mirrorverseWaypoints && waypointsLoaded.isDone()) { + if (Utils.isInTheRift() && SkyblockerConfigManager.get().otherLocations.rift.mirrorverseWaypoints && waypointsLoaded.isDone()) { for (Waypoint waypoint : LAVA_PATH_WAYPOINTS) { waypoint.render(wrc); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/StakeIndicator.java index db24efa2..54bee5ec 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/StakeIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/StakeIndicator.java @@ -13,7 +13,7 @@ public class StakeIndicator { private static final Title title = new Title("skyblocker.rift.stakeNow", Formatting.RED); protected static void updateStake() { - if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getIslandArea().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) { TitleContainer.removeTitle(title); return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/TheRift.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/TheRift.java index 7413e06f..568a5829 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/TheRift.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/TheRift.java @@ -17,9 +17,9 @@ public class TheRift { ClientLifecycleEvents.CLIENT_STOPPING.register(EnigmaSouls::save); ClientReceiveMessageEvents.GAME.register(EnigmaSouls::onMessage); ClientCommandRegistrationCallback.EVENT.register(EnigmaSouls::registerCommands); - Scheduler.INSTANCE.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfigManager.get().slayer.vampireSlayer.effigyUpdateFrequency); - Scheduler.INSTANCE.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfigManager.get().slayer.vampireSlayer.holyIceUpdateFrequency); - Scheduler.INSTANCE.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfigManager.get().slayer.vampireSlayer.maniaUpdateFrequency); - Scheduler.INSTANCE.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfigManager.get().slayer.vampireSlayer.steakStakeUpdateFrequency); + Scheduler.INSTANCE.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfigManager.get().slayers.vampireSlayer.effigyUpdateFrequency); + Scheduler.INSTANCE.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfigManager.get().slayers.vampireSlayer.holyIceUpdateFrequency); + Scheduler.INSTANCE.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfigManager.get().slayers.vampireSlayer.maniaUpdateFrequency); + Scheduler.INSTANCE.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfigManager.get().slayers.vampireSlayer.steakStakeUpdateFrequency); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/de/hysky/skyblocker/skyblock/rift/TwinClawsIndicator.java index 48bb72ea..f6952ab4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/rift/TwinClawsIndicator.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/rift/TwinClawsIndicator.java @@ -15,7 +15,7 @@ public class TwinClawsIndicator { private static boolean scheduled = false; protected static void updateIce() { - if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { + if (!SkyblockerConfigManager.get().slayers.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getIslandArea().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) { TitleContainer.removeTitle(title); return; } @@ -32,7 +32,7 @@ public class TwinClawsIndicator { Scheduler.INSTANCE.schedule(() -> { RenderHelper.displayInTitleContainerAndPlaySound(title); scheduled = false; - }, SkyblockerConfigManager.get().slayer.vampireSlayer.holyIceIndicatorTickDelay); + }, SkyblockerConfigManager.get().slayers.vampireSlayer.holyIceIndicatorTickDelay); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java index b8907e27..a03f3549 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/OverlayScreen.java @@ -35,7 +35,7 @@ public class OverlayScreen extends Screen { super.init(); int rowWidth = (int) (this.width * 0.4); int startX = (int) (this.width * 0.5) - rowWidth / 2; - int startY = (int) ((int) (this.height * 0.5) - (rowHeight * (1 + SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions + 0.75 + SkyblockerConfigManager.get().general.searchOverlay.historyLength)) / 2); + int startY = (int) ((int) (this.height * 0.5) - (rowHeight * (1 + SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.maxSuggestions + 0.75 + SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.historyLength)) / 2); // Search field this.searchField = new TextFieldWidget(textRenderer, startX, startY, rowWidth - rowHeight, rowHeight, Text.translatable("gui.recipebook.search_hint")); @@ -50,7 +50,7 @@ public class OverlayScreen extends Screen { // suggested item buttons int rowOffset = rowHeight; - int totalSuggestions = SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions; + int totalSuggestions = SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.maxSuggestions; this.suggestionButtons = new ButtonWidget[totalSuggestions]; for (int i = 0; i < totalSuggestions; i++) { suggestionButtons[i] = ButtonWidget.builder(Text.literal(SearchOverManager.getSuggestion(i)).setStyle(Style.EMPTY), a -> { @@ -64,7 +64,7 @@ public class OverlayScreen extends Screen { } // history item buttons rowOffset += (int) (rowHeight * 0.75); - int historyLength = SkyblockerConfigManager.get().general.searchOverlay.historyLength; + int historyLength = SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.historyLength; this.historyButtons = new ButtonWidget[historyLength]; for (int i = 0; i < historyLength; i++) { String text = SearchOverManager.getHistory(i); @@ -106,7 +106,7 @@ public class OverlayScreen extends Screen { int renderOffset = (rowHeight - 16) / 2; context.drawGuiTexture(SEARCH_ICON_TEXTURE, finishedButton.getX() + renderOffset, finishedButton.getY() + renderOffset, 16, 16); if (historyButtons.length > 0 && historyButtons[0] != null) { - context.drawText(textRenderer, Text.translatable("text.autoconfig.skyblocker.option.general.searchOverlay.historyLabel"), historyButtons[0].getX() + renderOffset, historyButtons[0].getY() - rowHeight / 2, 0xFFFFFFFF, true); + context.drawText(textRenderer, Text.translatable("skyblocker.config.general.searchOverlay.historyLabel"), historyButtons[0].getX() + renderOffset, historyButtons[0].getY() - rowHeight / 2, 0xFFFFFFFF, true); } //draw item stacks and tooltip to buttons @@ -140,7 +140,7 @@ public class OverlayScreen extends Screen { public final void tick() { super.tick(); //update suggestion buttons text - for (int i = 0; i < SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions; i++) { + for (int i = 0; i < SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.maxSuggestions; i++) { String text = SearchOverManager.getSuggestion(i); if (!text.isEmpty()) { suggestionButtons[i].visible = true; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java index 1d740601..917a6aa0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/searchoverlay/SearchOverManager.java @@ -2,13 +2,11 @@ package de.hysky.skyblocker.skyblock.searchoverlay; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.skyblock.item.tooltip.TooltipInfoType; -import de.hysky.skyblocker.utils.Http; import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; import io.github.moulberry.repo.data.NEUItem; @@ -75,7 +73,7 @@ public class SearchOverManager { } private static void registerSearchCommands(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess registryAccess) { - if (SkyblockerConfigManager.get().general.searchOverlay.enableCommands) { + if (SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.enableCommands) { dispatcher.register(literal("ahs").executes(context -> startCommand(true))); dispatcher.register(literal("bzs").executes(context -> startCommand(false))); } @@ -199,7 +197,7 @@ public class SearchOverManager { SearchOverManager.sign = sign; isCommand = false; SearchOverManager.isAuction = isAuction; - if (SkyblockerConfigManager.get().general.searchOverlay.keepPreviousSearches) { + if (SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.keepPreviousSearches) { Text[] messages = SearchOverManager.sign.getText(signFront).getMessages(CLIENT.shouldFilterText()); search = messages[0].getString(); if (!messages[1].getString().isEmpty()) { @@ -221,7 +219,7 @@ public class SearchOverManager { protected static void updateSearch(String newValue) { search = newValue; //update the suggestion values - int totalSuggestions = SkyblockerConfigManager.get().general.searchOverlay.maxSuggestions; + int totalSuggestions = SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.maxSuggestions; if (newValue.isBlank() || totalSuggestions == 0) return; //do not search for empty value suggestionsArray = (isAuction ? auctionItems : bazaarItems).stream().filter(item -> item.toLowerCase().contains(search.toLowerCase())).limit(totalSuggestions).toArray(String[]::new); } @@ -248,12 +246,12 @@ public class SearchOverManager { */ protected static String getHistory(int index) { if (isAuction) { - if (SkyblockerConfigManager.get().general.searchOverlay.auctionHistory.size() > index) { - return SkyblockerConfigManager.get().general.searchOverlay.auctionHistory.get(index); + if (SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.auctionHistory.size() > index) { + return SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.auctionHistory.get(index); } } else { - if (SkyblockerConfigManager.get().general.searchOverlay.bazaarHistory.size() > index) { - return SkyblockerConfigManager.get().general.searchOverlay.bazaarHistory.get(index); + if (SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.bazaarHistory.size() > index) { + return SkyblockerConfigManager.get().uiAndVisuals.searchOverlay.bazaarHistory.get(index); } } return null; @@ -268,17 +266,17 @@ public class SearchOverManager { */ private static void saveHistory() { //save to history - SkyblockerConfig.SearchOverlay config = SkyblockerConfigManager.get().general.searchOverlay; + UIAndVisualsConfig.SearchOverlay config = SkyblockerConfigManager.get().uiAndVisuals.searchOverlay; if (isAuction) { - if (config.auctionHistory.isEmpty() || !config.auctionHistory.get(0).equals(search)) { - config.auctionHistory.add(0, search); + if (config.auctionHistory.isEmpty() || !config.auctionHistory.getFirst().equals(search)) { + config.auctionHistory.addFirst(search); if (config.auctionHistory.size() > config.historyLength) { config.auctionHistory = config.auctionHistory.subList(0, config.historyLength); } } } else { - if (config.bazaarHistory.isEmpty() || !config.bazaarHistory.get(0).equals(search)) { - config.bazaarHistory.add(0, search); + if (config.bazaarHistory.isEmpty() || !config.bazaarHistory.getFirst().equals(search)) { + config.bazaarHistory.addFirst(search); if (config.bazaarHistory.size() > config.historyLength) { config.bazaarHistory = config.bazaarHistory.subList(0, config.historyLength); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java index 7d57305b..1e6cdf22 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/screenbuilder/pipeline/PlaceStage.java @@ -51,7 +51,7 @@ public class PlaceStage extends PipelineStage { } public void run(int screenW, int screenH) { - Widget wid = primary.get(0); + Widget wid = primary.getFirst(); switch (where) { case CENTER -> { wid.setX((screenW - wid.getWidth()) / 2); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/ScreenConst.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/ScreenConst.java index 05f0afa5..9e48e4e6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/ScreenConst.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/util/ScreenConst.java @@ -8,6 +8,6 @@ public class ScreenConst { private static final int SCREEN_PAD_BASE = 20; public static int getScreenPad() { - return (int) ((1f/((float)SkyblockerConfigManager.get().general.tabHud.tabHudScale/100f) * SCREEN_PAD_BASE)); + return (int) ((1f/((float)SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudScale/100f) * SCREEN_PAD_BASE)); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java index 208b0131..8b7c08b4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/GardenServerWidget.java @@ -33,7 +33,7 @@ public class GardenServerWidget extends Widget { this.addSimpleIcoText(Ico.EMERALD, "Gems:", Formatting.GREEN, 43); Text copperText = Widget.simpleEntryText(44, "Copper:", Formatting.WHITE); - ((MutableText) copperText.getSiblings().get(0)).withColor(COPPER_COLOR); + ((MutableText) copperText.getSiblings().getFirst()).withColor(COPPER_COLOR); this.addComponent(new IcoTextComponent(Ico.COPPER, copperText)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java index ba178a5e..6daf3a8a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.tabhud.widget; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlayerComponent; @@ -51,7 +51,7 @@ public class PlayerListWidget extends Widget { list.add(PlayerListMgr.getRaw(i)); } - if (SkyblockerConfigManager.get().general.tabHud.nameSorting == SkyblockerConfig.NameSorting.ALPHABETICAL) { + if (SkyblockerConfigManager.get().uiAndVisuals.tabHud.nameSorting == UIAndVisualsConfig.NameSorting.ALPHABETICAL) { list.sort(Comparator.comparing(o -> o.getProfile().getName().toLowerCase())); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/Widget.java index 01a8720b..2d411c2e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/Widget.java @@ -152,7 +152,7 @@ public abstract class Widget { RenderSystem.enableDepthTest(); ms.push(); - float scale = SkyblockerConfigManager.get().general.tabHud.tabHudScale / 100f; + float scale = SkyblockerConfigManager.get().uiAndVisuals.tabHud.tabHudScale / 100f; ms.scale(scale, scale, 1); // move above other UI elements diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java index ab79bb31..4adf97a8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -20,7 +20,7 @@ public class PlayerComponent extends Component { public PlayerComponent(PlayerListEntry ple) { - boolean plainNames = SkyblockerConfigManager.get().general.tabHud.plainPlayerNames; + boolean plainNames = SkyblockerConfigManager.get().uiAndVisuals.tabHud.plainPlayerNames; Team team = ple.getScoreboardTeam(); String username = ple.getProfile().getName(); name = (team != null && !plainNames) ? Text.empty().append(team.getPrefix()).append(Text.literal(username).formatted(team.getColor())).append(team.getSuffix()) : Text.of(username); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/FairySouls.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/FairySouls.java index 7f826b23..25741b22 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/FairySouls.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/FairySouls.java @@ -6,8 +6,8 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.brigadier.CommandDispatcher; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.HelperConfig; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.PosUtils; @@ -44,7 +44,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit public class FairySouls { private static final Logger LOGGER = LoggerFactory.getLogger(FairySouls.class); - private static final Supplier<Waypoint.Type> TYPE_SUPPLIER = () -> SkyblockerConfigManager.get().general.waypoints.waypointType; + private static final Supplier<Waypoint.Type> TYPE_SUPPLIER = () -> SkyblockerConfigManager.get().uiAndVisuals.waypoints.waypointType; private static CompletableFuture<Void> fairySoulsLoaded; private static int maxSouls = 0; private static final Map<String, Map<BlockPos, ProfileAwareWaypoint>> fairySouls = new HashMap<>(); @@ -52,7 +52,7 @@ public class FairySouls { @SuppressWarnings("UnusedReturnValue") public static CompletableFuture<Void> runAsyncAfterFairySoulsLoad(Runnable runnable) { if (fairySoulsLoaded == null) { - LOGGER.error("[Skyblocker] Fairy Souls have not being initialized yet! Please ensure the Fairy Souls module is initialized before modules calling this method in SkyblockerMod#onInitializeClient. This error can be safely ignore in a test environment."); + LOGGER.error("[Skyblocker] Fairy Souls have not being initialized yet! Please ensure the Fairy Souls configs is initialized before modules calling this method in SkyblockerMod#onInitializeClient. This error can be safely ignore in a test environment."); return CompletableFuture.completedFuture(null); } return fairySoulsLoaded.thenRunAsync(runnable); @@ -142,7 +142,7 @@ public class FairySouls { } private static void render(WorldRenderContext context) { - SkyblockerConfig.FairySouls fairySoulsConfig = SkyblockerConfigManager.get().general.fairySouls; + HelperConfig.FairySouls fairySoulsConfig = SkyblockerConfigManager.get().helpers.fairySouls; if (fairySoulsConfig.enableFairySoulsHelper && fairySoulsLoaded.isDone() && fairySouls.containsKey(Utils.getLocationRaw())) { for (Waypoint fairySoul : fairySouls.get(Utils.getLocationRaw()).values()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java index 45a52388..254077ad 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/MythologicalRitual.java @@ -189,7 +189,7 @@ public class MythologicalRitual { } private static boolean isActive() { - return SkyblockerConfigManager.get().general.mythologicalRitual.enableMythologicalRitualHelper && Utils.getLocationRaw().equals("hub"); + return SkyblockerConfigManager.get().helpers.mythologicalRitual.enableMythologicalRitualHelper && Utils.getLocationRaw().equals("hub"); } private static void reset() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java index b70bac47..bbc9a655 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/OrderedWaypoints.java @@ -72,6 +72,7 @@ public class OrderedWaypoints { private static final float[] LIGHT_GRAY = { 192 / 255f, 192 / 255f, 192 / 255f }; private static CompletableFuture<Void> loaded; + private static boolean showAll; public static void init() { ClientLifecycleEvents.CLIENT_STARTED.register(_client -> load()); @@ -114,6 +115,8 @@ public class OrderedWaypoints { .then(argument("groupName", word()) .suggests((source, builder) -> CommandSource.suggestMatching(WAYPOINTS.keySet(), builder)) .executes(context -> toggleGroup(context.getSource(), getString(context, "groupName"))))) + .then(literal("showAll") + .executes(context -> showAll(context.getSource()))) .then(literal("import") .then(literal("coleWeight") .then(argument("groupName", word()) @@ -215,39 +218,54 @@ public class OrderedWaypoints { return Command.SINGLE_SUCCESS; } + private static int showAll(FabricClientCommandSource source) { + source.sendFeedback(Constants.PREFIX.get().append(Text.translatable("skyblocker.waypoints.ordered.showAll"))); + showAll = !showAll; + + return Command.SINGLE_SUCCESS; + } + private static void render(WorldRenderContext wrc) { if ((Utils.isInCrystalHollows() || Utils.isInDwarvenMines()) && loaded.isDone() && SEMAPHORE.tryAcquire()) { for (OrderedWaypointGroup group : WAYPOINTS.values()) { if (group.enabled()) { List<OrderedWaypoint> waypoints = group.waypoints(); if (waypoints.isEmpty()) continue; - ClientPlayerEntity player = MinecraftClient.getInstance().player; - int centreIndex = INDEX_STORE.computeIfAbsent(group.name(), name -> 0); - for (int i = 0; i < waypoints.size(); i++) { - OrderedWaypoint waypoint = waypoints.get(i); + if (!showAll) { + ClientPlayerEntity player = MinecraftClient.getInstance().player; + int centreIndex = INDEX_STORE.computeIfAbsent(group.name(), name -> 0); - if (waypoint.getPos().isWithinDistance(player.getPos(), RADIUS)) { - centreIndex = i; - INDEX_STORE.put(group.name(), i); + for (int i = 0; i < waypoints.size(); i++) { + OrderedWaypoint waypoint = waypoints.get(i); - break; + if (waypoint.getPos().isWithinDistance(player.getPos(), RADIUS)) { + centreIndex = i; + INDEX_STORE.put(group.name(), i); + + break; + } } - } - int previousIndex = (centreIndex - 1 + waypoints.size()) % waypoints.size(); - int currentIndex = (centreIndex + waypoints.size()) % waypoints.size(); - int nextIndex = (centreIndex + 1) % waypoints.size(); + int previousIndex = (centreIndex - 1 + waypoints.size()) % waypoints.size(); + int currentIndex = (centreIndex + waypoints.size()) % waypoints.size(); + int nextIndex = (centreIndex + 1) % waypoints.size(); - OrderedWaypoint previous = waypoints.get(previousIndex); - OrderedWaypoint current = waypoints.get(currentIndex); - OrderedWaypoint next = waypoints.get(nextIndex); + OrderedWaypoint previous = waypoints.get(previousIndex); + OrderedWaypoint current = waypoints.get(currentIndex); + OrderedWaypoint next = waypoints.get(nextIndex); - previous.render(wrc, RelativeIndex.PREVIOUS, previousIndex); - current.render(wrc, RelativeIndex.CURRENT, currentIndex); - next.render(wrc, RelativeIndex.NEXT, nextIndex); + previous.render(wrc, RelativeIndex.PREVIOUS, previousIndex); + current.render(wrc, RelativeIndex.CURRENT, currentIndex); + next.render(wrc, RelativeIndex.NEXT, nextIndex); - RenderHelper.renderLineFromCursor(wrc, Vec3d.ofCenter(next.getPos().up()), LIGHT_GRAY, 1f, 5f); + RenderHelper.renderLineFromCursor(wrc, Vec3d.ofCenter(next.getPos().up()), LIGHT_GRAY, 1f, 5f); + } else { + for (int i = 0; i < waypoints.size(); i++) { + //Render them as white by default + waypoints.get(i).render(wrc, RelativeIndex.CURRENT, i); + } + } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Relics.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Relics.java index 952f2f59..3a9af459 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Relics.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/Relics.java @@ -6,8 +6,8 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.brigadier.CommandDispatcher; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.OtherLocationsConfig; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.PosUtils; import de.hysky.skyblocker.utils.Utils; @@ -42,7 +42,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit public class Relics { private static final Logger LOGGER = LoggerFactory.getLogger(Relics.class); - private static final Supplier<Waypoint.Type> TYPE_SUPPLIER = () -> SkyblockerConfigManager.get().general.waypoints.waypointType; + private static final Supplier<Waypoint.Type> TYPE_SUPPLIER = () -> SkyblockerConfigManager.get().uiAndVisuals.waypoints.waypointType; private static CompletableFuture<Void> relicsLoaded; @SuppressWarnings({"unused", "FieldCanBeLocal"}) private static int totalRelics = 0; @@ -130,7 +130,7 @@ public class Relics { } private static void render(WorldRenderContext context) { - SkyblockerConfig.Relics config = SkyblockerConfigManager.get().locations.spidersDen.relics; + OtherLocationsConfig.Relics config = SkyblockerConfigManager.get().otherLocations.spidersDen.relics; if (config.enableRelicsHelper && relicsLoaded.isDone() && Utils.getLocationRaw().equals("combat_1")) { for (ProfileAwareWaypoint relic : relics.values()) { diff --git a/src/main/java/de/hysky/skyblocker/utils/Constants.java b/src/main/java/de/hysky/skyblocker/utils/Constants.java index d900f917..c002be57 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Constants.java +++ b/src/main/java/de/hysky/skyblocker/utils/Constants.java @@ -13,13 +13,33 @@ import java.util.function.Supplier; */ public interface Constants { String LEVEL_EMBLEMS = "\u2E15\u273F\u2741\u2E19\u03B1\u270E\u2615\u2616\u2663\u213B\u2694\u27B6\u26A1\u2604\u269A\u2693\u2620\u269B\u2666\u2660\u2764\u2727\u238A\u1360\u262C\u269D\u29C9\uA214\u32D6\u2E0E\u26A0\uA541\u3020\u30C4\u2948\u2622\u2623\u273E\u269C\u0BD0\u0A6D\u2742\u16C3\u3023\u10F6\u0444\u266A\u266B\u04C3\u26C1\u26C3\u16DD\uA03E\u1C6A\u03A3\u09EB\u2603\u2654\u26C2\u0FC7\uA925\uA56A\u2592\u12DE"; + Supplier<MutableText> PREFIX = () -> { LocalDate time = LocalDate.now(); + if (time.getMonthValue() == 4 && time.getDayOfMonth() == 1) { + return Text.empty().append(Text.literal("[").formatted(Formatting.GRAY)) + .append(Text.literal("S").withColor(0x00ff4c)) + .append(Text.literal("k").withColor(0x02fa60)) + .append(Text.literal("i").withColor(0x04f574)) + .append(Text.literal("b").withColor(0x07ef88)) + .append(Text.literal("i").withColor(0x09ea9c)) + .append(Text.literal("d").withColor(0x0be5af)) + .append(Text.literal("i").withColor(0x0de0c3)) + .append(Text.literal("b").withColor(0x10dad7)) + .append(Text.literal("l").withColor(0x12d5eb)) + .append(Text.literal("o").withColor(0x14d0ff)) + .append(Text.literal("c").withColor(0x16cbff)) + .append(Text.literal("k").withColor(0x18c6ff)) + .append(Text.literal("e").withColor(0x1ac1ff)) + .append(Text.literal("r").withColor(0x1cbbff)) + .append(Text.literal("] ").formatted(Formatting.GRAY)); + } + return Text.empty() .append(Text.literal("[").formatted(Formatting.GRAY)) .append(Text.literal("S").withColor(0x00ff4c)) .append(Text.literal("k").withColor(0x02fa60)) - .append(Text.literal(time.getMonthValue() == 4 && time.getDayOfMonth() == 1 ? "i" : "y").withColor(0x04f574)) + .append(Text.literal("y").withColor(0x04f574)) .append(Text.literal("b").withColor(0x07ef88)) .append(Text.literal("l").withColor(0x09ea9c)) .append(Text.literal("o").withColor(0x0be5af)) diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index dc13b61d..70dbdac6 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -224,7 +224,7 @@ public class Utils { if (!isOnHypixel) { isOnHypixel = true; } - if (fabricLoader.isDevelopmentEnvironment() || sidebar.get(0).contains("SKYBLOCK") || sidebar.get(0).contains("SKIBLOCK")) { + if (fabricLoader.isDevelopmentEnvironment() || sidebar.getFirst().contains("SKYBLOCK") || sidebar.getFirst().contains("SKIBLOCK")) { if (!isOnSkyblock) { if (!isInjected) { isInjected = true; diff --git a/src/main/java/de/hysky/skyblocker/utils/chat/ChatFilterResult.java b/src/main/java/de/hysky/skyblocker/utils/chat/ChatFilterResult.java index 5a94682a..5c2bfe53 100644 --- a/src/main/java/de/hysky/skyblocker/utils/chat/ChatFilterResult.java +++ b/src/main/java/de/hysky/skyblocker/utils/chat/ChatFilterResult.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.utils.chat; import net.minecraft.client.resource.language.I18n; + public enum ChatFilterResult { // Skip this one / no action PASS, @@ -13,6 +14,6 @@ public enum ChatFilterResult { @Override public String toString() { - return I18n.translate("text.autoconfig.skyblocker.option.messages.chatFilterResult." + name()); + return I18n.translate("skyblocker.config.chat.filter.chatFilterResult." + name()); } } diff --git a/src/main/java/de/hysky/skyblocker/utils/discord/DiscordRPCManager.java b/src/main/java/de/hysky/skyblocker/utils/discord/DiscordRPCManager.java index b2104fdc..fb2006c4 100644 --- a/src/main/java/de/hysky/skyblocker/utils/discord/DiscordRPCManager.java +++ b/src/main/java/de/hysky/skyblocker/utils/discord/DiscordRPCManager.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.utils.discord; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.MiscConfig; import de.hysky.skyblocker.events.SkyblockEvents; import de.hysky.skyblocker.utils.Utils; import meteordevelopment.discordipc.DiscordIPC; @@ -34,15 +35,15 @@ public class DiscordRPCManager { } /** - * Checks the {@link de.hysky.skyblocker.config.SkyblockerConfig.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence. + * Checks the {@link MiscConfig.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence. */ public static void updateDataAndPresence() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message - if (SkyblockerConfigManager.get().richPresence.customMessage.isEmpty()) { - SkyblockerConfigManager.get().richPresence.customMessage = "Playing Skyblock"; + if (SkyblockerConfigManager.get().misc.richPresence.customMessage.isEmpty()) { + SkyblockerConfigManager.get().misc.richPresence.customMessage = "Playing Skyblock"; SkyblockerConfigManager.save(); } - if (SkyblockerConfigManager.get().richPresence.cycleMode) cycleCount = (cycleCount + 1) % 3; + if (SkyblockerConfigManager.get().misc.richPresence.cycleMode) cycleCount = (cycleCount + 1) % 3; initAndUpdatePresence(); } @@ -58,21 +59,21 @@ public class DiscordRPCManager { * <p> * When the {@link #updateTask previous update} does not exist or {@link CompletableFuture#isDone() has completed}: * <p> - * Connects to discord if {@link de.hysky.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled}, + * Connects to discord if {@link MiscConfig.RichPresence#enableRichPresence rich presence is enabled}, * the player {@link Utils#isOnSkyblock() is on Skyblock}, and {@link DiscordIPC#isConnected() discord is not already connected}. - * Updates the presence if {@link de.hysky.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled} + * Updates the presence if {@link MiscConfig.RichPresence#enableRichPresence rich presence is enabled} * and the player {@link Utils#isOnSkyblock() is on Skyblock}. - * Stops the connection if {@link de.hysky.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled} + * Stops the connection if {@link MiscConfig.RichPresence#enableRichPresence rich presence is disabled} * or the player {@link Utils#isOnSkyblock() is not on Skyblock} and {@link DiscordIPC#isConnected() discord is connected}. * Saves the update task in {@link #updateTask} * * @param initialization whether this is the first time the presence is being updates. If {@code true}, a message will be logged - * if {@link de.hysky.skyblocker.config.SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled}. + * if {@link MiscConfig.RichPresence#enableRichPresence rich presence is disabled}. */ private static void initAndUpdatePresence(boolean initialization) { if (updateTask == null || updateTask.isDone()) { updateTask = CompletableFuture.runAsync(() -> { - if (SkyblockerConfigManager.get().richPresence.enableRichPresence && Utils.isOnSkyblock()) { + if (SkyblockerConfigManager.get().misc.richPresence.enableRichPresence && Utils.isOnSkyblock()) { if (!DiscordIPC.isConnected()) { if (DiscordIPC.start(934607927837356052L, null)) { LOGGER.info("[Skyblocker] Discord RPC connected successfully"); @@ -98,20 +99,20 @@ public class DiscordRPCManager { RichPresence presence = new RichPresence(); presence.setLargeImage("skyblocker-default", null); presence.setStart(startTimeStamp); - presence.setDetails(SkyblockerConfigManager.get().richPresence.customMessage); + presence.setDetails(SkyblockerConfigManager.get().misc.richPresence.customMessage); presence.setState(getInfo()); return presence; } public static String getInfo() { String info = null; - if (!SkyblockerConfigManager.get().richPresence.cycleMode) { - switch (SkyblockerConfigManager.get().richPresence.info) { + if (!SkyblockerConfigManager.get().misc.richPresence.cycleMode) { + switch (SkyblockerConfigManager.get().misc.richPresence.info) { case BITS -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case PURSE -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); case LOCATION -> info = Utils.getIslandArea(); } - } else if (SkyblockerConfigManager.get().richPresence.cycleMode) { + } else if (SkyblockerConfigManager.get().misc.richPresence.cycleMode) { switch (cycleCount) { case 0 -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case 1 -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); diff --git a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java index a115bb2b..c21485e2 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainer.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.utils.render.title; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.events.HudRenderEvents; import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; @@ -82,7 +82,7 @@ public class TitleContainer { } private static void render(DrawContext context, float tickDelta) { - render(context, titles, SkyblockerConfigManager.get().general.titleContainer.x, SkyblockerConfigManager.get().general.titleContainer.y, tickDelta); + render(context, titles, SkyblockerConfigManager.get().uiAndVisuals.titleContainer.x, SkyblockerConfigManager.get().uiAndVisuals.titleContainer.y, tickDelta); } protected static void render(DrawContext context, Set<Title> titles, int xPos, int yPos, float tickDelta) { @@ -90,11 +90,11 @@ public class TitleContainer { TextRenderer textRenderer = client.textRenderer; // Calculate Scale to use - float scale = 3F * (SkyblockerConfigManager.get().general.titleContainer.titleContainerScale / 100F); + float scale = 3F * (SkyblockerConfigManager.get().uiAndVisuals.titleContainer.titleContainerScale / 100F); // Grab direction and alignment values - SkyblockerConfig.Direction direction = SkyblockerConfigManager.get().general.titleContainer.direction; - SkyblockerConfig.Alignment alignment = SkyblockerConfigManager.get().general.titleContainer.alignment; + UIAndVisualsConfig.Direction direction = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.direction; + UIAndVisualsConfig.Alignment alignment = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment; // x/y refer to the starting position for the text // y always starts at yPos float x = 0; @@ -106,8 +106,8 @@ public class TitleContainer { width += textRenderer.getWidth(title.getText()) * scale + 10; } - if (alignment == SkyblockerConfig.Alignment.MIDDLE) { - if (direction == SkyblockerConfig.Direction.HORIZONTAL) { + if (alignment == UIAndVisualsConfig.Alignment.MIDDLE) { + if (direction == UIAndVisualsConfig.Direction.HORIZONTAL) { //If middle aligned horizontally, start the xPosition at half of the width to the left. x = xPos - (width / 2); } else { @@ -115,7 +115,7 @@ public class TitleContainer { x = xPos; } } - if (alignment == SkyblockerConfig.Alignment.LEFT || alignment == SkyblockerConfig.Alignment.RIGHT) { + if (alignment == UIAndVisualsConfig.Alignment.LEFT || alignment == UIAndVisualsConfig.Alignment.RIGHT) { //If left or right aligned, start at xPos, we will shift each text later x = xPos; } @@ -124,14 +124,14 @@ public class TitleContainer { //Calculate which x the text should use float xToUse; - if (direction == SkyblockerConfig.Direction.HORIZONTAL) { - xToUse = alignment == SkyblockerConfig.Alignment.RIGHT ? + if (direction == UIAndVisualsConfig.Direction.HORIZONTAL) { + xToUse = alignment == UIAndVisualsConfig.Alignment.RIGHT ? x - (textRenderer.getWidth(title.getText()) * scale) : //if right aligned we need the text position to be aligned on the right side. x; } else { - xToUse = alignment == SkyblockerConfig.Alignment.MIDDLE ? + xToUse = alignment == UIAndVisualsConfig.Alignment.MIDDLE ? x - (textRenderer.getWidth(title.getText()) * scale) / 2 : //if middle aligned we need the text position to be aligned in the middle. - alignment == SkyblockerConfig.Alignment.RIGHT ? + alignment == UIAndVisualsConfig.Alignment.RIGHT ? x - (textRenderer.getWidth(title.getText()) * scale) : //if right aligned we need the text position to be aligned on the right side. x; } @@ -156,13 +156,13 @@ public class TitleContainer { context.getMatrices().pop(); //Calculate the x and y positions for the next title - if (direction == SkyblockerConfig.Direction.HORIZONTAL) { - if (alignment == SkyblockerConfig.Alignment.MIDDLE || alignment == SkyblockerConfig.Alignment.LEFT) { + if (direction == UIAndVisualsConfig.Direction.HORIZONTAL) { + if (alignment == UIAndVisualsConfig.Alignment.MIDDLE || alignment == UIAndVisualsConfig.Alignment.LEFT) { //Move to the right if middle or left aligned x += textRenderer.getWidth(title.getText()) * scale + 10; } - if (alignment == SkyblockerConfig.Alignment.RIGHT) { + if (alignment == UIAndVisualsConfig.Alignment.RIGHT) { //Move to the left if right aligned x -= textRenderer.getWidth(title.getText()) * scale + 10; } diff --git a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java index cc80f74c..a8fbbea8 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.utils.render.title; -import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; import de.hysky.skyblocker.utils.render.RenderHelper; import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.Option; @@ -23,8 +23,8 @@ public class TitleContainerConfigScreen extends Screen { private final Title example1 = new Title(Text.literal("Test1").formatted(Formatting.RED)); private final Title example2 = new Title(Text.literal("Test23").formatted(Formatting.AQUA)); private final Title example3 = new Title(Text.literal("Testing1234").formatted(Formatting.DARK_GREEN)); - private float hudX = SkyblockerConfigManager.get().general.titleContainer.x; - private float hudY = SkyblockerConfigManager.get().general.titleContainer.y; + private float hudX = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.x; + private float hudY = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.y; private final Screen parent; private boolean changedScale; @@ -42,8 +42,8 @@ public class TitleContainerConfigScreen extends Screen { super.render(context, mouseX, mouseY, delta); renderBackground(context, mouseX, mouseY, delta); TitleContainer.render(context, Set.of(example1, example2, example3), (int) hudX, (int) hudY, delta); - SkyblockerConfig.Direction direction = SkyblockerConfigManager.get().general.titleContainer.direction; - SkyblockerConfig.Alignment alignment = SkyblockerConfigManager.get().general.titleContainer.alignment; + UIAndVisualsConfig.Direction direction = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.direction; + UIAndVisualsConfig.Alignment alignment = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment; context.drawCenteredTextWithShadow(textRenderer, "Press Q/E to change Alignment: " + alignment, width / 2, textRenderer.fontHeight * 2, Color.WHITE.getRGB()); context.drawCenteredTextWithShadow(textRenderer, "Press R to change Direction: " + direction, width / 2, textRenderer.fontHeight * 3 + 5, Color.WHITE.getRGB()); context.drawCenteredTextWithShadow(textRenderer, "Press +/- to change Scale", width / 2, textRenderer.fontHeight * 4 + 10, Color.WHITE.getRGB()); @@ -62,7 +62,7 @@ public class TitleContainerConfigScreen extends Screen { } private Pair<Vector2f, Vector2f> getSelectionBoundingBox() { - SkyblockerConfig.Alignment alignment = SkyblockerConfigManager.get().general.titleContainer.alignment; + UIAndVisualsConfig.Alignment alignment = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment; float midWidth = getSelectionWidth() / 2F; float x1 = 0; @@ -87,15 +87,15 @@ public class TitleContainerConfigScreen extends Screen { } private float getSelectionHeight() { - float scale = (3F * (SkyblockerConfigManager.get().general.titleContainer.titleContainerScale / 100F)); - return SkyblockerConfigManager.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? + float scale = (3F * (SkyblockerConfigManager.get().uiAndVisuals.titleContainer.titleContainerScale / 100F)); + return SkyblockerConfigManager.get().uiAndVisuals.titleContainer.direction == UIAndVisualsConfig.Direction.HORIZONTAL ? (textRenderer.fontHeight * scale) : (textRenderer.fontHeight + 10F) * 3F * scale; } private float getSelectionWidth() { - float scale = (3F * (SkyblockerConfigManager.get().general.titleContainer.titleContainerScale / 100F)); - return SkyblockerConfigManager.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ? + float scale = (3F * (SkyblockerConfigManager.get().uiAndVisuals.titleContainer.titleContainerScale / 100F)); + return SkyblockerConfigManager.get().uiAndVisuals.titleContainer.direction == UIAndVisualsConfig.Direction.HORIZONTAL ? (textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale : textRenderer.getWidth("Testing1234") * scale; } @@ -104,7 +104,7 @@ public class TitleContainerConfigScreen extends Screen { public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) { float midWidth = getSelectionWidth() / 2; float midHeight = getSelectionHeight() / 2; - var alignment = SkyblockerConfigManager.get().general.titleContainer.alignment; + var alignment = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment; Pair<Vector2f, Vector2f> boundingBox = getSelectionBoundingBox(); float x1 = boundingBox.getLeft().getX(); @@ -135,34 +135,34 @@ public class TitleContainerConfigScreen extends Screen { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (keyCode == GLFW.GLFW_KEY_Q) { - SkyblockerConfig.Alignment current = SkyblockerConfigManager.get().general.titleContainer.alignment; - SkyblockerConfigManager.get().general.titleContainer.alignment = switch (current) { - case LEFT -> SkyblockerConfig.Alignment.MIDDLE; - case MIDDLE -> SkyblockerConfig.Alignment.RIGHT; - case RIGHT -> SkyblockerConfig.Alignment.LEFT; + UIAndVisualsConfig.Alignment current = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment = switch (current) { + case LEFT -> UIAndVisualsConfig.Alignment.MIDDLE; + case MIDDLE -> UIAndVisualsConfig.Alignment.RIGHT; + case RIGHT -> UIAndVisualsConfig.Alignment.LEFT; }; } if (keyCode == GLFW.GLFW_KEY_E) { - SkyblockerConfig.Alignment current = SkyblockerConfigManager.get().general.titleContainer.alignment; - SkyblockerConfigManager.get().general.titleContainer.alignment = switch (current) { - case LEFT -> SkyblockerConfig.Alignment.RIGHT; - case MIDDLE -> SkyblockerConfig.Alignment.LEFT; - case RIGHT -> SkyblockerConfig.Alignment.MIDDLE; + UIAndVisualsConfig.Alignment current = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.alignment = switch (current) { + case LEFT -> UIAndVisualsConfig.Alignment.RIGHT; + case MIDDLE -> UIAndVisualsConfig.Alignment.LEFT; + case RIGHT -> UIAndVisualsConfig.Alignment.MIDDLE; }; } if (keyCode == GLFW.GLFW_KEY_R) { - SkyblockerConfig.Direction current = SkyblockerConfigManager.get().general.titleContainer.direction; - SkyblockerConfigManager.get().general.titleContainer.direction = switch (current) { - case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL; - case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; + UIAndVisualsConfig.Direction current = SkyblockerConfigManager.get().uiAndVisuals.titleContainer.direction; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.direction = switch (current) { + case HORIZONTAL -> UIAndVisualsConfig.Direction.VERTICAL; + case VERTICAL -> UIAndVisualsConfig.Direction.HORIZONTAL; }; } if (keyCode == GLFW.GLFW_KEY_EQUAL) { - SkyblockerConfigManager.get().general.titleContainer.titleContainerScale += 10; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.titleContainerScale += 10; changedScale = true; } if (keyCode == GLFW.GLFW_KEY_MINUS) { - SkyblockerConfigManager.get().general.titleContainer.titleContainerScale -= 10; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.titleContainerScale -= 10; changedScale = true; } return super.keyPressed(keyCode, scanCode, modifiers); @@ -171,15 +171,15 @@ public class TitleContainerConfigScreen extends Screen { @Override public void close() { - SkyblockerConfigManager.get().general.titleContainer.x = (int) hudX; - SkyblockerConfigManager.get().general.titleContainer.y = (int) hudY; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.x = (int) hudX; + SkyblockerConfigManager.get().uiAndVisuals.titleContainer.y = (int) hudY; //TODO Come up with a better, less hacky solution for this in the future (: if (parent instanceof YACLScreen yaclScreen) { - ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.category.general"))).findFirst().orElseThrow(); - OptionGroup group = category.groups().stream().filter(grp -> grp.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.general.titleContainer"))).findFirst().orElseThrow(); + ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("skyblocker.config.uiAndVisuals"))).findFirst().orElseThrow(); + OptionGroup group = category.groups().stream().filter(grp -> grp.name().getString().equals(I18n.translate("skyblocker.config.uiAndVisuals.titleContainer"))).findFirst().orElseThrow(); - Option<?> scaleOpt = group.options().get(0); + Option<?> scaleOpt = group.options().getFirst(); // Refresh the value in the config with the bound value if (changedScale) scaleOpt.forgetPendingValue(); |