aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2023-09-30 23:33:09 -0400
committerGitHub <noreply@github.com>2023-09-30 23:33:09 -0400
commit555161a6568d918f158ceecffe812b45960ec93a (patch)
treecaf0e8dc7e09532697ec82becd10400834593858 /src/main/java/me
parentdbdb0598086a4d31018294f87026da517ceb0ce2 (diff)
parentbe8e307391d95e0bdc981411f94626978a88b0a5 (diff)
downloadSkyblocker-555161a6568d918f158ceecffe812b45960ec93a.tar.gz
Skyblocker-555161a6568d918f158ceecffe812b45960ec93a.tar.bz2
Skyblocker-555161a6568d918f158ceecffe812b45960ec93a.zip
Merge pull request #328 from AzureAaron/yacl3
YACL Config
Diffstat (limited to 'src/main/java/me')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java5
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java1480
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfigManager.java86
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/DiscordRPCCategory.java50
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java316
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java95
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java484
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java80
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java99
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java596
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java116
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/AbstractInventoryScreenMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ArmorTrimMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/WorldRendererMixin.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/HotbarSlotLock.java9
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/QuiverWarning.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java18
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/HungryHiker.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/TreasureHunter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonChestProfit.java9
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java25
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TicTacToe.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java20
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java23
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AbilityFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AdFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AoteFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AutopetFilter.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ComboFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/HealFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ImplosionFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/MoltenWaveFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ShowOffFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/TeleportPadFilter.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java32
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java8
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java10
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java6
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java12
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java14
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/special/SpecialEffects.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java3
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java4
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java31
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainer.java9
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainerConfigScreen.java56
88 files changed, 3028 insertions, 981 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
index b28ad3d4..1c2e112e 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java
@@ -2,7 +2,7 @@ package me.xmrvizzy.skyblocker;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.*;
import me.xmrvizzy.skyblocker.skyblock.dungeon.*;
import me.xmrvizzy.skyblocker.skyblock.dungeon.secrets.DungeonSecrets;
@@ -69,7 +69,7 @@ public class SkyblockerMod implements ClientModInitializer {
ClientTickEvents.END_CLIENT_TICK.register(this::tick);
Utils.init();
HotbarSlotLock.init();
- SkyblockerConfig.init();
+ SkyblockerConfigManager.init();
PriceInfoTooltip.init();
WikiLookup.init();
ItemRegistry.init();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java b/src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java
index 0cba3d5e..5a3f4504 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/compatibility/modmenu/ModMenuEntry.java
@@ -1,9 +1,8 @@
package me.xmrvizzy.skyblocker.compatibility.modmenu;
-import me.shedaniel.autoconfig.AutoConfig;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@@ -11,6 +10,6 @@ import net.fabricmc.api.Environment;
public class ModMenuEntry implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
- return screen -> AutoConfig.getConfigScreen(SkyblockerConfig.class, screen).get();
+ return SkyblockerConfigManager::createGUI;
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java b/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
new file mode 100644
index 00000000..4a615ecc
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
@@ -0,0 +1,11 @@
+package me.xmrvizzy.skyblocker.config;
+
+import dev.isxander.yacl3.api.Option;
+import dev.isxander.yacl3.api.controller.EnumControllerBuilder;
+
+public class ConfigUtils {
+ @SuppressWarnings("unchecked")
+ public static <E extends Enum<E>> EnumControllerBuilder<E> createEnumCyclingListController(Option<E> opt) {
+ return EnumControllerBuilder.create(opt).enumClass((Class<E>) opt.binding().defaultValue().getClass());
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 5848ed15..4b707e9a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -1,728 +1,808 @@
package me.xmrvizzy.skyblocker.config;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+
+import dev.isxander.yacl3.config.v2.api.SerialEntry;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import me.shedaniel.autoconfig.AutoConfig;
-import me.shedaniel.autoconfig.ConfigData;
-import me.shedaniel.autoconfig.annotation.Config;
-import me.shedaniel.autoconfig.annotation.ConfigEntry;
-import me.shedaniel.autoconfig.serializer.ConfigSerializer;
-import me.shedaniel.autoconfig.serializer.GsonConfigSerializer;
-import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.skyblock.item.CustomArmorTrims;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
-import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
-import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
-import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.minecraft.client.resource.language.I18n;
-import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
-import net.minecraft.util.Identifier;
-import org.eclipse.jgit.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
-
-@Config(name = "skyblocker")
-public class SkyblockerConfig implements ConfigData {
- @ConfigEntry.Category("general")
- @ConfigEntry.Gui.TransitiveObject
- public General general = new General();
+public class SkyblockerConfig {
+ @SerialEntry
+ public int version = 1;
+
+ @SerialEntry
+ public General general = new General();
- @ConfigEntry.Category("locations")
- @ConfigEntry.Gui.TransitiveObject
- public Locations locations = new Locations();
+ @SerialEntry
+ public Locations locations = new Locations();
- @ConfigEntry.Category("slayer")
- @ConfigEntry.Gui.TransitiveObject
- public Slayer slayer = new Slayer();
+ @SerialEntry
+ public Slayer slayer = new Slayer();
- @ConfigEntry.Category("quickNav")
- @ConfigEntry.Gui.TransitiveObject
- public QuickNav quickNav = new QuickNav();
+ @SerialEntry
+ public QuickNav quickNav = new QuickNav();
- @ConfigEntry.Category("messages")
- @ConfigEntry.Gui.TransitiveObject
- public Messages messages = new Messages();
+ @SerialEntry
+ public Messages messages = new Messages();
- @ConfigEntry.Category("richPresence")
- @ConfigEntry.Gui.TransitiveObject
- public RichPresence richPresence = new RichPresence();
+ @SerialEntry
+ public RichPresence richPresence = new RichPresence();
- public static class QuickNav {
- public boolean enableQuickNav = true;
+ public static class QuickNav {
+ @SerialEntry
+ public boolean enableQuickNav = true;
- @ConfigEntry.Category("button1")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills");
+ @SerialEntry
+ public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills");
- @ConfigEntry.Category("button2")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection");
+ @SerialEntry
+ public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection");
- @ConfigEntry.Category("button3")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets");
- /* REGEX Explanation
- * "Pets" : simple match on letters
+ /* REGEX Explanation
+ * "Pets" : simple match on letters
* "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)"
*/
-
- @ConfigEntry.Category("button4")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button4 = new QuickNavItem(true, new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]\\/2\\)", "/wardrobe");
- /* REGEX Explanation
- * "Wardrobe" : simple match on letters
- * " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)"
- */
-
- @ConfigEntry.Category("button5")
- @ConfigEntry.Gui.CollapsibleObject()
- 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");
-
- @ConfigEntry.Category("button6")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), "(?:Rift )?Storage(?: \\([12]\\/2\\))?", "/storage");
- /* 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)"
- */
-
- @ConfigEntry.Category("button7")
- @ConfigEntry.Gui.CollapsibleObject()
- 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");
-
- @ConfigEntry.Category("button8")
- @ConfigEntry.Gui.CollapsibleObject()
- 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");
-
- @ConfigEntry.Category("button9")
- @ConfigEntry.Gui.CollapsibleObject()
- 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");
-
- @ConfigEntry.Category("button10")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", "/etable");
-
- @ConfigEntry.Category("button11")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil");
-
- @ConfigEntry.Category("button12")
- @ConfigEntry.Gui.CollapsibleObject()
- 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;
- }
-
- public Boolean render;
-
- @ConfigEntry.Category("item")
- @ConfigEntry.Gui.CollapsibleObject()
- public ItemData item;
-
- public String uiTitle;
- 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 = "";
- }
-
- public String itemName;
- public int count;
- public String nbt;
- }
-
- public static class General {
- public boolean acceptReparty = true;
- public boolean backpackPreviewWithoutShift = false;
- public boolean compactorDeletorPreview = true;
- public boolean hideEmptyTooltips = true;
- public boolean hideStatusEffectOverlay = false;
-
- @ConfigEntry.Category("tabHud")
- @ConfigEntry.Gui.CollapsibleObject()
- public TabHudConf tabHud = new TabHudConf();
-
- @ConfigEntry.Gui.Excluded
- public String apiKey;
-
- @ConfigEntry.Category("bars")
- @ConfigEntry.Gui.CollapsibleObject()
- public Bars bars = new Bars();
-
- @ConfigEntry.Category("experiments")
- @ConfigEntry.Gui.CollapsibleObject()
- public Experiments experiments = new Experiments();
-
- @ConfigEntry.Category("fishing")
- @ConfigEntry.Gui.CollapsibleObject()
- public Fishing fishing = new Fishing();
-
- @ConfigEntry.Category("fairySouls")
- @ConfigEntry.Gui.CollapsibleObject()
- public FairySouls fairySouls = new FairySouls();
-
- @ConfigEntry.Category("shortcuts")
- @ConfigEntry.Gui.CollapsibleObject()
- public Shortcuts shortcuts = new Shortcuts();
-
- @ConfigEntry.Category("quiverWarning")
- @ConfigEntry.Gui.CollapsibleObject()
- public QuiverWarning quiverWarning = new QuiverWarning();
-
- @ConfigEntry.Category("itemList")
- @ConfigEntry.Gui.CollapsibleObject()
- public ItemList itemList = new ItemList();
-
- @ConfigEntry.Category("itemTooltip")
- @ConfigEntry.Gui.CollapsibleObject()
- public ItemTooltip itemTooltip = new ItemTooltip();
-
- @ConfigEntry.Category("itemInfoDisplay")
- @ConfigEntry.Gui.CollapsibleObject
- public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay();
-
- @ConfigEntry.Category("specialEffects")
- @ConfigEntry.Gui.CollapsibleObject
- public SpecialEffects specialEffects = new SpecialEffects();
-
- @ConfigEntry.Category("hitbox")
- @ConfigEntry.Gui.CollapsibleObject()
- public Hitbox hitbox = new Hitbox();
-
- @ConfigEntry.Gui.Tooltip()
- @ConfigEntry.Category("titleContainer")
- @ConfigEntry.Gui.CollapsibleObject()
- public TitleContainer titleContainer = new TitleContainer();
-
- @ConfigEntry.Category("Teleport Overlay")
- @ConfigEntry.Gui.CollapsibleObject()
- public TeleportOverlay teleportOverlay = new TeleportOverlay();
-
- @ConfigEntry.Gui.Excluded
- public List<Integer> lockedSlots = new ArrayList<>();
-
- @ConfigEntry.Gui.Excluded
- public Object2ObjectOpenHashMap<String, Text> customItemNames = new Object2ObjectOpenHashMap<>();
-
- @ConfigEntry.Gui.Excluded
- public Object2IntOpenHashMap<String> customDyeColors = new Object2IntOpenHashMap<>();
-
- @ConfigEntry.Gui.Excluded
- public Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customArmorTrims = new Object2ObjectOpenHashMap<>();
- }
-
- public static class TabHudConf {
- public boolean tabHudEnabled = true;
-
- @ConfigEntry.BoundedDiscrete(min = 10, max = 200)
- @ConfigEntry.Gui.Tooltip()
- public int tabHudScale = 100;
- @ConfigEntry.Gui.Tooltip
- public boolean plainPlayerNames = false;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- @ConfigEntry.Gui.Tooltip
- 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 {
- public boolean enableBars = true;
-
- @ConfigEntry.Category("barpositions")
- @ConfigEntry.Gui.CollapsibleObject()
- public BarPositions barpositions = new BarPositions();
- }
-
- public static class BarPositions {
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public BarPosition healthBarPosition = BarPosition.LAYER1;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public BarPosition manaBarPosition = BarPosition.LAYER1;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public BarPosition defenceBarPosition = BarPosition.LAYER1;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public BarPosition experienceBarPosition = BarPosition.LAYER1;
- }
-
- public enum BarPosition {
- LAYER1,
- LAYER2,
- RIGHT,
- NONE;
-
- @Override
- public String toString() {
- return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name());
- }
-
- public int toInt() {
- return switch (this) {
- case LAYER1 -> 0;
- case LAYER2 -> 1;
- case RIGHT -> 2;
- case NONE -> -1;
- };
- }
- }
-
- public static class Experiments {
- public boolean enableChronomatronSolver = true;
- public boolean enableSuperpairsSolver = true;
- public boolean enableUltrasequencerSolver = true;
- }
-
- public static class Fishing {
- public boolean enableFishingHelper = true;
- }
-
- public static class FairySouls {
- public boolean enableFairySoulsHelper = false;
- public boolean highlightFoundSouls = true;
- @ConfigEntry.Gui.Tooltip()
- public boolean highlightOnlyNearbySouls = false;
- }
-
- public static class Shortcuts {
- @ConfigEntry.Gui.Tooltip()
- public boolean enableShortcuts = true;
- @ConfigEntry.Gui.Tooltip()
- public boolean enableCommandShortcuts = true;
- @ConfigEntry.Gui.Tooltip()
- public boolean enableCommandArgShortcuts = true;
- }
-
+ @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 acceptReparty = true;
+
+ @SerialEntry
+ public boolean backpackPreviewWithoutShift = false;
+
+ @SerialEntry
+ public boolean compactorDeletorPreview = true;
+
+ @SerialEntry
+ public boolean hideEmptyTooltips = true;
+
+ @SerialEntry
+ public boolean hideStatusEffectOverlay = false;
+
+ @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 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 SpecialEffects specialEffects = new SpecialEffects();
+
+ @SerialEntry
+ public Hitbox hitbox = new Hitbox();
+
+ @SerialEntry
+ public TitleContainer titleContainer = new TitleContainer();
+
+ @SerialEntry
+ public TeleportOverlay teleportOverlay = new TeleportOverlay();
+
+ @SerialEntry
+ public List<Integer> lockedSlots = new ArrayList<>();
+
+ @SerialEntry
+ public Object2ObjectOpenHashMap<String, Text> customItemNames = new Object2ObjectOpenHashMap<>();
+
+ @SerialEntry
+ public Object2IntOpenHashMap<String> customDyeColors = new Object2IntOpenHashMap<>();
+
+ @SerialEntry
+ public Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customArmorTrims = new Object2ObjectOpenHashMap<>();
+ }
+
+ public static class TabHudConf {
+ @SerialEntry
+ public boolean tabHudEnabled = true;
+
+ @SerialEntry
+ public int tabHudScale = 100;
+
+ @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;
+
+ @SerialEntry
+ public BarPositions barPositions = new BarPositions();
+ }
+
+ public static class BarPositions {
+ @SerialEntry
+ public BarPosition healthBarPosition = BarPosition.LAYER1;
+
+ @SerialEntry
+ public BarPosition manaBarPosition = BarPosition.LAYER1;
+
+ @SerialEntry
+ public BarPosition defenceBarPosition = BarPosition.LAYER1;
+
+ @SerialEntry
+ public BarPosition experienceBarPosition = BarPosition.LAYER1;
+
+ }
+
+ public enum BarPosition {
+ LAYER1, LAYER2, RIGHT, NONE;
+
+ @Override
+ public String toString() {
+ return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name());
+ }
+
+ public int toInt() {
+ return switch (this) {
+ case LAYER1 -> 0;
+ case LAYER2 -> 1;
+ case RIGHT -> 2;
+ case NONE -> -1;
+ };
+ }
+ }
+
+ 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;
+ }
+
+ public static class FairySouls {
+ @SerialEntry
+ public boolean enableFairySoulsHelper = false;
+
+ @SerialEntry
+ public boolean highlightFoundSouls = true;
+
+ @SerialEntry
+ public boolean highlightOnlyNearbySouls = false;
+ }
+
+ 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 Hitbox {
- public boolean oldFarmlandHitbox = true;
- public boolean oldLeverHitbox = false;
- }
-
- public static class TitleContainer {
- @ConfigEntry.BoundedDiscrete(min = 30, max = 140)
- public float titleContainerScale = 100;
- public int x = 540;
- public int y = 10;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public Direction direction = Direction.HORIZONTAL;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN)
- public Alignment alignment = Alignment.MIDDLE;
- }
-
- public static class TeleportOverlay {
- public boolean enableTeleportOverlays = true;
- public boolean enableWeirdTransmission = true;
- public boolean enableInstantTransmission = true;
- public boolean enableEtherTransmission = true;
- public boolean enableSinrecallTransmission = true;
- public boolean enableWitherImpact = true;
- }
-
- 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 RichPresence {
- public boolean enableRichPresence = false;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- @ConfigEntry.Gui.Tooltip()
- public Info info = Info.LOCATION;
- public boolean cycleMode = false;
- public String customMessage = "Playing Skyblock";
- }
-
- public static class ItemList {
- public boolean enableItemList = 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 ItemTooltip {
- public boolean enableNPCPrice = true;
- @ConfigEntry.Gui.Tooltip
- public boolean enableMotesPrice = true;
- public boolean enableAvgBIN = true;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- @ConfigEntry.Gui.Tooltip()
- public Average avg = Average.THREE_DAY;
- public boolean enableLowestBIN = true;
- public boolean enableBazaarPrice = true;
- public boolean enableMuseumDate = true;
- }
-
- public static class ItemInfoDisplay {
- @ConfigEntry.Gui.Tooltip
- public boolean attributeShardInfo = true;
- }
-
- public static class SpecialEffects {
- @ConfigEntry.Gui.Tooltip
- public boolean rareDungeonDropEffects = true;
- }
-
- public static class Locations {
- @ConfigEntry.Category("barn")
- @ConfigEntry.Gui.CollapsibleObject()
- public Barn barn = new Barn();
-
- @ConfigEntry.Category("dungeons")
- @ConfigEntry.Gui.CollapsibleObject()
- public Dungeons dungeons = new Dungeons();
-
- @ConfigEntry.Category("dwarvenmines")
- @ConfigEntry.Gui.CollapsibleObject()
- public DwarvenMines dwarvenMines = new DwarvenMines();
-
- @ConfigEntry.Category("rift")
- @ConfigEntry.Gui.CollapsibleObject()
- public Rift rift = new Rift();
-
- @ConfigEntry.Category("spidersden")
- @ConfigEntry.Gui.CollapsibleObject()
- public SpidersDen spidersDen = new SpidersDen();
- }
-
- public static class Dungeons {
- @ConfigEntry.Gui.CollapsibleObject
- public SecretWaypoints secretWaypoints = new SecretWaypoints();
- @ConfigEntry.Gui.CollapsibleObject
- public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit();
- @ConfigEntry.Gui.Tooltip()
- public boolean croesusHelper = true;
- public boolean enableMap = true;
- public float mapScaling = 1f;
- public int mapX = 2;
- public int mapY = 2;
- @ConfigEntry.Gui.Tooltip
- public boolean starredMobGlow = true;
- public boolean solveThreeWeirdos = true;
- @ConfigEntry.Gui.Tooltip
- public boolean blazesolver = true;
- public boolean solveTrivia = true;
- @ConfigEntry.Gui.Tooltip
- public boolean solveTicTacToe = true;
- @ConfigEntry.Gui.CollapsibleObject
- public LividColor lividColor = new LividColor();
- @ConfigEntry.Gui.CollapsibleObject()
- public Terminals terminals = new Terminals();
- }
-
- public static class SecretWaypoints {
-
- public boolean enableSecretWaypoints = true;
- @ConfigEntry.Gui.Tooltip()
- public boolean noInitSecretWaypoints = false;
- public boolean enableEntranceWaypoints = true;
- public boolean enableSuperboomWaypoints = true;
- public boolean enableChestWaypoints = true;
- public boolean enableItemWaypoints = true;
- public boolean enableBatWaypoints = true;
- public boolean enableWitherWaypoints = true;
- public boolean enableLeverWaypoints = true;
- public boolean enableFairySoulWaypoints = true;
- public boolean enableStonkWaypoints = true;
- @ConfigEntry.Gui.Tooltip()
- public boolean enableDefaultWaypoints = true;
- }
-
- public static class DungeonChestProfit {
- @ConfigEntry.Gui.Tooltip
- public boolean enableProfitCalculator = true;
- @ConfigEntry.Gui.Tooltip
- public boolean includeKismet = false;
- @ConfigEntry.Gui.Tooltip
- public boolean includeEssence = true;
- @ConfigEntry.Gui.Tooltip
- public int neutralThreshold = 1000;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN)
- public FormattingOption neutralColor = FormattingOption.DARK_GRAY;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN)
- public FormattingOption profitColor = FormattingOption.DARK_GREEN;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN)
- public FormattingOption lossColor = FormattingOption.RED;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.DROPDOWN)
- @ConfigEntry.Gui.Tooltip
- public FormattingOption incompleteColor = FormattingOption.BLUE;
- }
-
- public enum FormattingOption {
- BLACK(Formatting.BLACK),
- DARK_BLUE(Formatting.DARK_BLUE),
- DARK_GREEN(Formatting.DARK_GREEN),
- DARK_AQUA(Formatting.DARK_AQUA),
- DARK_RED(Formatting.DARK_RED),
- DARK_PURPLE(Formatting.DARK_PURPLE),
- GOLD(Formatting.GOLD),
- GRAY(Formatting.GRAY),
- DARK_GRAY(Formatting.DARK_GRAY),
- BLUE(Formatting.BLUE),
- GREEN(Formatting.GREEN),
- AQUA(Formatting.AQUA),
- RED(Formatting.RED),
- LIGHT_PURPLE(Formatting.LIGHT_PURPLE),
- YELLOW(Formatting.YELLOW),
- WHITE(Formatting.WHITE),
- OBFUSCATED(Formatting.OBFUSCATED),
- BOLD(Formatting.BOLD),
- STRIKETHROUGH(Formatting.STRIKETHROUGH),
- UNDERLINE(Formatting.UNDERLINE),
- ITALIC(Formatting.ITALIC),
- RESET(Formatting.RESET);
- public final Formatting formatting;
-
- FormattingOption(Formatting formatting) {
- this.formatting = formatting;
- }
-
- @Override
- public String toString() {
- return StringUtils.capitalize(formatting.getName().replaceAll("_", " "));
- }
- }
-
- public static class LividColor {
- @ConfigEntry.Gui.Tooltip()
- public boolean enableLividColor = true;
- @ConfigEntry.Gui.Tooltip()
- public String lividColorText = "The livid color is [color]";
- }
-
- public static class Terminals {
- public boolean solveColor = true;
- public boolean solveOrder = true;
- public boolean solveStartsWith = true;
- }
-
- public static class DwarvenMines {
- public boolean enableDrillFuel = true;
- public boolean solveFetchur = true;
- public boolean solvePuzzler = true;
- @ConfigEntry.Gui.CollapsibleObject()
- public DwarvenHud dwarvenHud = new DwarvenHud();
- }
-
- public static class DwarvenHud {
- public boolean enabled = true;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- @ConfigEntry.Gui.Tooltip(count = 3)
- public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE;
- public boolean enableBackground = true;
- public int x = 10;
- public int y = 10;
- }
-
- 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 {
- public boolean solveHungryHiker = true;
- public boolean solveTreasureHunter = true;
- }
-
- public static class Rift {
- public boolean mirrorverseWaypoints = true;
- @ConfigEntry.BoundedDiscrete(min = 0, max = 5)
- @ConfigEntry.Gui.Tooltip
- public int mcGrubberStacks = 0;
- }
-
- public static class SpidersDen {
- @ConfigEntry.Category("relics")
- @ConfigEntry.Gui.CollapsibleObject()
- public Relics relics = new Relics();
- }
-
- public static class Relics {
- public boolean enableRelicsHelper = false;
- public boolean highlightFoundRelics = true;
- }
-
- public static class Slayer {
- @ConfigEntry.Category("vampire")
- @ConfigEntry.Gui.CollapsibleObject()
- public VampireSlayer vampireSlayer = new VampireSlayer();
- }
-
- public static class VampireSlayer {
- public boolean enableEffigyWaypoints = true;
- public boolean compactEffigyWaypoints;
- @ConfigEntry.BoundedDiscrete(min = 1, max = 10)
- @ConfigEntry.Gui.Tooltip()
- public int effigyUpdateFrequency = 5;
- public boolean enableHolyIceIndicator = true;
- public int holyIceIndicatorTickDelay = 10;
- @ConfigEntry.BoundedDiscrete(min = 1, max = 10)
- @ConfigEntry.Gui.Tooltip()
- public int holyIceUpdateFrequency = 5;
- public boolean enableHealingMelonIndicator = true;
- public float healingMelonHealthThreshold = 4F;
- public boolean enableSteakStakeIndicator = true;
- @ConfigEntry.BoundedDiscrete(min = 1, max = 10)
- @ConfigEntry.Gui.Tooltip()
- public int steakStakeUpdateFrequency = 5;
- public boolean enableManiaIndicator = true;
- @ConfigEntry.BoundedDiscrete(min = 1, max = 10)
- @ConfigEntry.Gui.Tooltip()
- public int maniaUpdateFrequency = 5;
- }
-
- public static class Messages {
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideAbility = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideHeal = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideAOTE = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideImplosion = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideAds = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideCombo = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- public ChatFilterResult hideAutopet = ChatFilterResult.PASS;
- @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
- @ConfigEntry.Gui.Tooltip
- public ChatFilterResult hideShowOff = ChatFilterResult.PASS;
- @ConfigEntry.Gui.Tooltip()
- public boolean hideMana = false;
- }
-
- public enum Info {
- PURSE,
- BITS,
- LOCATION;
-
- @Override
- public String toString() {
- return I18n.translate("text.autoconfig.skyblocker.option.richPresence.info." + name());
- }
- }
-
- /**
- * Registers the config to AutoConfig and registers commands to open the config screen.
- */
- public static void init() {
- Gson gson = new GsonBuilder()
- .setPrettyPrinting()
- .registerTypeHierarchyAdapter(Text.class, new Text.Serializer())
- .registerTypeHierarchyAdapter(Style.class, new Style.Serializer())
- .registerTypeHierarchyAdapter(Identifier.class, new Identifier.Serializer())
- .create();
-
- ConfigSerializer.Factory<SkyblockerConfig> serializer = (cfg, cfgClass) -> new GsonConfigSerializer<>(cfg, cfgClass, gson);
-
- AutoConfig.register(SkyblockerConfig.class, serializer);
- ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options")))));
- }
-
- /**
- * 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 literal(name).executes(Scheduler.queueOpenScreenCommand(AutoConfig.getConfigScreen(SkyblockerConfig.class, null)));
- }
-
- public static SkyblockerConfig get() {
- return AutoConfig.getConfigHolder(SkyblockerConfig.class).getConfig();
- }
-
- public static void save() {
- AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
- }
+ public static class Hitbox {
+ @SerialEntry
+ public boolean oldFarmlandHitbox = true;
+
+ @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 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 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 RichPresence {
+ @SerialEntry
+ public boolean enableRichPresence = false;
+
+ @SerialEntry
+ public Info info = Info.LOCATION;
+
+ @SerialEntry
+ public boolean cycleMode = false;
+
+ @SerialEntry
+ public String customMessage = "Playing Skyblock";
+ }
+
+ public static class ItemList {
+ @SerialEntry
+ public boolean enableItemList = 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 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 enableMuseumDate = true;
+ }
+
+ public static class ItemInfoDisplay {
+ @SerialEntry
+ public boolean attributeShardInfo = true;
+ }
+
+ public static class SpecialEffects {
+ @SerialEntry
+ public boolean rareDungeonDropEffects = true;
+ }
+
+ public static class Locations {
+ @SerialEntry
+ public Barn barn = new Barn();
+
+ @SerialEntry
+ public Dungeons dungeons = new Dungeons();
+
+ @SerialEntry
+ public DwarvenMines dwarvenMines = new DwarvenMines();
+
+ @SerialEntry
+ public Rift rift = new Rift();
+
+ @SerialEntry
+ public SpidersDen spidersDen = new SpidersDen();
+ }
+
+ public static class Dungeons {
+ @SerialEntry
+ public SecretWaypoints secretWaypoints = new SecretWaypoints();
+
+ @SerialEntry
+ public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit();
+
+ @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 starredMobGlow = true;
+
+ @SerialEntry
+ public boolean solveThreeWeirdos = true;
+
+ @SerialEntry
+ public boolean blazesolver = true;
+
+ @SerialEntry
+ public boolean solveTrivia = true;
+
+ @SerialEntry
+ public boolean solveTicTacToe = true;
+
+ @SerialEntry
+ public LividColor lividColor = new LividColor();
+
+ @SerialEntry
+ public Terminals terminals = new Terminals();
+ }
+
+ public static class SecretWaypoints {
+ @SerialEntry
+ public boolean enableSecretWaypoints = true;
+
+ @SerialEntry
+ public boolean noInitSecretWaypoints = false;
+
+ @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 enableDefaultWaypoints = true;
+ }
+
+ public static class DungeonChestProfit {
+ @SerialEntry
+ public boolean enableProfitCalculator = true;
+
+ @SerialEntry
+ public boolean includeKismet = false;
+
+ @SerialEntry
+ public boolean includeEssence = true;
+
+ @SerialEntry
+ public int neutralThreshold = 1000;
+
+ @SerialEntry
+ public FormattingOption neutralColor = FormattingOption.DARK_GRAY;
+
+ @SerialEntry
+ public FormattingOption profitColor = FormattingOption.DARK_GREEN;
+
+ @SerialEntry
+ public FormattingOption lossColor = FormattingOption.RED;
+
+ @SerialEntry
+ public FormattingOption incompleteColor = FormattingOption.BLUE;
+
+ }
+
+ public enum FormattingOption {
+ BLACK(Formatting.BLACK),
+ DARK_BLUE(Formatting.DARK_BLUE),
+ DARK_GREEN(Formatting.DARK_GREEN),
+ DARK_AQUA(Formatting.DARK_AQUA),
+ DARK_RED(Formatting.DARK_RED),
+ DARK_PURPLE(Formatting.DARK_PURPLE),
+ GOLD(Formatting.GOLD),
+ GRAY(Formatting.GRAY),
+ DARK_GRAY(Formatting.DARK_GRAY),
+ BLUE(Formatting.BLUE),
+ GREEN(Formatting.GREEN),
+ AQUA(Formatting.AQUA),
+ RED(Formatting.RED),
+ LIGHT_PURPLE(Formatting.LIGHT_PURPLE),
+ YELLOW(Formatting.YELLOW),
+ WHITE(Formatting.WHITE),
+ OBFUSCATED(Formatting.OBFUSCATED),
+ BOLD(Formatting.BOLD),
+ STRIKETHROUGH(Formatting.STRIKETHROUGH),
+ UNDERLINE(Formatting.UNDERLINE),
+ ITALIC(Formatting.ITALIC),
+ RESET(Formatting.RESET);
+
+ public final Formatting formatting;
+
+
+ FormattingOption(Formatting formatting) {
+ this.formatting = formatting;
+ }
+
+ @Override
+ public String toString() {
+ return StringUtils.capitalize(formatting.getName().replaceAll("_", " "));
+ }
+ }
+
+ public static class LividColor {
+ @SerialEntry
+ public boolean enableLividColor = 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 DwarvenHud dwarvenHud = new DwarvenHud();
+ }
+
+ public static class DwarvenHud {
+ @SerialEntry
+ public boolean enabled = true;
+
+ @SerialEntry
+ public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE;
+
+ @SerialEntry
+ public boolean enableBackground = true;
+
+ @SerialEntry
+ public int x = 10;
+
+ @SerialEntry
+ public int y = 10;
+ }
+
+ 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 Rift {
+ @SerialEntry
+ public boolean mirrorverseWaypoints = true;
+
+ @SerialEntry
+ public int mcGrubberStacks = 0;
+ }
+
+ 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 Slayer {
+ @SerialEntry
+ public VampireSlayer vampireSlayer = new VampireSlayer();
+ }
+
+ 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 boolean hideMana = false;
+ }
+
+ public enum Info {
+ PURSE, BITS, LOCATION;
+
+ @Override
+ public String toString() {
+ return I18n.translate("text.autoconfig.skyblocker.option.richPresence.info." + name());
+ }
+ }
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfigManager.java
new file mode 100644
index 00000000..eb756641
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfigManager.java
@@ -0,0 +1,86 @@
+package me.xmrvizzy.skyblocker.config;
+
+import java.lang.StackWalker.Option;
+import java.nio.file.Path;
+
+import com.google.gson.FieldNamingPolicy;
+import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+
+import dev.isxander.yacl3.api.YetAnotherConfigLib;
+import dev.isxander.yacl3.config.v2.api.ConfigClassHandler;
+import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
+import me.xmrvizzy.skyblocker.config.categories.DiscordRPCCategory;
+import me.xmrvizzy.skyblocker.config.categories.DungeonsCategory;
+import me.xmrvizzy.skyblocker.config.categories.DwarvenMinesCategory;
+import me.xmrvizzy.skyblocker.config.categories.GeneralCategory;
+import me.xmrvizzy.skyblocker.config.categories.LocationsCategory;
+import me.xmrvizzy.skyblocker.config.categories.MessageFilterCategory;
+import me.xmrvizzy.skyblocker.config.categories.QuickNavigationCategory;
+import me.xmrvizzy.skyblocker.config.categories.SlayersCategory;
+import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.fabricmc.loader.api.FabricLoader;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+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();
+
+ 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!");
+ }
+
+ HANDLER.load();
+ ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options")))));
+ }
+
+ 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(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);
+ }
+
+ /**
+ * 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/me/xmrvizzy/skyblocker/config/categories/DiscordRPCCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DiscordRPCCategory.java
new file mode 100644
index 00000000..2fe1f775
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DiscordRPCCategory.java
@@ -0,0 +1,50 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+import dev.isxander.yacl3.api.ConfigCategory;
+import dev.isxander.yacl3.api.Option;
+import dev.isxander.yacl3.api.OptionDescription;
+import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.StringControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.ConfigUtils;
+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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java
new file mode 100644
index 00000000..92a7ddec
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java
@@ -0,0 +1,316 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+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.OptionFlag;
+import dev.isxander.yacl3.api.OptionGroup;
+import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.StringControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig.FormattingOption;
+import me.xmrvizzy.skyblocker.config.ConfigUtils;
+import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMapConfigScreen;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.text.Text;
+
+public class DungeonsCategory {
+
+ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) {
+ return ConfigCategory.createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.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.enableSecretWaypoints"))
+ .binding(defaults.locations.dungeons.secretWaypoints.enableSecretWaypoints,
+ () -> config.locations.dungeons.secretWaypoints.enableSecretWaypoints,
+ newValue -> config.locations.dungeons.secretWaypoints.enableSecretWaypoints = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.noInitSecretWaypoints"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.noInitSecretWaypoints.@Tooltip")))
+ .binding(defaults.locations.dungeons.secretWaypoints.noInitSecretWaypoints,
+ () -> config.locations.dungeons.secretWaypoints.noInitSecretWaypoints,
+ newValue -> config.locations.dungeons.secretWaypoints.noInitSecretWaypoints = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .flag(OptionFlag.GAME_RESTART)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .build())
+ .build())
+
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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.<FormattingOption>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.neutralColor"))
+ .binding(defaults.locations.dungeons.dungeonChestProfit.neutralColor,
+ () -> config.locations.dungeons.dungeonChestProfit.neutralColor,
+ newValue -> config.locations.dungeons.dungeonChestProfit.neutralColor = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<FormattingOption>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.profitColor"))
+ .binding(defaults.locations.dungeons.dungeonChestProfit.profitColor,
+ () -> config.locations.dungeons.dungeonChestProfit.profitColor,
+ newValue -> config.locations.dungeons.dungeonChestProfit.profitColor = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<FormattingOption>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.lossColor"))
+ .binding(defaults.locations.dungeons.dungeonChestProfit.lossColor,
+ () -> config.locations.dungeons.dungeonChestProfit.lossColor,
+ newValue -> config.locations.dungeons.dungeonChestProfit.lossColor = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<FormattingOption>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.incompleteColor"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.incompleteColor.@Tooltip")))
+ .binding(defaults.locations.dungeons.dungeonChestProfit.incompleteColor,
+ () -> config.locations.dungeons.dungeonChestProfit.incompleteColor,
+ newValue -> config.locations.dungeons.dungeonChestProfit.incompleteColor = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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.<Integer>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mapX"))
+ .binding(defaults.locations.dungeons.mapX,
+ () -> config.locations.dungeons.mapX,
+ newValue -> config.locations.dungeons.mapX = newValue)
+ .controller(IntegerFieldControllerBuilder::create)
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mapY"))
+ .binding(defaults.locations.dungeons.mapY,
+ () -> config.locations.dungeons.mapY,
+ newValue -> config.locations.dungeons.mapY = newValue)
+ .controller(IntegerFieldControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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.enableLividColor"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColor.@Tooltip")))
+ .binding(defaults.locations.dungeons.lividColor.enableLividColor,
+ () -> config.locations.dungeons.lividColor.enableLividColor,
+ newValue -> config.locations.dungeons.lividColor.enableLividColor = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .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())
+
+ //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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .build())
+ .build())
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java
new file mode 100644
index 00000000..42d623ac
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java
@@ -0,0 +1,95 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+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 dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.ConfigUtils;
+import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen;
+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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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.enabled"))
+ .binding(defaults.locations.dwarvenMines.dwarvenHud.enabled,
+ () -> config.locations.dwarvenMines.dwarvenHud.enabled,
+ newValue -> config.locations.dwarvenMines.dwarvenHud.enabled = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .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())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground"))
+ .binding(defaults.locations.dwarvenMines.dwarvenHud.enableBackground,
+ () -> config.locations.dwarvenMines.dwarvenHud.enableBackground,
+ newValue -> config.locations.dwarvenMines.dwarvenHud.enableBackground = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x"))
+ .binding(defaults.locations.dwarvenMines.dwarvenHud.x,
+ () -> config.locations.dwarvenMines.dwarvenHud.x,
+ newValue -> config.locations.dwarvenMines.dwarvenHud.x = newValue)
+ .controller(IntegerFieldControllerBuilder::create)
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y"))
+ .binding(defaults.locations.dwarvenMines.dwarvenHud.y,
+ () -> config.locations.dwarvenMines.dwarvenHud.y,
+ newValue -> config.locations.dwarvenMines.dwarvenHud.y = newValue)
+ .controller(IntegerFieldControllerBuilder::create)
+ .build())
+ .build())
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java
new file mode 100644
index 00000000..95b01dfd
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java
@@ -0,0 +1,484 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+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 dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.ConfigUtils;
+import me.xmrvizzy.skyblocker.skyblock.shortcut.ShortcutsConfigScreen;
+import me.xmrvizzy.skyblocker.utils.render.title.TitleContainerConfigScreen;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.text.Text;
+
+public class GeneralCategory {
+
+ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) {
+ return ConfigCategory.createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.category.general"))
+
+ //Ungrouped Options
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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.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(BooleanControllerBuilder::create)
+ .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())
+
+ //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(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<SkyblockerConfig.BarPosition>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition"))
+ .binding(defaults.general.bars.barPositions.healthBarPosition,
+ () -> config.general.bars.barPositions.healthBarPosition,
+ newValue -> config.general.bars.barPositions.healthBarPosition = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<SkyblockerConfig.BarPosition>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition"))
+ .binding(defaults.general.bars.barPositions.manaBarPosition,
+ () -> config.general.bars.barPositions.manaBarPosition,
+ newValue -> config.general.bars.barPositions.manaBarPosition = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<SkyblockerConfig.BarPosition>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition"))
+ .binding(defaults.general.bars.barPositions.defenceBarPosition,
+ () -> config.general.bars.barPositions.defenceBarPosition,
+ newValue -> config.general.bars.barPositions.defenceBarPosition = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<SkyblockerConfig.BarPosition>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition"))
+ .binding(defaults.general.bars.barPositions.experienceBarPosition,
+ () -> config.general.bars.barPositions.experienceBarPosition,
+ newValue -> config.general.bars.barPositions.experienceBarPosition = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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())
+
+ //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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate"))
+ .binding(defaults.general.itemTooltip.enableMuseumDate,
+ () -> config.general.itemTooltip.enableMuseumDate,
+ newValue -> config.general.itemTooltip.enableMuseumDate = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(Option.<Integer>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.x"))
+ .binding(defaults.general.titleContainer.x,
+ () -> config.general.titleContainer.x,
+ newValue -> config.general.titleContainer.x = newValue)
+ .controller(IntegerFieldControllerBuilder::create)
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.y"))
+ .binding(defaults.general.titleContainer.y,
+ () -> config.general.titleContainer.y,
+ newValue -> config.general.titleContainer.y = newValue)
+ .controller(IntegerFieldControllerBuilder::create)
+ .build())
+ .option(Option.<SkyblockerConfig.Direction>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.direction"))
+ .binding(defaults.general.titleContainer.direction,
+ () -> config.general.titleContainer.direction,
+ newValue -> config.general.titleContainer.direction = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+ .option(Option.<SkyblockerConfig.Alignment>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.alignment"))
+ .binding(defaults.general.titleContainer.alignment,
+ () -> config.general.titleContainer.alignment,
+ newValue -> config.general.titleContainer.alignment = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .build())
+ .build())
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java
new file mode 100644
index 00000000..8c3189ee
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java
@@ -0,0 +1,80 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+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.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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())
+
+ //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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .build())
+ .build())
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java
new file mode 100644
index 00000000..5adec834
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java
@@ -0,0 +1,99 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+import dev.isxander.yacl3.api.ConfigCategory;
+import dev.isxander.yacl3.api.Option;
+import dev.isxander.yacl3.api.OptionDescription;
+import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
+import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.ConfigUtils;
+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"))
+ .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.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideMana"))
+ .binding(defaults.messages.hideMana,
+ () -> config.messages.hideMana,
+ newValue -> config.messages.hideMana = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java
new file mode 100644
index 00000000..4ca38375
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java
@@ -0,0 +1,596 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+import dev.isxander.yacl3.api.ConfigCategory;
+import dev.isxander.yacl3.api.Option;
+import dev.isxander.yacl3.api.OptionGroup;
+import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.StringControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+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"))
+
+ //Button 1
+ .group(OptionGroup.createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button1.render,
+ () -> config.quickNav.button1.render,
+ newValue -> config.quickNav.button1.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button2"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button2.render,
+ () -> config.quickNav.button2.render,
+ newValue -> config.quickNav.button2.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button3"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button3.render,
+ () -> config.quickNav.button3.render,
+ newValue -> config.quickNav.button3.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button4"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button4.render,
+ () -> config.quickNav.button4.render,
+ newValue -> config.quickNav.button4.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button5"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button5.render,
+ () -> config.quickNav.button5.render,
+ newValue -> config.quickNav.button5.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button6"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button6.render,
+ () -> config.quickNav.button6.render,
+ newValue -> config.quickNav.button6.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button7"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button7.render,
+ () -> config.quickNav.button7.render,
+ newValue -> config.quickNav.button7.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button8"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button8.render,
+ () -> config.quickNav.button8.render,
+ newValue -> config.quickNav.button8.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button9"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button9.render,
+ () -> config.quickNav.button9.render,
+ newValue -> config.quickNav.button9.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button10"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button10.render,
+ () -> config.quickNav.button10.render,
+ newValue -> config.quickNav.button10.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button11"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button11.render,
+ () -> config.quickNav.button11.render,
+ newValue -> config.quickNav.button11.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.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.button12"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.render"))
+ .binding(defaults.quickNav.button12.render,
+ () -> config.quickNav.button12.render,
+ newValue -> config.quickNav.button12.render = newValue)
+ .controller(BooleanControllerBuilder::create)
+ .build())
+ .option(Option.<String>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.quickNav.button1.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.button1.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.button1.item.nbt"))
+ .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.button1.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.button1.clickEvent"))
+ .binding(defaults.quickNav.button12.clickEvent,
+ () -> config.quickNav.button12.clickEvent,
+ newValue -> config.quickNav.button12.clickEvent = newValue)
+ .controller(StringControllerBuilder::create)
+ .build())
+ .build())
+
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java
new file mode 100644
index 00000000..bfb3c6ad
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java
@@ -0,0 +1,116 @@
+package me.xmrvizzy.skyblocker.config.categories;
+
+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.BooleanControllerBuilder;
+import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+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"))
+
+ //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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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(BooleanControllerBuilder::create)
+ .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())
+
+ .build();
+ }
+}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/AbstractInventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/AbstractInventoryScreenMixin.java
index db517411..df71396e 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/AbstractInventoryScreenMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/AbstractInventoryScreenMixin.java
@@ -5,7 +5,7 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen;
@@ -14,6 +14,6 @@ public class AbstractInventoryScreenMixin {
@Inject(method = "drawStatusEffects", at = @At("HEAD"), cancellable = true)
private void skyblocker$dontDrawStatusEffects(CallbackInfo ci) {
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideStatusEffectOverlay) ci.cancel();
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.hideStatusEffectOverlay) ci.cancel();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ArmorTrimMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ArmorTrimMixin.java
index a90cf4d4..1076332f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ArmorTrimMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ArmorTrimMixin.java
@@ -3,7 +3,7 @@ package me.xmrvizzy.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.llamalad7.mixinextras.sugar.Local;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.item.CustomArmorTrims;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.item.ItemStack;
@@ -22,7 +22,7 @@ public class ArmorTrimMixin {
NbtCompound nbt = stack.getNbt();
if (Utils.isOnSkyblock() && nbt != null && nbt.contains("ExtraAttributes")) {
- Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customTrims = SkyblockerConfig.get().general.customArmorTrims;
+ Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customTrims = SkyblockerConfigManager.get().general.customArmorTrims;
NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java
index cfe979d0..356095ab 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java
@@ -6,7 +6,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
import dev.cbyrne.betterinject.annotations.Arg;
import dev.cbyrne.betterinject.annotations.Inject;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.item.AttributeShards;
import me.xmrvizzy.skyblocker.utils.ItemUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
@@ -42,7 +42,7 @@ public abstract class DrawContextMixin {
@Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD"))
public void skyblocker$renderItemBar(@Arg ItemStack stack, @Arg(ordinal = 0) int x, @Arg(ordinal = 1) int y) {
- if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel || stack.isEmpty()) {
+ if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel || stack.isEmpty()) {
return;
}
@@ -99,7 +99,7 @@ public abstract class DrawContextMixin {
@Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD"))
private void skyblocker$renderAttributeShardDisplay(@Arg TextRenderer textRenderer, @Arg ItemStack stack, @Arg(ordinal = 0) int x, @Arg(ordinal = 1) int y, @Local(argsOnly = true) LocalRef<String> countOverride) {
- if (!SkyblockerConfig.get().general.itemInfoDisplay.attributeShardInfo) return;
+ if (!SkyblockerConfigManager.get().general.itemInfoDisplay.attributeShardInfo) return;
NbtCompound nbt = stack.getNbt();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java
index f04c4cdd..bbe31472 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DyeableItemMixin.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.item.DyeableItem;
import net.minecraft.item.ItemStack;
@@ -19,7 +19,7 @@ public interface DyeableItemMixin {
NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
- return SkyblockerConfig.get().general.customDyeColors.getOrDefault(itemUuid, originalColor);
+ return SkyblockerConfigManager.get().general.customDyeColors.getOrDefault(itemUuid, originalColor);
}
return originalColor;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java
index b07390b7..94053381 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/FarmlandBlockMixin.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
@@ -27,7 +27,7 @@ public abstract class FarmlandBlockMixin extends Block {
@ModifyReturnValue(method = "getOutlineShape", at = @At("RETURN"))
private VoxelShape skyblocker$replaceOutlineShape(VoxelShape original) {
- return Utils.isOnSkyblock() && SkyblockerConfig.get().general.hitbox.oldFarmlandHitbox ? VoxelShapes.fullCube() : original;
+ return Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.hitbox.oldFarmlandHitbox ? VoxelShapes.fullCube() : original;
}
@SuppressWarnings("deprecation")
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
index 33532788..17497ded 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.mixin;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver;
import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver;
import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver;
@@ -59,18 +59,18 @@ public abstract class HandledScreenMixin extends Screen {
if (!Utils.isOnSkyblock()) return;
// Hide Empty Tooltips
- if (SkyblockerConfig.get().general.hideEmptyTooltips && focusedSlot.getStack().getName().getString().equals(" ")) {
+ if (SkyblockerConfigManager.get().general.hideEmptyTooltips && focusedSlot.getStack().getName().getString().equals(" ")) {
ci.cancel();
}
// Backpack Preview
- boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown();
+ boolean shiftDown = SkyblockerConfigManager.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown();
if (shiftDown && getTitle().getString().equals("Storage") && focusedSlot.inventory != client.player.getInventory() && BackpackPreview.renderPreview(context, focusedSlot.getIndex(), x, y)) {
ci.cancel();
}
// Compactor Preview
- if (SkyblockerConfig.get().general.compactorDeletorPreview) {
+ if (SkyblockerConfigManager.get().general.compactorDeletorPreview) {
ItemStack stack = focusedSlot.getStack();
Matcher matcher = CompactorDeletorPreview.NAME.matcher(ItemRegistry.getInternalName(stack));
if (matcher.matches() && CompactorDeletorPreview.drawPreview(context, stack, matcher.group("type"), matcher.group("size"), x, y)) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java
index 752b102a..c73ca2aa 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java
@@ -2,7 +2,7 @@ package me.xmrvizzy.skyblocker.mixin;
import com.llamalad7.mixinextras.sugar.Local;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.FancyStatusBars;
import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock;
import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap;
@@ -41,7 +41,7 @@ public abstract class InGameHudMixin {
@Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true)
private void skyblocker$renderExperienceBar(CallbackInfo ci) {
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.isInTheRift())
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.bars.enableBars && !Utils.isInTheRift())
ci.cancel();
}
@@ -52,18 +52,18 @@ public abstract class InGameHudMixin {
if (statusBars.render(context, scaledWidth, scaledHeight))
ci.cancel();
- if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap)
+ if (Utils.isInDungeons() && SkyblockerConfigManager.get().locations.dungeons.enableMap)
DungeonMap.render(context.getMatrices());
}
@Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true)
private void skyblocker$renderMountHealth(CallbackInfo ci) {
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars && !Utils.isInTheRift())
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.bars.enableBars && !Utils.isInTheRift())
ci.cancel();
}
@Inject(method = "renderStatusEffectOverlay", at = @At("HEAD"), cancellable = true)
private void skyblocker$dontRenderStatusEffects(CallbackInfo ci) {
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideStatusEffectOverlay) ci.cancel();
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.hideStatusEffectOverlay) ci.cancel();
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
index 729124fd..596fa1f9 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InventoryScreenMixin.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemListWidget;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
@@ -13,6 +13,6 @@ import org.spongepowered.asm.mixin.injection.At;
public abstract class InventoryScreenMixin {
@ModifyExpressionValue(method = "<init>", at = @At(value = "NEW", target = "net/minecraft/client/gui/screen/recipebook/RecipeBookWidget"))
private RecipeBookWidget skyblocker$replaceRecipeBook(RecipeBookWidget original) {
- return SkyblockerConfig.get().general.itemList.enableItemList && Utils.isOnSkyblock() ? new ItemListWidget() : original;
+ return SkyblockerConfigManager.get().general.itemList.enableItemList && Utils.isOnSkyblock() ? new ItemListWidget() : original;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java
index 63dc6624..063c048e 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemStackMixin.java
@@ -7,7 +7,7 @@ import org.spongepowered.asm.mixin.injection.At;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
@@ -25,7 +25,7 @@ public abstract class ItemStackMixin {
NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes");
String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
- return SkyblockerConfig.get().general.customItemNames.getOrDefault(itemUuid, original);
+ return SkyblockerConfigManager.get().general.customItemNames.getOrDefault(itemUuid, original);
}
return original;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
index ec7b6ddd..903e8ee0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.mixin;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud;
import me.xmrvizzy.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr;
@@ -28,7 +28,7 @@ public class PlayerListHudMixin {
@Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true)
public void skyblocker$renderTabHud(@Arg DrawContext context, @Arg int w, CallbackInfo info) {
- if (!Utils.isOnSkyblock() || !SkyblockerConfig.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) {
+ if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().general.tabHud.tabHudEnabled || TabHud.defaultTgl.isPressed()) {
return;
}
@@ -38,7 +38,7 @@ public class PlayerListHudMixin {
}
int h = MinecraftClient.getInstance().getWindow().getScaledHeight();
- float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f;
+ float scale = SkyblockerConfigManager.get().general.tabHud.tabHudScale / 100f;
w = (int) (w / scale);
h = (int) (h / scale);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/WorldRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/WorldRendererMixin.java
index 53dd57a7..8cf94c69 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/WorldRendererMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/WorldRendererMixin.java
@@ -9,7 +9,7 @@ import com.llamalad7.mixinextras.sugar.Local;
import com.llamalad7.mixinextras.sugar.Share;
import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.dungeon.StarredMobGlow;
import net.minecraft.client.render.WorldRenderer;
import net.minecraft.entity.Entity;
@@ -19,7 +19,7 @@ public class WorldRendererMixin {
@ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z"))
private boolean skyblocker$shouldStarredMobGlow(boolean original, @Local Entity entity, @Share("isGlowingStarredMob") LocalBooleanRef isGlowingStarredMob) {
- boolean isAStarredMobThatShouldGlow = SkyblockerConfig.get().locations.dungeons.starredMobGlow && StarredMobGlow.shouldMobGlow(entity);
+ boolean isAStarredMobThatShouldGlow = SkyblockerConfigManager.get().locations.dungeons.starredMobGlow && StarredMobGlow.shouldMobGlow(entity);
isGlowingStarredMob.set(isAStarredMobThatShouldGlow);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java
index fcd6be7a..46454fb3 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java
@@ -8,6 +8,7 @@ import com.google.gson.JsonParser;
import com.mojang.brigadier.CommandDispatcher;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.NEURepo;
import me.xmrvizzy.skyblocker.utils.PosUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
@@ -141,7 +142,7 @@ public class FairySouls {
}
private static void render(WorldRenderContext context) {
- SkyblockerConfig.FairySouls fairySoulsConfig = SkyblockerConfig.get().general.fairySouls;
+ SkyblockerConfig.FairySouls fairySoulsConfig = SkyblockerConfigManager.get().general.fairySouls;
if (fairySoulsConfig.enableFairySoulsHelper && fairySoulsLoaded.isDone() && fairySouls.containsKey(Utils.getLocationRaw())) {
for (BlockPos fairySoulPos : fairySouls.get(Utils.getLocationRaw())) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
index 1a460f5b..a7428056 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
@@ -40,7 +40,7 @@ public class FancyStatusBars {
public boolean render(DrawContext context, int scaledWidth, int scaledHeight) {
var player = client.player;
- if (!SkyblockerConfig.get().general.bars.enableBars || player == null || Utils.isInTheRift())
+ if (!SkyblockerConfigManager.get().general.bars.enableBars || player == null || Utils.isInTheRift())
return false;
anchorsX[0] = scaledWidth / 2 - 91;
anchorsY[0] = scaledHeight - 33;
@@ -60,10 +60,10 @@ public class FancyStatusBars {
// Update positions of bars from config
for (int i = 0; i < 4; i++) {
int configAnchorNum = switch (i) {
- case 0 -> SkyblockerConfig.get().general.bars.barpositions.healthBarPosition.toInt();
- case 1 -> SkyblockerConfig.get().general.bars.barpositions.manaBarPosition.toInt();
- case 2 -> SkyblockerConfig.get().general.bars.barpositions.defenceBarPosition.toInt();
- case 3 -> SkyblockerConfig.get().general.bars.barpositions.experienceBarPosition.toInt();
+ case 0 -> SkyblockerConfigManager.get().general.bars.barPositions.healthBarPosition.toInt();
+ case 1 -> SkyblockerConfigManager.get().general.bars.barPositions.manaBarPosition.toInt();
+ case 2 -> SkyblockerConfigManager.get().general.bars.barPositions.defenceBarPosition.toInt();
+ case 3 -> SkyblockerConfigManager.get().general.bars.barPositions.experienceBarPosition.toInt();
default -> 0;
};
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java
index f039a79d..dca3f30b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import me.xmrvizzy.skyblocker.utils.render.title.Title;
import net.fabricmc.fabric.api.event.player.UseItemCallback;
@@ -46,7 +46,7 @@ public class FishingHelper {
public static void onSound(PlaySoundS2CPacket packet) {
String path = packet.getSound().value().getId().getPath();
- if (SkyblockerConfig.get().general.fishing.enableFishingHelper && startTime != 0 && System.currentTimeMillis() >= startTime + 2000 && ("entity.generic.splash".equals(path) || "entity.player.splash".equals(path))) {
+ if (SkyblockerConfigManager.get().general.fishing.enableFishingHelper && startTime != 0 && System.currentTimeMillis() >= startTime + 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());
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/HotbarSlotLock.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/HotbarSlotLock.java
index e9b2bfa3..30dd1270 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/HotbarSlotLock.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/HotbarSlotLock.java
@@ -1,7 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock;
-import me.shedaniel.autoconfig.AutoConfig;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.option.KeyBinding;
@@ -22,7 +21,7 @@ public class HotbarSlotLock {
}
public static boolean isLocked(int slot) {
- return SkyblockerConfig.get().general.lockedSlots.contains(slot);
+ return SkyblockerConfigManager.get().general.lockedSlots.contains(slot);
}
public static void handleDropSelectedItem(int slot, CallbackInfoReturnable<Boolean> cir) {
@@ -31,11 +30,11 @@ public class HotbarSlotLock {
public static void handleInputEvents(ClientPlayerEntity player) {
while (hotbarSlotLock.wasPressed()) {
- List<Integer> lockedSlots = SkyblockerConfig.get().general.lockedSlots;
+ List<Integer> lockedSlots = SkyblockerConfigManager.get().general.lockedSlots;
int selected = player.getInventory().selectedSlot;
if (!isLocked(player.getInventory().selectedSlot)) lockedSlots.add(selected);
else lockedSlots.remove(Integer.valueOf(selected));
- AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
+ SkyblockerConfigManager.save();
}
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/QuiverWarning.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/QuiverWarning.java
index 381bf94c..2d0715e4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/QuiverWarning.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/QuiverWarning.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
@@ -21,7 +21,7 @@ public class QuiverWarning {
public static boolean onChatMessage(Text text, boolean overlay) {
String message = text.getString();
- if (SkyblockerConfig.get().general.quiverWarning.enableQuiverWarning && message.endsWith("left in your Quiver!")) {
+ if (SkyblockerConfigManager.get().general.quiverWarning.enableQuiverWarning && message.endsWith("left in your Quiver!")) {
MinecraftClient.getInstance().inGameHud.setDefaultTitleFade();
if (message.startsWith("You only have 50")) {
onChatMessage(Type.FIFTY_LEFT);
@@ -37,14 +37,14 @@ public class QuiverWarning {
private static void onChatMessage(Type warning) {
if (!Utils.isInDungeons()) {
MinecraftClient.getInstance().inGameHud.setTitle(Text.translatable(warning.key).formatted(Formatting.RED));
- } else if (SkyblockerConfig.get().general.quiverWarning.enableQuiverWarningInDungeons) {
+ } else if (SkyblockerConfigManager.get().general.quiverWarning.enableQuiverWarningInDungeons) {
MinecraftClient.getInstance().inGameHud.setTitle(Text.translatable(warning.key).formatted(Formatting.RED));
QuiverWarning.warning = warning;
}
}
public static void update() {
- if (warning != null && SkyblockerConfig.get().general.quiverWarning.enableQuiverWarning && SkyblockerConfig.get().general.quiverWarning.enableQuiverWarningAfterDungeon && !Utils.isInDungeons()) {
+ if (warning != null && SkyblockerConfigManager.get().general.quiverWarning.enableQuiverWarning && SkyblockerConfigManager.get().general.quiverWarning.enableQuiverWarningAfterDungeon && !Utils.isInDungeons()) {
InGameHud inGameHud = MinecraftClient.getInstance().inGameHud;
inGameHud.setDefaultTitleFade();
inGameHud.setTitle(Text.translatable(warning.key).formatted(Formatting.RED));
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java
index aeee9978..ae5aff0b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/StatusBarTracker.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.minecraft.client.MinecraftClient;
@@ -66,10 +66,10 @@ public class StatusBarTracker {
}
private Text onOverlayMessage(Text text, boolean overlay) {
- if (!overlay || !Utils.isOnSkyblock() || !SkyblockerConfig.get().general.bars.enableBars || Utils.isInTheRift()) {
+ if (!overlay || !Utils.isOnSkyblock() || !SkyblockerConfigManager.get().general.bars.enableBars || Utils.isInTheRift()) {
return text;
}
- return Text.of(update(text.getString(), SkyblockerConfig.get().messages.hideMana));
+ return Text.of(update(text.getString(), SkyblockerConfigManager.get().messages.hideMana));
}
public String update(String actionBar, boolean filterManaUse) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java
index c7ab926e..1aeeb6d3 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/TeleportOverlay.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock;
import com.mojang.blaze3d.systems.RenderSystem;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
@@ -24,7 +24,7 @@ public class TeleportOverlay {
}
private static void render(WorldRenderContext wrc) {
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) {
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.teleportOverlay.enableTeleportOverlays && client.player != null && client.world != null) {
ItemStack heldItem = client.player.getMainHandStack();
String itemId = PriceInfoTooltip.getInternalNameFromNBT(heldItem, true);
NbtCompound nbt = heldItem.getNbt();
@@ -32,34 +32,34 @@ public class TeleportOverlay {
if (itemId != null) {
switch (itemId) {
case "ASPECT_OF_THE_LEECH_1" -> {
- if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) {
+ if (SkyblockerConfigManager.get().general.teleportOverlay.enableWeirdTransmission) {
render(wrc, 3);
}
}
case "ASPECT_OF_THE_LEECH_2" -> {
- if (SkyblockerConfig.get().general.teleportOverlay.enableWeirdTransmission) {
+ if (SkyblockerConfigManager.get().general.teleportOverlay.enableWeirdTransmission) {
render(wrc, 4);
}
}
case "ASPECT_OF_THE_END", "ASPECT_OF_THE_VOID" -> {
- if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) {
+ if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission && client.options.sneakKey.isPressed() && nbt != null && nbt.getCompound("ExtraAttributes").getInt("ethermerge") == 1) {
render(wrc, nbt, 57);
- } else if (SkyblockerConfig.get().general.teleportOverlay.enableInstantTransmission) {
+ } else if (SkyblockerConfigManager.get().general.teleportOverlay.enableInstantTransmission) {
render(wrc, nbt, 8);
}
}
case "ETHERWARP_CONDUIT" -> {
- if (SkyblockerConfig.get().general.teleportOverlay.enableEtherTransmission) {
+ if (SkyblockerConfigManager.get().general.teleportOverlay.enableEtherTransmission) {
render(wrc, nbt, 57);
}
}
case "SINSEEKER_SCYTHE" -> {
- if (SkyblockerConfig.get().general.teleportOverlay.enableSinrecallTransmission) {
+ if (SkyblockerConfigManager.get().general.teleportOverlay.enableSinrecallTransmission) {
render(wrc, nbt, 4);
}
}
case "NECRON_BLADE", "ASTRAEA", "HYPERION", "SCYLLA", "VALKYRIE" -> {
- if (SkyblockerConfig.get().general.teleportOverlay.enableWitherImpact) {
+ if (SkyblockerConfigManager.get().general.teleportOverlay.enableWitherImpact) {
render(wrc, 10);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/HungryHiker.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/HungryHiker.java
index a5d02d93..91862622 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/HungryHiker.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/HungryHiker.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.barn;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import net.minecraft.client.MinecraftClient;
@@ -18,7 +18,7 @@ public class HungryHiker extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().locations.barn.solveHungryHiker ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
+ return SkyblockerConfigManager.get().locations.barn.solveHungryHiker ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/TreasureHunter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/TreasureHunter.java
index ba42d2ba..385dc20b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/TreasureHunter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/barn/TreasureHunter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.barn;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import net.minecraft.client.MinecraftClient;
@@ -18,7 +18,7 @@ public class TreasureHunter extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().locations.barn.solveTreasureHunter ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
+ return SkyblockerConfigManager.get().locations.barn.solveTreasureHunter ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java
index bf3cc36d..67e6d7f4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.gui.ColorHighlight;
import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver;
import net.minecraft.item.ItemStack;
@@ -17,7 +17,7 @@ public class CroesusHelper extends ContainerSolver {
@Override
protected boolean isEnabled() {
- return SkyblockerConfig.get().locations.dungeons.croesusHelper;
+ return SkyblockerConfigManager.get().locations.dungeons.croesusHelper;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
index 8d676d0b..f39684eb 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonBlaze.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
import it.unimi.dsi.fastutil.objects.ObjectIntPair;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
@@ -106,7 +106,7 @@ public class DungeonBlaze {
*/
public static void blazeRenderer(WorldRenderContext wrc) {
try {
- if (highestBlaze != null && lowestBlaze != null && highestBlaze.isAlive() && lowestBlaze.isAlive() && SkyblockerConfig.get().locations.dungeons.blazesolver) {
+ if (highestBlaze != null && lowestBlaze != null && highestBlaze.isAlive() && lowestBlaze.isAlive() && SkyblockerConfigManager.get().locations.dungeons.blazesolver) {
if (highestBlaze.getY() < 69) {
renderBlazeOutline(highestBlaze, nextHighestBlaze, wrc);
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonChestProfit.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonChestProfit.java
index b223e1a2..91be5248 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonChestProfit.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonChestProfit.java
@@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon;
import com.google.gson.JsonObject;
import it.unimi.dsi.fastutil.ints.IntBooleanPair;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.mixin.accessor.ScreenAccessor;
import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip;
import me.xmrvizzy.skyblocker.utils.Utils;
@@ -40,7 +41,7 @@ public class DungeonChestProfit {
public static Text getChestProfit(GenericContainerScreenHandler handler, Text title, MinecraftClient client) {
try {
- if (SkyblockerConfig.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator && isDungeonChest(title.getString())) {
+ if (SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator && isDungeonChest(title.getString())) {
int profit = 0;
boolean hasIncompleteData = false, usedKismet = false;
List<Slot> slots = handler.slots.subList(0, handler.getRows() * 9);
@@ -68,7 +69,7 @@ public class DungeonChestProfit {
}
//Essence price
- if (name.contains("Essence") && SkyblockerConfig.get().locations.dungeons.dungeonChestProfit.includeEssence) {
+ if (name.contains("Essence") && SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.includeEssence) {
Matcher matcher = ESSENCE_PATTERN.matcher(name);
if (matcher.matches()) {
@@ -105,7 +106,7 @@ public class DungeonChestProfit {
}
}
- if (SkyblockerConfig.get().locations.dungeons.dungeonChestProfit.includeKismet && usedKismet) {
+ if (SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.includeKismet && usedKismet) {
IntBooleanPair kismetPriceData = getItemPrice("KISMET_FEATHER");
if (!kismetPriceData.rightBoolean()) hasIncompleteData = true;
@@ -158,7 +159,7 @@ public class DungeonChestProfit {
}
private static Text getProfitText(int profit, boolean hasIncompleteData) {
- SkyblockerConfig.DungeonChestProfit config = SkyblockerConfig.get().locations.dungeons.dungeonChestProfit;
+ SkyblockerConfig.DungeonChestProfit config = SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit;
return getProfitText(profit, hasIncompleteData, config.neutralThreshold, config.neutralColor.formatting, config.profitColor.formatting, config.lossColor.formatting, config.incompleteColor.formatting);
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
index a70dd501..53cc4fac 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
@@ -32,9 +32,9 @@ public class DungeonMap {
VertexConsumerProvider.Immediate vertices = client.getBufferBuilders().getEffectVertexConsumers();
MapRenderer map = client.gameRenderer.getMapRenderer();
MapState state = FilledMapItem.getMapState(mapid, client.world);
- float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling;
- int x = SkyblockerConfig.get().locations.dungeons.mapX;
- int y = SkyblockerConfig.get().locations.dungeons.mapY;
+ float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling;
+ int x = SkyblockerConfigManager.get().locations.dungeons.mapX;
+ int y = SkyblockerConfigManager.get().locations.dungeons.mapY;
if (state == null) return;
matrices.push();
@@ -47,7 +47,7 @@ public class DungeonMap {
}
public static void renderHUDMap(DrawContext context, int x, int y) {
- float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling;
+ float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling;
int size = (int) (128 * scaling);
context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size);
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java
index d4fe812b..94b05e86 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java
@@ -1,7 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.shedaniel.autoconfig.AutoConfig;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
@@ -11,11 +10,17 @@ import java.awt.*;
public class DungeonMapConfigScreen extends Screen {
- private int hudX = SkyblockerConfig.get().locations.dungeons.mapX;
- private int hudY = SkyblockerConfig.get().locations.dungeons.mapY;
-
+ private int hudX = SkyblockerConfigManager.get().locations.dungeons.mapX;
+ private int hudY = SkyblockerConfigManager.get().locations.dungeons.mapY;
+ private final Screen parent;
+
protected DungeonMapConfigScreen() {
+ this(null);
+ }
+
+ public DungeonMapConfigScreen(Screen parent) {
super(Text.literal("Dungeon Map Config"));
+ this.parent = parent;
}
@Override
@@ -28,7 +33,7 @@ public class DungeonMapConfigScreen extends Screen {
@Override
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
- float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling;
+ float scaling = SkyblockerConfigManager.get().locations.dungeons.mapScaling;
int size = (int) (128 * scaling);
if (RenderHelper.pointIsInArea(mouseX, mouseY, hudX, hudY, hudX + size, hudY + size) && button == 0) {
hudX = (int) Math.max(Math.min(mouseX - (size >> 1), this.width - size), 0);
@@ -49,9 +54,9 @@ public class DungeonMapConfigScreen extends Screen {
@Override
public void close() {
- SkyblockerConfig.get().locations.dungeons.mapX = hudX;
- SkyblockerConfig.get().locations.dungeons.mapY = hudY;
- AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
- super.close();
+ SkyblockerConfigManager.get().locations.dungeons.mapX = hudX;
+ SkyblockerConfigManager.get().locations.dungeons.mapY = hudY;
+ SkyblockerConfigManager.save();
+ this.client.setScreen(parent);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java
index e5d8a720..2df8192d 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.MessageScheduler;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
@@ -12,7 +12,7 @@ public class LividColor {
public static void init() {
ClientReceiveMessageEvents.GAME.register((message, overlay) -> {
- if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) {
+ if (SkyblockerConfigManager.get().locations.dungeons.lividColor.enableLividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) {
tenTicks = 8;
}
});
@@ -21,15 +21,15 @@ public class LividColor {
public static void update() {
MinecraftClient client = MinecraftClient.getInstance();
if (tenTicks != 0) {
- if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && Utils.isInDungeons() && client.world != null) {
+ if (SkyblockerConfigManager.get().locations.dungeons.lividColor.enableLividColor && Utils.isInDungeons() && client.world != null) {
if (tenTicks == 1) {
- MessageScheduler.INSTANCE.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", "red"));
+ MessageScheduler.INSTANCE.sendMessageAfterCooldown(SkyblockerConfigManager.get().locations.dungeons.lividColor.lividColorText.replace("[color]", "red"));
tenTicks = 0;
return;
}
String key = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock().getTranslationKey();
if (key.startsWith("block.minecraft.") && key.endsWith("wool") && !key.endsWith("red_wool")) {
- MessageScheduler.INSTANCE.sendMessageAfterCooldown(SkyblockerConfig.get().locations.dungeons.lividColor.lividColorText.replace("[color]", key.substring(16, key.length() - 5)));
+ MessageScheduler.INSTANCE.sendMessageAfterCooldown(SkyblockerConfigManager.get().locations.dungeons.lividColor.lividColorText.replace("[color]", key.substring(16, key.length() - 5)));
tenTicks = 0;
return;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java
index 91de7a1d..b9fba7be 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/OldLever.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import net.minecraft.block.Block;
import net.minecraft.block.enums.BlockFace;
import net.minecraft.util.math.Direction;
@@ -14,7 +14,7 @@ public class OldLever {
protected static final VoxelShape WEST_SHAPE = Block.createCuboidShape(10.0D, 3.0D, 5.0D, 16.0D, 13.0D, 11.0D);
public static VoxelShape getShape(BlockFace face, Direction direction) {
- if (!SkyblockerConfig.get().general.hitbox.oldLeverHitbox)
+ if (!SkyblockerConfigManager.get().general.hitbox.oldLeverHitbox)
return null;
if (face == BlockFace.FLOOR) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
index 8d8a840a..288a8b5a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
@@ -43,7 +43,7 @@ public class Reparty extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return (SkyblockerConfig.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
+ return (SkyblockerConfigManager.get().general.acceptReparty || this.repartying) ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java
index 9f522942..05ed4d94 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import net.minecraft.client.MinecraftClient;
@@ -17,7 +17,7 @@ public class ThreeWeirdos extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().locations.dungeons.solveThreeWeirdos ? null : ChatFilterResult.PASS;
+ return SkyblockerConfigManager.get().locations.dungeons.solveThreeWeirdos ? null : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TicTacToe.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TicTacToe.java
index a97b6752..21493da7 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TicTacToe.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TicTacToe.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import me.xmrvizzy.skyblocker.utils.tictactoe.TicTacToeUtils;
@@ -126,7 +126,7 @@ public class TicTacToe {
private static void solutionRenderer(WorldRenderContext context) {
try {
- if (SkyblockerConfig.get().locations.dungeons.solveTicTacToe && nextBestMoveToMake != null) {
+ if (SkyblockerConfigManager.get().locations.dungeons.solveTicTacToe && nextBestMoveToMake != null) {
RenderHelper.renderOutline(context, nextBestMoveToMake, RED_COLOR_COMPONENTS, 5);
}
} catch (Exception e) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java
index 8497041b..b1e51aa6 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import me.xmrvizzy.skyblocker.skyblock.FairySouls;
@@ -24,7 +24,7 @@ public class Trivia extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().locations.dungeons.solveTrivia ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
+ return SkyblockerConfigManager.get().locations.dungeons.solveTrivia ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
index ac389d34..4e4e9565 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/DungeonSecrets.java
@@ -11,7 +11,7 @@ import it.unimi.dsi.fastutil.objects.Object2ByteMap;
import it.unimi.dsi.fastutil.objects.Object2ByteOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectIntPair;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
@@ -133,7 +133,7 @@ public class DungeonSecrets {
* Use {@link #isRoomsLoaded()} to check for completion of loading.
*/
public static void init() {
- if (SkyblockerConfig.get().locations.dungeons.secretWaypoints.noInitSecretWaypoints) {
+ if (SkyblockerConfigManager.get().locations.dungeons.secretWaypoints.noInitSecretWaypoints) {
return;
}
// Execute with MinecraftClient as executor since we need to wait for MinecraftClient#resourceManager to be set
@@ -248,7 +248,7 @@ public class DungeonSecrets {
*/
@SuppressWarnings("JavadocReference")
private static void update() {
- if (!SkyblockerConfig.get().locations.dungeons.secretWaypoints.enableSecretWaypoints) {
+ if (!SkyblockerConfigManager.get().locations.dungeons.secretWaypoints.enableSecretWaypoints) {
return;
}
if (!Utils.isInDungeons()) {
@@ -430,12 +430,12 @@ public class DungeonSecrets {
}
/**
- * Checks if the player is in a dungeon and {@link me.xmrvizzy.skyblocker.config.SkyblockerConfig.Dungeons#secretWaypoints Secret Waypoints} is enabled.
+ * Checks if the player is in a dungeon and {@link me.xmrvizzy.skyblocker.config.SkyblockerConfigManager.Dungeons#secretWaypoints Secret Waypoints} is enabled.
*
* @return whether dungeon secrets should be processed
*/
private static boolean shouldProcess() {
- return SkyblockerConfig.get().locations.dungeons.secretWaypoints.enableSecretWaypoints && Utils.isInDungeons();
+ return SkyblockerConfigManager.get().locations.dungeons.secretWaypoints.enableSecretWaypoints && Utils.isInDungeons();
}
/**
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
index 3fdd683c..73ac1883 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/secrets/SecretWaypoint.java
@@ -1,7 +1,9 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.secrets;
import com.google.gson.JsonObject;
+
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.minecraft.client.MinecraftClient;
@@ -134,7 +136,7 @@ public class SecretWaypoint {
}
boolean isEnabled() {
- return enabledPredicate.test(SkyblockerConfig.get().locations.dungeons.secretWaypoints);
+ return enabledPredicate.test(SkyblockerConfigManager.get().locations.dungeons.secretWaypoints);
}
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java
index 7aac04b5..787d696e 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.gui.ColorHighlight;
import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver;
import net.minecraft.item.Item;
@@ -28,7 +28,7 @@ public class ColorTerminal extends ContainerSolver {
@Override
protected boolean isEnabled() {
targetColor = null;
- return SkyblockerConfig.get().locations.dungeons.terminals.solveColor;
+ return SkyblockerConfigManager.get().locations.dungeons.terminals.solveColor;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java
index 01437919..afb07b4b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.gui.ColorHighlight;
import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver;
import net.minecraft.item.ItemStack;
@@ -24,7 +24,7 @@ public class OrderTerminal extends ContainerSolver {
protected boolean isEnabled() {
orderedSlots = null;
currentNum = 0;
- return SkyblockerConfig.get().locations.dungeons.terminals.solveOrder;
+ return SkyblockerConfigManager.get().locations.dungeons.terminals.solveOrder;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java
index 988b570e..fa9fa324 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dungeon.terminal;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.gui.ColorHighlight;
import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver;
import net.minecraft.item.ItemStack;
@@ -16,7 +16,7 @@ public class StartsWithTerminal extends ContainerSolver {
@Override
protected boolean isEnabled() {
- return SkyblockerConfig.get().locations.dungeons.terminals.solveStartsWith;
+ return SkyblockerConfigManager.get().locations.dungeons.terminals.solveStartsWith;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java
index 3563741c..3d8292a5 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.dwarven;
import it.unimi.dsi.fastutil.ints.IntIntPair;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
@@ -46,19 +46,19 @@ public class DwarvenHud {
.executes(Scheduler.queueOpenScreenCommand(DwarvenHudConfigScreen::new))))));
HudRenderCallback.EVENT.register((context, tickDelta) -> {
- if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled
+ if (!SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabled
|| client.options.playerListKey.isPressed()
|| client.player == null
|| commissionList.isEmpty()) {
return;
}
- render(HudCommsWidget.INSTANCE, context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x,
- SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList);
+ render(HudCommsWidget.INSTANCE, context, SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.x,
+ SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.y, commissionList);
});
}
public static IntIntPair getDimForConfig(List<Commission> commissions) {
- return switch (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) {
+ return switch (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.style) {
case SIMPLE -> {
HudCommsWidget.INSTANCE_CFG.updateData(commissions, false);
yield IntIntPair.of(
@@ -77,7 +77,7 @@ public class DwarvenHud {
public static void render(HudCommsWidget hcw, DrawContext context, int hudX, int hudY, List<Commission> commissions) {
- switch (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) {
+ switch (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.style) {
case SIMPLE -> renderSimple(hcw, context, hudX, hudY, commissions);
case FANCY -> renderFancy(hcw, context, hudX, hudY, commissions);
case CLASSIC -> renderClassic(context, hudX, hudY, commissions);
@@ -85,7 +85,7 @@ public class DwarvenHud {
}
public static void renderClassic(DrawContext context, int hudX, int hudY, List<Commission> commissions) {
- if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) {
+ if (SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enableBackground) {
context.fill(hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000);
}
@@ -108,7 +108,7 @@ public class DwarvenHud {
hcw.setX(hudX);
hcw.setY(hudY);
hcw.render(context,
- SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground);
+ SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enableBackground);
}
public static void renderFancy(HudCommsWidget hcw, DrawContext context, int hudX, int hudY, List<Commission> commissions) {
@@ -117,12 +117,12 @@ public class DwarvenHud {
hcw.setX(hudX);
hcw.setY(hudY);
hcw.render(context,
- SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground);
+ SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enableBackground);
}
public static void update() {
commissionList = new ArrayList<>();
- if (client.player == null || client.getNetworkHandler() == null || !SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled)
+ if (client.player == null || client.getNetworkHandler() == null || !SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.enabled)
return;
client.getNetworkHandler().getPlayerList().forEach(playerListEntry -> {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java
index cde1b236..232817bb 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java
@@ -1,8 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.dwarven;
import it.unimi.dsi.fastutil.ints.IntIntPair;
-import me.shedaniel.autoconfig.AutoConfig;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHud.Commission;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
@@ -17,11 +16,17 @@ public class DwarvenHudConfigScreen extends Screen {
private static final List<Commission> CFG_COMMS = List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"));
- private int hudX = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x;
- private int hudY = SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y;
+ private int hudX = SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.x;
+ private int hudY = SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.y;
+ private final Screen parent;
protected DwarvenHudConfigScreen() {
- super(Text.of("Dwarven HUD Config"));
+ this(null);
+ }
+
+ public DwarvenHudConfigScreen(Screen parent) {
+ super(Text.of("Dwarven HUD Config"));
+ this.parent = parent;
}
@Override
@@ -54,9 +59,9 @@ public class DwarvenHudConfigScreen extends Screen {
@Override
public void close() {
- SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x = hudX;
- SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y = hudY;
- AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
- super.close();
+ SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.x = hudX;
+ SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.y = hudY;
+ SkyblockerConfigManager.save();
+ client.setScreen(parent);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java
index 5e284452..d5c18545 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dwarven;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import net.minecraft.client.MinecraftClient;
@@ -19,7 +19,7 @@ public class Fetchur extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().locations.dwarvenMines.solveFetchur ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
+ return SkyblockerConfigManager.get().locations.dwarvenMines.solveFetchur ? ChatFilterResult.FILTER : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
index 96ccdaf2..90a0e30f 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.dwarven;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import net.minecraft.block.Blocks;
@@ -18,7 +18,7 @@ public class Puzzler extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().locations.dwarvenMines.solvePuzzler ? null : ChatFilterResult.PASS;
+ return SkyblockerConfigManager.get().locations.dwarvenMines.solvePuzzler ? null : ChatFilterResult.PASS;
}
@Override
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java
index d62383be..02d612a6 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.experiment;
import com.google.common.collect.ImmutableMap;
+
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
import me.xmrvizzy.skyblocker.utils.render.gui.ColorHighlight;
import net.minecraft.client.gui.screen.Screen;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java
index d0e5522d..9e25fa2a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.experiment;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.gui.ContainerSolver;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.gui.screen.Screen;
@@ -36,7 +37,7 @@ public abstract class ExperimentSolver extends ContainerSolver {
@Override
protected final boolean isEnabled() {
- return isEnabled(SkyblockerConfig.get().general.experiments);
+ return isEnabled(SkyblockerConfigManager.get().general.experiments);
}
protected abstract boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AbilityFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AbilityFilter.java
index 97e5e8dd..addb1b05 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AbilityFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AbilityFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class AbilityFilter extends SimpleChatFilter {
@@ -10,6 +10,6 @@ public class AbilityFilter extends SimpleChatFilter {
@Override
protected ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideAbility;
+ return SkyblockerConfigManager.get().messages.hideAbility;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AdFilter.java
index 23caa180..e0493389 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AdFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AdFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Constants;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
@@ -34,6 +34,6 @@ public class AdFilter extends ChatPatternListener {
@Override
protected ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideAds;
+ return SkyblockerConfigManager.get().messages.hideAds;
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AoteFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AoteFilter.java
index 15c1ce6a..02e8867c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AoteFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AoteFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class AoteFilter extends SimpleChatFilter {
@@ -10,6 +10,6 @@ public class AoteFilter extends SimpleChatFilter {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideAOTE;
+ return SkyblockerConfigManager.get().messages.hideAOTE;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AutopetFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AutopetFilter.java
index 8c9ce9f6..65811a8a 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AutopetFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/AutopetFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
import me.xmrvizzy.skyblocker.utils.chat.ChatPatternListener;
import net.minecraft.client.MinecraftClient;
@@ -16,7 +16,7 @@ public class AutopetFilter extends ChatPatternListener {
@Override
public boolean onMatch(Text _message, Matcher matcher) {
- if (SkyblockerConfig.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR) {
+ if (SkyblockerConfigManager.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR) {
Objects.requireNonNull(MinecraftClient.getInstance().player).sendMessage(
Text.literal(
_message.getString().replace("§a§lVIEW RULE", "")
@@ -27,9 +27,9 @@ public class AutopetFilter extends ChatPatternListener {
@Override
public ChatFilterResult state() {
- if (SkyblockerConfig.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR)
+ if (SkyblockerConfigManager.get().messages.hideAutopet == ChatFilterResult.ACTION_BAR)
return ChatFilterResult.FILTER;
else
- return SkyblockerConfig.get().messages.hideAutopet;
+ return SkyblockerConfigManager.get().messages.hideAutopet;
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ComboFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ComboFilter.java
index 4a714e6d..d884bf37 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ComboFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ComboFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class ComboFilter extends SimpleChatFilter {
@@ -11,6 +11,6 @@ public class ComboFilter extends SimpleChatFilter {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideCombo;
+ return SkyblockerConfigManager.get().messages.hideCombo;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/HealFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/HealFilter.java
index 652d47c7..938b1aaa 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/HealFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/HealFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class HealFilter extends SimpleChatFilter {
@@ -10,6 +10,6 @@ public class HealFilter extends SimpleChatFilter {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideHeal;
+ return SkyblockerConfigManager.get().messages.hideHeal;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ImplosionFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ImplosionFilter.java
index d7748313..2cc89185 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ImplosionFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ImplosionFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class ImplosionFilter extends SimpleChatFilter {
@@ -10,6 +10,6 @@ public class ImplosionFilter extends SimpleChatFilter {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideImplosion;
+ return SkyblockerConfigManager.get().messages.hideImplosion;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/MoltenWaveFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/MoltenWaveFilter.java
index 9f6138f0..9627dc13 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/MoltenWaveFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/MoltenWaveFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class MoltenWaveFilter extends SimpleChatFilter {
@@ -10,6 +10,6 @@ public class MoltenWaveFilter extends SimpleChatFilter {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideMoltenWave;
+ return SkyblockerConfigManager.get().messages.hideMoltenWave;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ShowOffFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ShowOffFilter.java
index 85be9e2a..418e0f27 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ShowOffFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/ShowOffFilter.java
@@ -2,7 +2,7 @@ package me.xmrvizzy.skyblocker.skyblock.filters;
import me.xmrvizzy.skyblocker.utils.Constants;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
public class ShowOffFilter extends SimpleChatFilter {
private static final String[] SHOW_TYPES = { "is holding", "is wearing", "is friends with a", "has" };
@@ -13,6 +13,6 @@ public class ShowOffFilter extends SimpleChatFilter {
@Override
protected ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideShowOff;
+ return SkyblockerConfigManager.get().messages.hideShowOff;
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/TeleportPadFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/TeleportPadFilter.java
index 1961d78a..2035facb 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/TeleportPadFilter.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/filters/TeleportPadFilter.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.filters;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult;
public class TeleportPadFilter extends SimpleChatFilter {
@@ -11,6 +11,6 @@ public class TeleportPadFilter extends SimpleChatFilter {
@Override
public ChatFilterResult state() {
- return SkyblockerConfig.get().messages.hideTeleportPad;
+ return SkyblockerConfigManager.get().messages.hideTeleportPad;
}
} \ No newline at end of file
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java
index 7c4ed423..88df1b40 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorDyeColors.java
@@ -4,7 +4,7 @@ import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
@@ -46,19 +46,19 @@ public class CustomArmorDyeColors {
String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
if (itemUuid != null) {
- Object2IntOpenHashMap<String> customDyeColors = SkyblockerConfig.get().general.customDyeColors;
+ Object2IntOpenHashMap<String> customDyeColors = SkyblockerConfigManager.get().general.customDyeColors;
if (hex == null) {
if (customDyeColors.containsKey(itemUuid)) {
customDyeColors.removeInt(itemUuid);
- SkyblockerConfig.save();
+ SkyblockerConfigManager.save();
source.sendFeedback(Text.translatable("skyblocker.customDyeColors.removed"));
} else {
source.sendFeedback(Text.translatable("skyblocker.customDyeColors.neverHad"));
}
} else {
customDyeColors.put(itemUuid, Integer.decode("0x" + hex.replace("#", "")).intValue());
- SkyblockerConfig.save();
+ SkyblockerConfigManager.save();
source.sendFeedback(Text.translatable("skyblocker.customDyeColors.added"));
}
} else {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java
index 6c648da9..dba066a5 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomArmorTrims.java
@@ -3,9 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.item;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.suggestion.SuggestionProvider;
+
+import dev.isxander.yacl3.config.v2.api.SerialEntry;
import it.unimi.dsi.fastutil.Pair;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.SkyblockEvents;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
@@ -100,12 +102,12 @@ public class CustomArmorTrims {
String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
if (itemUuid != null) {
- Object2ObjectOpenHashMap<String, ArmorTrimId> customArmorTrims = SkyblockerConfig.get().general.customArmorTrims;
+ Object2ObjectOpenHashMap<String, ArmorTrimId> customArmorTrims = SkyblockerConfigManager.get().general.customArmorTrims;
if (material == null && pattern == null) {
if (customArmorTrims.containsKey(itemUuid)) {
customArmorTrims.remove(itemUuid);
- SkyblockerConfig.save();
+ SkyblockerConfigManager.save();
source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.removed"));
} else {
source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.neverHad"));
@@ -120,7 +122,7 @@ public class CustomArmorTrims {
}
customArmorTrims.put(itemUuid, trimId);
- SkyblockerConfig.save();
+ SkyblockerConfigManager.save();
source.sendFeedback(Text.translatable("skyblocker.customArmorTrims.added"));
}
} else {
@@ -138,7 +140,7 @@ public class CustomArmorTrims {
return Command.SINGLE_SUCCESS;
}
- public record ArmorTrimId(Identifier material, Identifier pattern) implements Pair<Identifier, Identifier> {
+ public record ArmorTrimId(@SerialEntry Identifier material, @SerialEntry Identifier pattern) implements Pair<Identifier, Identifier> {
@Override
public Identifier left() {
return material();
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java
index 8c160456..76312461 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CustomItemNames.java
@@ -3,7 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.item;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
@@ -40,13 +40,13 @@ public class CustomItemNames {
String itemUuid = extraAttributes.contains("uuid") ? extraAttributes.getString("uuid") : null;
if (itemUuid != null) {
- Object2ObjectOpenHashMap<String, Text> customItemNames = SkyblockerConfig.get().general.customItemNames;
+ Object2ObjectOpenHashMap<String, Text> customItemNames = SkyblockerConfigManager.get().general.customItemNames;
if (text == null) {
if (customItemNames.containsKey(itemUuid)) {
//Remove custom item name when the text argument isn't passed
customItemNames.remove(itemUuid);
- SkyblockerConfig.save();
+ SkyblockerConfigManager.save();
source.sendFeedback(Text.translatable("skyblocker.customItemNames.removed"));
} else {
source.sendFeedback(Text.translatable("skyblocker.customItemNames.neverHad"));
@@ -59,7 +59,7 @@ public class CustomItemNames {
((MutableText) text).setStyle(currentStyle.withItalic((currentStyle.isItalic() ? true : false)));
customItemNames.put(itemUuid, text);
- SkyblockerConfig.save();
+ SkyblockerConfigManager.save();
source.sendFeedback(Text.translatable("skyblocker.customItemNames.added"));
}
} else {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
index d20aa0e3..16a4c596 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/PriceInfoTooltip.java
@@ -2,7 +2,9 @@ package me.xmrvizzy.skyblocker.skyblock.item;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
+
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Http;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
@@ -61,7 +63,7 @@ public class PriceInfoTooltip {
int count = stack.getCount();
boolean bazaarOpened = lines.stream().anyMatch(each -> each.getString().contains("Buy price:") || each.getString().contains("Sell price:"));
- if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice) {
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableNPCPrice) {
if (npcPricesJson == null) {
nullWarning();
} else if (npcPricesJson.has(internalID)) {
@@ -71,7 +73,7 @@ public class PriceInfoTooltip {
}
}
- if (SkyblockerConfig.get().general.itemTooltip.enableMotesPrice && Utils.isInTheRift()) {
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableMotesPrice && Utils.isInTheRift()) {
if (motesPricesJson == null) {
nullWarning();
} else if (motesPricesJson.has(internalID)) {
@@ -83,7 +85,7 @@ public class PriceInfoTooltip {
boolean bazaarExist = false;
- if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice && !bazaarOpened) {
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableBazaarPrice && !bazaarOpened) {
if (bazaarPricesJson == null) {
nullWarning();
} else if (bazaarPricesJson.has(name)) {
@@ -104,7 +106,7 @@ public class PriceInfoTooltip {
// bazaarOpened & bazaarExist check for lbin, because Skytils keeps some bazaar item data in lbin api
boolean lbinExist = false;
- if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN && !bazaarOpened && !bazaarExist) {
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableLowestBIN && !bazaarOpened && !bazaarExist) {
if (lowestPricesJson == null) {
nullWarning();
} else if (lowestPricesJson.has(name)) {
@@ -115,7 +117,7 @@ public class PriceInfoTooltip {
}
}
- if (SkyblockerConfig.get().general.itemTooltip.enableAvgBIN) {
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) {
if (threeDayAvgPricesJson == null || oneDayAvgPricesJson == null) {
nullWarning();
} else {
@@ -146,7 +148,7 @@ public class PriceInfoTooltip {
}
if (!neuName.isEmpty() && lbinExist) {
- SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg;
+ SkyblockerConfig.Average type = SkyblockerConfigManager.get().general.itemTooltip.avg;
// "No data" line because of API not keeping old data, it causes NullPointerException
if (type == SkyblockerConfig.Average.ONE_DAY || type == SkyblockerConfig.Average.BOTH) {
@@ -173,7 +175,7 @@ public class PriceInfoTooltip {
}
}
- if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && !bazaarOpened) {
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableMuseumDate && !bazaarOpened) {
if (isMuseumJson == null) {
nullWarning();
} else {
@@ -330,7 +332,7 @@ public class PriceInfoTooltip {
}
private static Text getMotesMessage(int price, int count) {
- float motesMultiplier = SkyblockerConfig.get().locations.rift.mcGrubberStacks * 0.05f + 1;
+ float motesMultiplier = SkyblockerConfigManager.get().locations.rift.mcGrubberStacks * 0.05f + 1;
// Calculate the total price
int totalPrice = price * count;
@@ -361,8 +363,8 @@ public class PriceInfoTooltip {
}
List<CompletableFuture<Void>> futureList = new ArrayList<>();
- if (SkyblockerConfig.get().general.itemTooltip.enableAvgBIN) {
- SkyblockerConfig.Average type = SkyblockerConfig.get().general.itemTooltip.avg;
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableAvgBIN) {
+ SkyblockerConfig.Average type = SkyblockerConfigManager.get().general.itemTooltip.avg;
if (type == SkyblockerConfig.Average.BOTH || oneDayAvgPricesJson == null || threeDayAvgPricesJson == null || minute % 5 == 0) {
futureList.add(CompletableFuture.runAsync(() -> {
@@ -375,19 +377,19 @@ public class PriceInfoTooltip {
futureList.add(CompletableFuture.runAsync(() -> threeDayAvgPricesJson = downloadPrices("3 day avg")));
}
}
- if (SkyblockerConfig.get().general.itemTooltip.enableLowestBIN || SkyblockerConfig.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator)
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableLowestBIN || SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator)
futureList.add(CompletableFuture.runAsync(() -> lowestPricesJson = downloadPrices("lowest bins")));
- if (SkyblockerConfig.get().general.itemTooltip.enableBazaarPrice || SkyblockerConfig.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator)
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableBazaarPrice || SkyblockerConfigManager.get().locations.dungeons.dungeonChestProfit.enableProfitCalculator)
futureList.add(CompletableFuture.runAsync(() -> bazaarPricesJson = downloadPrices("bazaar")));
- if (SkyblockerConfig.get().general.itemTooltip.enableNPCPrice && npcPricesJson == null)
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableNPCPrice && npcPricesJson == null)
futureList.add(CompletableFuture.runAsync(() -> npcPricesJson = downloadPrices("npc")));
- if (SkyblockerConfig.get().general.itemTooltip.enableMuseumDate && isMuseumJson == null)
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableMuseumDate && isMuseumJson == null)
futureList.add(CompletableFuture.runAsync(() -> isMuseumJson = downloadPrices("museum")));
- if (SkyblockerConfig.get().general.itemTooltip.enableMotesPrice && motesPricesJson == null)
+ if (SkyblockerConfigManager.get().general.itemTooltip.enableMotesPrice && motesPricesJson == null)
futureList.add(CompletableFuture.runAsync(() -> motesPricesJson = downloadPrices("motes")));
minute++;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java
index fb8f438b..aa933da4 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNav.java
@@ -1,7 +1,9 @@
package me.xmrvizzy.skyblocker.skyblock.quicknav;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
+
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.fabricmc.fabric.api.client.screen.v1.Screens;
@@ -24,7 +26,7 @@ public class QuickNav {
public static void init() {
ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().quickNav.enableQuickNav && screen instanceof HandledScreen<?> && client.player != null && !client.player.isCreative()) {
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().quickNav.enableQuickNav && screen instanceof HandledScreen<?> && client.player != null && !client.player.isCreative()) {
String screenTitle = screen.getTitle().getString().trim();
List<QuickNavButton> buttons = QuickNav.init(screenTitle);
for (QuickNavButton button : buttons) Screens.getButtons(screen).add(button);
@@ -34,7 +36,7 @@ public class QuickNav {
public static List<QuickNavButton> init(String screenTitle) {
List<QuickNavButton> buttons = new ArrayList<>();
- SkyblockerConfig.QuickNav data = SkyblockerConfig.get().quickNav;
+ SkyblockerConfig.QuickNav 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));
@@ -55,7 +57,7 @@ public class QuickNav {
}
private static QuickNavButton parseButton(SkyblockerConfig.QuickNavItem buttonInfo, String screenTitle, int id) throws CommandSyntaxException {
- SkyblockerConfig.ItemData itemData = buttonInfo.item;
+ SkyblockerConfig.ItemData itemData = buttonInfo.item;
String nbtString = "{id:\"minecraft:" + itemData.itemName.toLowerCase(Locale.ROOT) + "\",Count:1";
if (itemData.nbt.length() > 2) nbtString += "," + itemData.nbt;
nbtString += "}";
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java
index 11f879b9..5548484e 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/EffigyWaypoints.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.rift;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
@@ -34,7 +34,7 @@ public class EffigyWaypoints {
private static final List<BlockPos> unBrokenEffigies = new ArrayList<>();
protected static void updateEffigies() {
- if (!SkyblockerConfig.get().slayer.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return;
+ if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableEffigyWaypoints || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) return;
unBrokenEffigies.clear();
try {
@@ -63,10 +63,10 @@ public class EffigyWaypoints {
}
protected static void render(WorldRenderContext context) {
- if (SkyblockerConfig.get().slayer.vampireSlayer.enableEffigyWaypoints && Utils.getLocation().contains("Stillgore Château")) {
+ if (SkyblockerConfigManager.get().slayer.vampireSlayer.enableEffigyWaypoints && Utils.getLocation().contains("Stillgore Château")) {
for (BlockPos effigy : unBrokenEffigies) {
float[] colorComponents = DyeColor.RED.getColorComponents();
- if (SkyblockerConfig.get().slayer.vampireSlayer.compactEffigyWaypoints) {
+ if (SkyblockerConfigManager.get().slayer.vampireSlayer.compactEffigyWaypoints) {
RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, effigy.down(6), colorComponents, 0.5F);
} else {
RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, effigy, colorComponents, 0.5F);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java
index b547ebb5..78fe8f6c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/HealingMelonIndicator.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.rift;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import me.xmrvizzy.skyblocker.utils.render.title.Title;
@@ -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 (!SkyblockerConfig.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) {
+ if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableHealingMelonIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château")) {
TitleContainer.removeTitle(title);
return;
}
ClientPlayerEntity player = MinecraftClient.getInstance().player;
- if (player != null && player.getHealth() <= SkyblockerConfig.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) {
+ if (player != null && player.getHealth() <= SkyblockerConfigManager.get().slayer.vampireSlayer.healingMelonHealthThreshold * 2F) {
RenderHelper.displayInTitleContainerAndPlaySound(title);
} else {
TitleContainer.removeTitle(title);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java
index 16ab250a..1fca4559 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/ManiaIndicator.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.rift;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.SlayerUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
@@ -17,7 +17,7 @@ public class ManiaIndicator {
private static final Title title = new Title("skyblocker.rift.mania", Formatting.RED);
protected static void updateMania() {
- if (!SkyblockerConfig.get().slayer.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) {
+ if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableManiaIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) {
TitleContainer.removeTitle(title);
return;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java
index d59745d8..3063f63c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/MirrorverseWaypoints.java
@@ -4,7 +4,7 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
@@ -71,7 +71,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() && SkyblockerConfig.get().locations.rift.mirrorverseWaypoints) {
+ if (Utils.isInTheRift() && SkyblockerConfigManager.get().locations.rift.mirrorverseWaypoints) {
for (BlockPos pos : LAVA_PATH_WAYPOINTS) {
RenderHelper.renderFilledIfVisible(wrc, pos, COLOR_COMPONENTS, 0.5f);
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java
index 1d969514..ff7298a3 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/StakeIndicator.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.rift;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.SlayerUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
@@ -13,7 +13,7 @@ public class StakeIndicator {
private static final Title title = new Title("skyblocker.rift.stakeNow", Formatting.RED);
protected static void updateStake() {
- if (!SkyblockerConfig.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) {
+ if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableSteakStakeIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !Utils.getLocation().contains("Stillgore Château") || !SlayerUtils.isInSlayer()) {
TitleContainer.removeTitle(title);
return;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java
index 4b11fcb0..f3a35869 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TheRift.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.rift;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
@@ -13,9 +13,9 @@ public class TheRift {
public static void init() {
WorldRenderEvents.AFTER_TRANSLUCENT.register(MirrorverseWaypoints::render);
WorldRenderEvents.AFTER_TRANSLUCENT.register(EffigyWaypoints::render);
- Scheduler.INSTANCE.scheduleCyclic(EffigyWaypoints::updateEffigies, SkyblockerConfig.get().slayer.vampireSlayer.effigyUpdateFrequency);
- Scheduler.INSTANCE.scheduleCyclic(TwinClawsIndicator::updateIce, SkyblockerConfig.get().slayer.vampireSlayer.holyIceUpdateFrequency);
- Scheduler.INSTANCE.scheduleCyclic(ManiaIndicator::updateMania, SkyblockerConfig.get().slayer.vampireSlayer.maniaUpdateFrequency);
- Scheduler.INSTANCE.scheduleCyclic(StakeIndicator::updateStake, SkyblockerConfig.get().slayer.vampireSlayer.steakStakeUpdateFrequency);
+ 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);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java
index 6e6fad2d..2bd84106 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/rift/TwinClawsIndicator.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.rift;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.SlayerUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
@@ -15,7 +15,7 @@ public class TwinClawsIndicator {
private static boolean scheduled = false;
protected static void updateIce() {
- if (!SkyblockerConfig.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().contains("Stillgore Château")) || !SlayerUtils.isInSlayer()) {
+ if (!SkyblockerConfigManager.get().slayer.vampireSlayer.enableHolyIceIndicator || !Utils.isOnSkyblock() || !Utils.isInTheRift() || !(Utils.getLocation().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;
- }, SkyblockerConfig.get().slayer.vampireSlayer.holyIceIndicatorTickDelay);
+ }, SkyblockerConfigManager.get().slayer.vampireSlayer.holyIceIndicatorTickDelay);
}
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java
index 14bc1db4..e9309706 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/Shortcuts.java
@@ -6,7 +6,7 @@ import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
import me.xmrvizzy.skyblocker.SkyblockerMod;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
@@ -161,14 +161,14 @@ public class Shortcuts {
}
dispatcher.register(literal(SkyblockerMod.NAMESPACE).then(literal("help").executes(context -> {
FabricClientCommandSource source = context.getSource();
- String status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
+ String status = SkyblockerConfigManager.get().general.shortcuts.enableShortcuts && SkyblockerConfigManager.get().general.shortcuts.enableCommandShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Shortcuts" + status));
if (!isShortcutsLoaded()) {
source.sendFeedback(Text.translatable("skyblocker.shortcuts.notLoaded"));
} else for (Map.Entry<String, String> command : commands.entrySet()) {
source.sendFeedback(Text.of("§7" + command.getKey() + " §f→ §7" + command.getValue()));
}
- status = SkyblockerConfig.get().general.shortcuts.enableShortcuts && SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
+ status = SkyblockerConfigManager.get().general.shortcuts.enableShortcuts && SkyblockerConfigManager.get().general.shortcuts.enableCommandArgShortcuts ? "§a§l (Enabled)" : "§c§l (Disabled)";
source.sendFeedback(Text.of("§e§lSkyblocker §fCommand Argument Shortcuts" + status));
if (!isShortcutsLoaded()) {
source.sendFeedback(Text.translatable("skyblocker.shortcuts.notLoaded"));
@@ -185,16 +185,16 @@ public class Shortcuts {
}
private static String modifyCommand(String command) {
- if (SkyblockerConfig.get().general.shortcuts.enableShortcuts) {
+ if (SkyblockerConfigManager.get().general.shortcuts.enableShortcuts) {
if (!isShortcutsLoaded()) {
LOGGER.warn("[Skyblocker] Shortcuts not loaded yet, skipping shortcut for command: {}", command);
return command;
}
command = '/' + command;
- if (SkyblockerConfig.get().general.shortcuts.enableCommandShortcuts) {
+ if (SkyblockerConfigManager.get().general.shortcuts.enableCommandShortcuts) {
command = commands.getOrDefault(command, command);
}
- if (SkyblockerConfig.get().general.shortcuts.enableCommandArgShortcuts) {
+ if (SkyblockerConfigManager.get().general.shortcuts.enableCommandArgShortcuts) {
String[] messageArgs = command.split(" ");
for (int i = 0; i < messageArgs.length; i++) {
messageArgs[i] = commandArgs.getOrDefault(messageArgs[i], messageArgs[i]);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java
index dec23d36..d9fe850b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java
@@ -18,9 +18,15 @@ public class ShortcutsConfigScreen extends Screen {
private ButtonWidget buttonDone;
private boolean initialized;
private double scrollAmount;
-
+ private final Screen parent;
+
public ShortcutsConfigScreen() {
+ this(null);
+ }
+
+ public ShortcutsConfigScreen(Screen parent) {
super(Text.translatable("skyblocker.shortcuts.config"));
+ this.parent = parent;
}
@Override
@@ -89,13 +95,13 @@ public class ShortcutsConfigScreen extends Screen {
if (client != null && shortcutsConfigListWidget.hasChanges()) {
client.setScreen(new ConfirmScreen(confirmedAction -> {
if (confirmedAction) {
- super.close();
+ this.client.setScreen(parent);
} else {
client.setScreen(this);
}
- }, Text.translatable("text.cloth-config.quit_config"), Text.translatable("text.cloth-config.quit_config_sure"), Text.translatable("text.cloth-config.quit_discard"), ScreenTexts.CANCEL));
+ }, Text.translatable("text.skyblocker.quit_config"), Text.translatable("text.skyblocker.quit_config_sure"), Text.translatable("text.skyblocker.quit_discard"), ScreenTexts.CANCEL));
} else {
- super.close();
+ this.client.setScreen(parent);
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/special/SpecialEffects.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/special/SpecialEffects.java
index a3d7e5c5..84af889c 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/special/SpecialEffects.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/special/SpecialEffects.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.special;
import com.mojang.blaze3d.systems.RenderSystem;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.Utils;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.minecraft.client.MinecraftClient;
@@ -45,7 +45,7 @@ public class SpecialEffects {
private static void displayRareDropEffect(Text message, boolean overlay) {
//We don't check if we're in dungeons because that check doesn't work in m7 which defeats the point of this
//It might also allow it to work with Croesus
- if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.specialEffects.rareDungeonDropEffects) {
+ if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.specialEffects.rareDungeonDropEffects) {
try {
String stringForm = message.getString();
Matcher matcher = DROP_PATTERN.matcher(stringForm);
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java
index 12ce0715..994317f8 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/spidersden/Relics.java
@@ -7,6 +7,7 @@ import com.google.gson.JsonParser;
import com.mojang.brigadier.CommandDispatcher;
import me.xmrvizzy.skyblocker.SkyblockerMod;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.PosUtils;
import me.xmrvizzy.skyblocker.utils.Utils;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
@@ -115,7 +116,7 @@ public class Relics {
}
private static void render(WorldRenderContext context) {
- SkyblockerConfig.Relics config = SkyblockerConfig.get().locations.spidersDen.relics;
+ SkyblockerConfig.Relics config = SkyblockerConfigManager.get().locations.spidersDen.relics;
if (config.enableRelicsHelper && relicsLoaded.isDone() && Utils.getLocationRaw().equals("combat_1")) {
for (BlockPos fairySoulPos : relics) {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java
index 42089e9e..c230548b 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/ScreenConst.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.util;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
public class ScreenConst {
public static final int WIDGET_PAD = 5;
@@ -8,6 +8,6 @@ public class ScreenConst {
private static final int SCREEN_PAD_BASE = 20;
public static int getScreenPad() {
- return (int) ((1f/((float)SkyblockerConfig.get().general.tabHud.tabHudScale/100f) * SCREEN_PAD_BASE));
+ return (int) ((1f/((float)SkyblockerConfigManager.get().general.tabHud.tabHudScale/100f) * SCREEN_PAD_BASE));
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
index 31370dc6..241cb2a2 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/PlayerListWidget.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.widget;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlayerComponent;
@@ -50,7 +51,7 @@ public class PlayerListWidget extends Widget {
list.add(PlayerListMgr.getRaw(i));
}
- if (SkyblockerConfig.get().general.tabHud.nameSorting == SkyblockerConfig.NameSorting.ALPHABETICAL) {
+ if (SkyblockerConfigManager.get().general.tabHud.nameSorting == SkyblockerConfig.NameSorting.ALPHABETICAL) {
list.sort(Comparator.comparing(o -> o.getProfile().getName().toLowerCase()));
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java
index bca67b70..97d31981 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java
@@ -4,7 +4,7 @@ import java.util.ArrayList;
import com.mojang.blaze3d.systems.RenderSystem;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component;
import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent;
@@ -130,7 +130,7 @@ public abstract class Widget {
RenderSystem.enableDepthTest();
ms.push();
- float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f;
+ float scale = SkyblockerConfigManager.get().general.tabHud.tabHudScale / 100f;
ms.scale(scale, scale, 1);
// move above other UI elements
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java
index 4318a77d..cea8f6f0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java
@@ -1,6 +1,6 @@
package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.PlayerSkinDrawer;
import net.minecraft.client.network.PlayerListEntry;
@@ -20,7 +20,7 @@ public class PlayerComponent extends Component {
public PlayerComponent(PlayerListEntry ple) {
- boolean plainNames = SkyblockerConfig.get().general.tabHud.plainPlayerNames;
+ boolean plainNames = SkyblockerConfigManager.get().general.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/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java
index 58408944..39d91bba 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/discord/DiscordRPCManager.java
@@ -1,8 +1,7 @@
package me.xmrvizzy.skyblocker.utils.discord;
-import me.shedaniel.autoconfig.AutoConfig;
-import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.SkyblockEvents;
import me.xmrvizzy.skyblocker.utils.Utils;
import meteordevelopment.discordipc.DiscordIPC;
@@ -35,15 +34,15 @@ public class DiscordRPCManager {
}
/**
- * Checks the {@link SkyblockerConfig.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence.
+ * Checks the {@link SkyblockerConfigManager.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 (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) {
- SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock";
- AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
+ if (SkyblockerConfigManager.get().richPresence.customMessage.isEmpty()) {
+ SkyblockerConfigManager.get().richPresence.customMessage = "Playing Skyblock";
+ SkyblockerConfigManager.save();
}
- if (SkyblockerConfig.get().richPresence.cycleMode) cycleCount = (cycleCount + 1) % 3;
+ if (SkyblockerConfigManager.get().richPresence.cycleMode) cycleCount = (cycleCount + 1) % 3;
initAndUpdatePresence();
}
@@ -59,21 +58,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 SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled},
+ * Connects to discord if {@link SkyblockerConfigManager.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 SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled}
+ * Updates the presence if {@link SkyblockerConfigManager.RichPresence#enableRichPresence rich presence is enabled}
* and the player {@link Utils#isOnSkyblock() is on Skyblock}.
- * Stops the connection if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled}
+ * Stops the connection if {@link SkyblockerConfigManager.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 SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled}.
+ * if {@link SkyblockerConfigManager.RichPresence#enableRichPresence rich presence is disabled}.
*/
private static void initAndUpdatePresence(boolean initialization) {
if (updateTask == null || updateTask.isDone()) {
updateTask = CompletableFuture.runAsync(() -> {
- if (SkyblockerConfig.get().richPresence.enableRichPresence && Utils.isOnSkyblock()) {
+ if (SkyblockerConfigManager.get().richPresence.enableRichPresence && Utils.isOnSkyblock()) {
if (!DiscordIPC.isConnected()) {
if (DiscordIPC.start(934607927837356052L, null)) {
LOGGER.info("Discord RPC started successfully");
@@ -97,20 +96,20 @@ public class DiscordRPCManager {
RichPresence presence = new RichPresence();
presence.setLargeImage("skyblocker-default", null);
presence.setStart(startTimeStamp);
- presence.setDetails(SkyblockerConfig.get().richPresence.customMessage);
+ presence.setDetails(SkyblockerConfigManager.get().richPresence.customMessage);
presence.setState(getInfo());
return presence;
}
public static String getInfo() {
String info = null;
- if (!SkyblockerConfig.get().richPresence.cycleMode) {
- switch (SkyblockerConfig.get().richPresence.info) {
+ if (!SkyblockerConfigManager.get().richPresence.cycleMode) {
+ switch (SkyblockerConfigManager.get().richPresence.info) {
case BITS -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits());
case PURSE -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse());
case LOCATION -> info = Utils.getLocation();
}
- } else if (SkyblockerConfig.get().richPresence.cycleMode) {
+ } else if (SkyblockerConfigManager.get().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/me/xmrvizzy/skyblocker/utils/render/title/TitleContainer.java b/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainer.java
index 2555572c..a55965dc 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainer.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainer.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.utils.render.title;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.scheduler.Scheduler;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
@@ -81,7 +82,7 @@ public class TitleContainer {
}
private static void render(DrawContext context, float tickDelta) {
- render(context, titles, SkyblockerConfig.get().general.titleContainer.x, SkyblockerConfig.get().general.titleContainer.y, tickDelta);
+ render(context, titles, SkyblockerConfigManager.get().general.titleContainer.x, SkyblockerConfigManager.get().general.titleContainer.y, tickDelta);
}
protected static void render(DrawContext context, Set<Title> titles, int xPos, int yPos, float tickDelta) {
@@ -89,11 +90,11 @@ public class TitleContainer {
TextRenderer textRenderer = client.textRenderer;
// Calculate Scale to use
- float scale = 3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F);
+ float scale = 3F * (SkyblockerConfigManager.get().general.titleContainer.titleContainerScale / 100F);
// Grab direction and alignment values
- SkyblockerConfig.Direction direction = SkyblockerConfig.get().general.titleContainer.direction;
- SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment;
+ SkyblockerConfig.Direction direction = SkyblockerConfigManager.get().general.titleContainer.direction;
+ SkyblockerConfig.Alignment alignment = SkyblockerConfigManager.get().general.titleContainer.alignment;
// x/y refer to the starting position for the text
// y always starts at yPos
float x = 0;
diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainerConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainerConfigScreen.java
index 29f87961..caf9fbf0 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainerConfigScreen.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/utils/render/title/TitleContainerConfigScreen.java
@@ -1,7 +1,7 @@
package me.xmrvizzy.skyblocker.utils.render.title;
-import me.shedaniel.autoconfig.AutoConfig;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfigManager;
import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
@@ -18,11 +18,17 @@ 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 = SkyblockerConfig.get().general.titleContainer.x;
- private float hudY = SkyblockerConfig.get().general.titleContainer.y;
-
+ private float hudX = SkyblockerConfigManager.get().general.titleContainer.x;
+ private float hudY = SkyblockerConfigManager.get().general.titleContainer.y;
+ private final Screen parent;
+
protected TitleContainerConfigScreen() {
- super(Text.of("Title Container HUD Config"));
+ this(null);
+ }
+
+ public TitleContainerConfigScreen(Screen parent) {
+ super(Text.of("Title Container HUD Config"));
+ this.parent = parent;
}
@Override
@@ -30,8 +36,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 = SkyblockerConfig.get().general.titleContainer.direction;
- SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment;
+ SkyblockerConfig.Direction direction = SkyblockerConfigManager.get().general.titleContainer.direction;
+ SkyblockerConfig.Alignment alignment = SkyblockerConfigManager.get().general.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());
@@ -50,7 +56,7 @@ public class TitleContainerConfigScreen extends Screen {
}
private Pair<Vector2f, Vector2f> getSelectionBoundingBox() {
- SkyblockerConfig.Alignment alignment = SkyblockerConfig.get().general.titleContainer.alignment;
+ SkyblockerConfig.Alignment alignment = SkyblockerConfigManager.get().general.titleContainer.alignment;
float midWidth = getSelectionWidth() / 2F;
float x1 = 0;
@@ -75,15 +81,15 @@ public class TitleContainerConfigScreen extends Screen {
}
private float getSelectionHeight() {
- float scale = (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F));
- return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ?
+ float scale = (3F * (SkyblockerConfigManager.get().general.titleContainer.titleContainerScale / 100F));
+ return SkyblockerConfigManager.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ?
(textRenderer.fontHeight * scale) :
(textRenderer.fontHeight + 10F) * 3F * scale;
}
private float getSelectionWidth() {
- float scale = (3F * (SkyblockerConfig.get().general.titleContainer.titleContainerScale / 100F));
- return SkyblockerConfig.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ?
+ float scale = (3F * (SkyblockerConfigManager.get().general.titleContainer.titleContainerScale / 100F));
+ return SkyblockerConfigManager.get().general.titleContainer.direction == SkyblockerConfig.Direction.HORIZONTAL ?
(textRenderer.getWidth("Test1") + 10 + textRenderer.getWidth("Test23") + 10 + textRenderer.getWidth("Testing1234")) * scale :
textRenderer.getWidth("Testing1234") * scale;
}
@@ -92,7 +98,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 = SkyblockerConfig.get().general.titleContainer.alignment;
+ var alignment = SkyblockerConfigManager.get().general.titleContainer.alignment;
Pair<Vector2f, Vector2f> boundingBox = getSelectionBoundingBox();
float x1 = boundingBox.getLeft().getX();
@@ -123,42 +129,42 @@ public class TitleContainerConfigScreen extends Screen {
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_Q) {
- SkyblockerConfig.Alignment current = SkyblockerConfig.get().general.titleContainer.alignment;
- SkyblockerConfig.get().general.titleContainer.alignment = switch (current) {
+ 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;
};
}
if (keyCode == GLFW.GLFW_KEY_E) {
- SkyblockerConfig.Alignment current = SkyblockerConfig.get().general.titleContainer.alignment;
- SkyblockerConfig.get().general.titleContainer.alignment = switch (current) {
+ 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;
};
}
if (keyCode == GLFW.GLFW_KEY_R) {
- SkyblockerConfig.Direction current = SkyblockerConfig.get().general.titleContainer.direction;
- SkyblockerConfig.get().general.titleContainer.direction = switch (current) {
+ 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;
};
}
if (keyCode == GLFW.GLFW_KEY_EQUAL) {
- SkyblockerConfig.get().general.titleContainer.titleContainerScale += 10;
+ SkyblockerConfigManager.get().general.titleContainer.titleContainerScale += 10;
}
if (keyCode == GLFW.GLFW_KEY_MINUS) {
- SkyblockerConfig.get().general.titleContainer.titleContainerScale -= 10;
+ SkyblockerConfigManager.get().general.titleContainer.titleContainerScale -= 10;
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
@Override
public void close() {
- SkyblockerConfig.get().general.titleContainer.x = (int) hudX;
- SkyblockerConfig.get().general.titleContainer.y = (int) hudY;
- AutoConfig.getConfigHolder(SkyblockerConfig.class).save();
- super.close();
+ SkyblockerConfigManager.get().general.titleContainer.x = (int) hudX;
+ SkyblockerConfigManager.get().general.titleContainer.y = (int) hudY;
+ SkyblockerConfigManager.save();
+ this.client.setScreen(parent);
}
}