diff options
author | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2023-09-26 12:58:40 -0400 |
---|---|---|
committer | Aaron <51387595+AzureAaron@users.noreply.github.com> | 2023-09-26 12:58:40 -0400 |
commit | 84aedfe464bc648cbb18b4f2a7eaeb695091b2b5 (patch) | |
tree | 6e6bf0121e445e64e7185c7a691b4fa798f110ef /src/main/java/me/xmrvizzy/skyblocker/config | |
parent | 04f97400a0216d7fdd1154b8c8fa64ac65df63cb (diff) | |
download | Skyblocker-84aedfe464bc648cbb18b4f2a7eaeb695091b2b5.tar.gz Skyblocker-84aedfe464bc648cbb18b4f2a7eaeb695091b2b5.tar.bz2 Skyblocker-84aedfe464bc648cbb18b4f2a7eaeb695091b2b5.zip |
Rename Config Files
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/config')
11 files changed, 905 insertions, 905 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/ConfigModel.java b/src/main/java/me/xmrvizzy/skyblocker/config/ConfigModel.java deleted file mode 100644 index a8f27a35..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/config/ConfigModel.java +++ /dev/null @@ -1,809 +0,0 @@ -package me.xmrvizzy.skyblocker.config; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; - -import dev.isxander.yacl3.config.ConfigEntry; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult; -import me.xmrvizzy.skyblocker.skyblock.item.CustomArmorTrims; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -@SuppressWarnings("deprecation") -public class ConfigModel { - @ConfigEntry - public int version = 1; - - @ConfigEntry - public General general = new General(); - - @ConfigEntry - public Locations locations = new Locations(); - - @ConfigEntry - public Slayer slayer = new Slayer(); - - @ConfigEntry - public QuickNav quickNav = new QuickNav(); - - @ConfigEntry - public Messages messages = new Messages(); - - @ConfigEntry - public RichPresence richPresence = new RichPresence(); - - public static class QuickNav { - @ConfigEntry - public boolean enableQuickNav = true; - - @ConfigEntry - public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); - - @ConfigEntry - public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); - - /* REGEX Explanation - * "Pets" : simple match on letters - * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" - */ - @ConfigEntry - 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)" - */ - @ConfigEntry - public QuickNavItem button4 = new QuickNavItem(true, - new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", - "/wardrobe"); - - @ConfigEntry - 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)" - */ - @ConfigEntry - public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), - "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); - - @ConfigEntry - 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 - 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 - 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 - public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", - "/etable"); - - @ConfigEntry - public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); - - @ConfigEntry - 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; - } - - @ConfigEntry - public Boolean render; - - @ConfigEntry - public ItemData item; - - @ConfigEntry - public String uiTitle; - - @ConfigEntry - 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 = ""; - } - - @ConfigEntry - public String itemName; - - @ConfigEntry - public int count; - - @ConfigEntry - public String nbt; - } - - public static class General { - @ConfigEntry - public boolean acceptReparty = true; - - @ConfigEntry - public boolean backpackPreviewWithoutShift = false; - - @ConfigEntry - public boolean compactorDeletorPreview = true; - - @ConfigEntry - public boolean hideEmptyTooltips = true; - - @ConfigEntry - public boolean hideStatusEffectOverlay = false; - - @ConfigEntry - public TabHudConf tabHud = new TabHudConf(); - - @ConfigEntry - public Bars bars = new Bars(); - - @ConfigEntry - public Experiments experiments = new Experiments(); - - @ConfigEntry - public Fishing fishing = new Fishing(); - - @ConfigEntry - public FairySouls fairySouls = new FairySouls(); - - @ConfigEntry - public Shortcuts shortcuts = new Shortcuts(); - - @ConfigEntry - public QuiverWarning quiverWarning = new QuiverWarning(); - - @ConfigEntry - public ItemList itemList = new ItemList(); - - @ConfigEntry - public ItemTooltip itemTooltip = new ItemTooltip(); - - @ConfigEntry - public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); - - @ConfigEntry - public SpecialEffects specialEffects = new SpecialEffects(); - - @ConfigEntry - public Hitbox hitbox = new Hitbox(); - - @ConfigEntry - public TitleContainer titleContainer = new TitleContainer(); - - @ConfigEntry - public TeleportOverlay teleportOverlay = new TeleportOverlay(); - - @ConfigEntry - public List<Integer> lockedSlots = new ArrayList<>(); - - @ConfigEntry - public Object2ObjectOpenHashMap<String, Text> customItemNames = new Object2ObjectOpenHashMap<>(); - - @ConfigEntry - public Object2IntOpenHashMap<String> customDyeColors = new Object2IntOpenHashMap<>(); - - @ConfigEntry - public Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customArmorTrims = new Object2ObjectOpenHashMap<>(); - } - - public static class TabHudConf { - @ConfigEntry - public boolean tabHudEnabled = true; - - @ConfigEntry - public int tabHudScale = 100; - - @ConfigEntry - public boolean plainPlayerNames = false; - - @ConfigEntry - 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 { - @ConfigEntry - public boolean enableBars = true; - - @ConfigEntry - public BarPositions barpositions = new BarPositions(); - } - - public static class BarPositions { - @ConfigEntry - public BarPosition healthBarPosition = BarPosition.LAYER1; - - @ConfigEntry - public BarPosition manaBarPosition = BarPosition.LAYER1; - - @ConfigEntry - public BarPosition defenceBarPosition = BarPosition.LAYER1; - - @ConfigEntry - 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 { - @ConfigEntry - public boolean enableChronomatronSolver = true; - - @ConfigEntry - public boolean enableSuperpairsSolver = true; - - @ConfigEntry - public boolean enableUltrasequencerSolver = true; - } - - public static class Fishing { - @ConfigEntry - public boolean enableFishingHelper = true; - } - - public static class FairySouls { - @ConfigEntry - public boolean enableFairySoulsHelper = false; - - @ConfigEntry - public boolean highlightFoundSouls = true; - - @ConfigEntry - public boolean highlightOnlyNearbySouls = false; - } - - public static class Shortcuts { - @ConfigEntry - public boolean enableShortcuts = true; - - @ConfigEntry - public boolean enableCommandShortcuts = true; - - @ConfigEntry - public boolean enableCommandArgShortcuts = true; - } - - public static class QuiverWarning { - @ConfigEntry - public boolean enableQuiverWarning = true; - - @ConfigEntry - public boolean enableQuiverWarningInDungeons = true; - - @ConfigEntry - public boolean enableQuiverWarningAfterDungeon = true; - } - - public static class Hitbox { - @ConfigEntry - public boolean oldFarmlandHitbox = true; - - @ConfigEntry - public boolean oldLeverHitbox = false; - } - - public static class TitleContainer { - @ConfigEntry - public float titleContainerScale = 100; - - @ConfigEntry - public int x = 540; - - @ConfigEntry - public int y = 10; - - @ConfigEntry - public Direction direction = Direction.HORIZONTAL; - - @ConfigEntry - public Alignment alignment = Alignment.MIDDLE; - } - - public static class TeleportOverlay { - @ConfigEntry - public boolean enableTeleportOverlays = true; - - @ConfigEntry - public boolean enableWeirdTransmission = true; - - @ConfigEntry - public boolean enableInstantTransmission = true; - - @ConfigEntry - public boolean enableEtherTransmission = true; - - @ConfigEntry - public boolean enableSinrecallTransmission = true; - - @ConfigEntry - 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 { - @ConfigEntry - public boolean enableRichPresence = false; - - @ConfigEntry - public Info info = Info.LOCATION; - - @ConfigEntry - public boolean cycleMode = false; - - @ConfigEntry - public String customMessage = "Playing Skyblock"; - } - - public static class ItemList { - @ConfigEntry - 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 { - @ConfigEntry - public boolean enableNPCPrice = true; - - @ConfigEntry - public boolean enableMotesPrice = true; - - @ConfigEntry - public boolean enableAvgBIN = true; - - @ConfigEntry - public Average avg = Average.THREE_DAY; - - @ConfigEntry - public boolean enableLowestBIN = true; - - @ConfigEntry - public boolean enableBazaarPrice = true; - - @ConfigEntry - public boolean enableMuseumDate = true; - } - - public static class ItemInfoDisplay { - @ConfigEntry - public boolean attributeShardInfo = true; - } - - public static class SpecialEffects { - @ConfigEntry - public boolean rareDungeonDropEffects = true; - } - - public static class Locations { - @ConfigEntry - public Barn barn = new Barn(); - - @ConfigEntry - public Dungeons dungeons = new Dungeons(); - - @ConfigEntry - public DwarvenMines dwarvenMines = new DwarvenMines(); - - @ConfigEntry - public Rift rift = new Rift(); - - @ConfigEntry - public SpidersDen spidersDen = new SpidersDen(); - } - - public static class Dungeons { - @ConfigEntry - public SecretWaypoints secretWaypoints = new SecretWaypoints(); - - @ConfigEntry - public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit(); - - @ConfigEntry - public boolean croesusHelper = true; - - @ConfigEntry - public boolean enableMap = true; - - @ConfigEntry - public float mapScaling = 1f; - - @ConfigEntry - public int mapX = 2; - - @ConfigEntry - public int mapY = 2; - - @ConfigEntry - public boolean starredMobGlow = true; - - @ConfigEntry - public boolean solveThreeWeirdos = true; - - @ConfigEntry - public boolean blazesolver = true; - - @ConfigEntry - public boolean solveTrivia = true; - - @ConfigEntry - public boolean solveTicTacToe = true; - - @ConfigEntry - public LividColor lividColor = new LividColor(); - - @ConfigEntry - public Terminals terminals = new Terminals(); - } - - public static class SecretWaypoints { - @ConfigEntry - public boolean enableSecretWaypoints = true; - - @ConfigEntry - public boolean noInitSecretWaypoints = false; - - @ConfigEntry - public boolean enableEntranceWaypoints = true; - - @ConfigEntry - public boolean enableSuperboomWaypoints = true; - - @ConfigEntry - public boolean enableChestWaypoints = true; - - @ConfigEntry - public boolean enableItemWaypoints = true; - - @ConfigEntry - public boolean enableBatWaypoints = true; - - @ConfigEntry - public boolean enableWitherWaypoints = true; - - @ConfigEntry - public boolean enableLeverWaypoints = true; - - @ConfigEntry - public boolean enableFairySoulWaypoints = true; - - @ConfigEntry - public boolean enableStonkWaypoints = true; - - @ConfigEntry - public boolean enableDefaultWaypoints = true; - } - - public static class DungeonChestProfit { - @ConfigEntry - public boolean enableProfitCalculator = true; - - @ConfigEntry - public boolean includeKismet = false; - - @ConfigEntry - public boolean includeEssence = true; - - @ConfigEntry - public int neutralThreshold = 1000; - - @ConfigEntry - public FormattingOption neutralColor = FormattingOption.DARK_GRAY; - - @ConfigEntry - public FormattingOption profitColor = FormattingOption.DARK_GREEN; - - @ConfigEntry - public FormattingOption lossColor = FormattingOption.RED; - - @ConfigEntry - 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 - public boolean enableLividColor = true; - - @ConfigEntry - public String lividColorText = "The livid color is [color]"; - } - - public static class Terminals { - @ConfigEntry - public boolean solveColor = true; - - @ConfigEntry - public boolean solveOrder = true; - - @ConfigEntry - public boolean solveStartsWith = true; - } - - public static class DwarvenMines { - @ConfigEntry - public boolean enableDrillFuel = true; - - @ConfigEntry - public boolean solveFetchur = true; - - @ConfigEntry - public boolean solvePuzzler = true; - - @ConfigEntry - public DwarvenHud dwarvenHud = new DwarvenHud(); - } - - public static class DwarvenHud { - @ConfigEntry - public boolean enabled = true; - - @ConfigEntry - public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE; - - @ConfigEntry - public boolean enableBackground = true; - - @ConfigEntry - public int x = 10; - - @ConfigEntry - 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 { - @ConfigEntry - public boolean solveHungryHiker = true; - - @ConfigEntry - public boolean solveTreasureHunter = true; - } - - public static class Rift { - @ConfigEntry - public boolean mirrorverseWaypoints = true; - - @ConfigEntry - public int mcGrubberStacks = 0; - } - - public static class SpidersDen { - @ConfigEntry - public Relics relics = new Relics(); - } - - public static class Relics { - @ConfigEntry - public boolean enableRelicsHelper = false; - - @ConfigEntry - public boolean highlightFoundRelics = true; - } - - public static class Slayer { - @ConfigEntry - public VampireSlayer vampireSlayer = new VampireSlayer(); - } - - public static class VampireSlayer { - @ConfigEntry - public boolean enableEffigyWaypoints = true; - - @ConfigEntry - public boolean compactEffigyWaypoints; - - @ConfigEntry - public int effigyUpdateFrequency = 5; - - @ConfigEntry - public boolean enableHolyIceIndicator = true; - - @ConfigEntry - public int holyIceIndicatorTickDelay = 10; - - @ConfigEntry - public int holyIceUpdateFrequency = 5; - - @ConfigEntry - public boolean enableHealingMelonIndicator = true; - - @ConfigEntry - public float healingMelonHealthThreshold = 4f; - - @ConfigEntry - public boolean enableSteakStakeIndicator = true; - - @ConfigEntry - public int steakStakeUpdateFrequency = 5; - - @ConfigEntry - public boolean enableManiaIndicator = true; - - @ConfigEntry - public int maniaUpdateFrequency = 5; - } - - public static class Messages { - @ConfigEntry - public ChatFilterResult hideAbility = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideHeal = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideAOTE = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideImplosion = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideAds = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideCombo = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideAutopet = ChatFilterResult.PASS; - - @ConfigEntry - public ChatFilterResult hideShowOff = ChatFilterResult.PASS; - - @ConfigEntry - 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/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 9020d7a0..4207b495 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -1,88 +1,809 @@ package me.xmrvizzy.skyblocker.config; -import java.lang.StackWalker.Option; -import java.nio.file.Path; -import com.mojang.brigadier.builder.LiteralArgumentBuilder; - -import dev.isxander.yacl3.api.YetAnotherConfigLib; -import dev.isxander.yacl3.config.GsonConfigInstance; -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.MessageFilterCategory; -import me.xmrvizzy.skyblocker.config.categories.LocationsCategory; -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 java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + +import dev.isxander.yacl3.config.ConfigEntry; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import me.xmrvizzy.skyblocker.utils.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.skyblock.item.CustomArmorTrims; +import net.minecraft.client.resource.language.I18n; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; @SuppressWarnings("deprecation") public class SkyblockerConfig { - private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json"); - private static final GsonConfigInstance<ConfigModel> INSTANCE = GsonConfigInstance.createBuilder(ConfigModel.class) - .setPath(PATH) - .overrideGsonBuilder(ConfigSerializer.INSTANCE) - .build(); - /*private static final ConfigClassHandler<ConfigModel> HANDLER = ConfigClassHandler.createBuilder(ConfigModel.class) - .serializer(config -> GsonConfigSerializerBuilder.create(config) - .setPath(PATH) - .setJson5(false) - .overrideGsonBuilder(ConfigSerializer.INSTANCE) - .build()) - .build();*/ + @ConfigEntry + public int version = 1; - public static ConfigModel get() { - return INSTANCE.getConfig(); + @ConfigEntry + public General general = new General(); + + @ConfigEntry + public Locations locations = new Locations(); + + @ConfigEntry + public Slayer slayer = new Slayer(); + + @ConfigEntry + public QuickNav quickNav = new QuickNav(); + + @ConfigEntry + public Messages messages = new Messages(); + + @ConfigEntry + public RichPresence richPresence = new RichPresence(); + + public static class QuickNav { + @ConfigEntry + public boolean enableQuickNav = true; + + @ConfigEntry + public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); + + @ConfigEntry + public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); + + /* REGEX Explanation + * "Pets" : simple match on letters + * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" + */ + @ConfigEntry + 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)" + */ + @ConfigEntry + public QuickNavItem button4 = new QuickNavItem(true, + new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", + "/wardrobe"); + + @ConfigEntry + 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)" + */ + @ConfigEntry + public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), + "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); + + @ConfigEntry + 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 + 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 + 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 + public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", + "/etable"); + + @ConfigEntry + public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); + + @ConfigEntry + 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; + } + + @ConfigEntry + public Boolean render; + + @ConfigEntry + public ItemData item; + + @ConfigEntry + public String uiTitle; + + @ConfigEntry + 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 = ""; + } + + @ConfigEntry + public String itemName; + + @ConfigEntry + public int count; + + @ConfigEntry + public String nbt; + } + + public static class General { + @ConfigEntry + public boolean acceptReparty = true; + + @ConfigEntry + public boolean backpackPreviewWithoutShift = false; + + @ConfigEntry + public boolean compactorDeletorPreview = true; + + @ConfigEntry + public boolean hideEmptyTooltips = true; + + @ConfigEntry + public boolean hideStatusEffectOverlay = false; + + @ConfigEntry + public TabHudConf tabHud = new TabHudConf(); + + @ConfigEntry + public Bars bars = new Bars(); + + @ConfigEntry + public Experiments experiments = new Experiments(); + + @ConfigEntry + public Fishing fishing = new Fishing(); + + @ConfigEntry + public FairySouls fairySouls = new FairySouls(); + + @ConfigEntry + public Shortcuts shortcuts = new Shortcuts(); + + @ConfigEntry + public QuiverWarning quiverWarning = new QuiverWarning(); + + @ConfigEntry + public ItemList itemList = new ItemList(); + + @ConfigEntry + public ItemTooltip itemTooltip = new ItemTooltip(); + + @ConfigEntry + public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); + + @ConfigEntry + public SpecialEffects specialEffects = new SpecialEffects(); + + @ConfigEntry + public Hitbox hitbox = new Hitbox(); + + @ConfigEntry + public TitleContainer titleContainer = new TitleContainer(); + + @ConfigEntry + public TeleportOverlay teleportOverlay = new TeleportOverlay(); + + @ConfigEntry + public List<Integer> lockedSlots = new ArrayList<>(); + + @ConfigEntry + public Object2ObjectOpenHashMap<String, Text> customItemNames = new Object2ObjectOpenHashMap<>(); + + @ConfigEntry + public Object2IntOpenHashMap<String> customDyeColors = new Object2IntOpenHashMap<>(); + + @ConfigEntry + public Object2ObjectOpenHashMap<String, CustomArmorTrims.ArmorTrimId> customArmorTrims = new Object2ObjectOpenHashMap<>(); + } + + public static class TabHudConf { + @ConfigEntry + public boolean tabHudEnabled = true; + + @ConfigEntry + public int tabHudScale = 100; + + @ConfigEntry + public boolean plainPlayerNames = false; + + @ConfigEntry + 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 { + @ConfigEntry + public boolean enableBars = true; + + @ConfigEntry + public BarPositions barpositions = new BarPositions(); + } + + public static class BarPositions { + @ConfigEntry + public BarPosition healthBarPosition = BarPosition.LAYER1; + + @ConfigEntry + public BarPosition manaBarPosition = BarPosition.LAYER1; + + @ConfigEntry + public BarPosition defenceBarPosition = BarPosition.LAYER1; + + @ConfigEntry + 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 { + @ConfigEntry + public boolean enableChronomatronSolver = true; + + @ConfigEntry + public boolean enableSuperpairsSolver = true; + + @ConfigEntry + public boolean enableUltrasequencerSolver = true; + } + + public static class Fishing { + @ConfigEntry + public boolean enableFishingHelper = true; + } + + public static class FairySouls { + @ConfigEntry + public boolean enableFairySoulsHelper = false; + + @ConfigEntry + public boolean highlightFoundSouls = true; + + @ConfigEntry + public boolean highlightOnlyNearbySouls = false; + } + + public static class Shortcuts { + @ConfigEntry + public boolean enableShortcuts = true; + + @ConfigEntry + public boolean enableCommandShortcuts = true; + + @ConfigEntry + public boolean enableCommandArgShortcuts = true; } - /** - * 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!"); + public static class QuiverWarning { + @ConfigEntry + public boolean enableQuiverWarning = true; + + @ConfigEntry + public boolean enableQuiverWarningInDungeons = true; + + @ConfigEntry + public boolean enableQuiverWarningAfterDungeon = true; + } + + public static class Hitbox { + @ConfigEntry + public boolean oldFarmlandHitbox = true; + + @ConfigEntry + public boolean oldLeverHitbox = false; + } + + public static class TitleContainer { + @ConfigEntry + public float titleContainerScale = 100; + + @ConfigEntry + public int x = 540; + + @ConfigEntry + public int y = 10; + + @ConfigEntry + public Direction direction = Direction.HORIZONTAL; + + @ConfigEntry + public Alignment alignment = Alignment.MIDDLE; + } + + public static class TeleportOverlay { + @ConfigEntry + public boolean enableTeleportOverlays = true; + + @ConfigEntry + public boolean enableWeirdTransmission = true; + + @ConfigEntry + public boolean enableInstantTransmission = true; + + @ConfigEntry + public boolean enableEtherTransmission = true; + + @ConfigEntry + public boolean enableSinrecallTransmission = true; + + @ConfigEntry + 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 { + @ConfigEntry + public boolean enableRichPresence = false; + + @ConfigEntry + public Info info = Info.LOCATION; + + @ConfigEntry + public boolean cycleMode = false; - INSTANCE.load(); - ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options"))))); + @ConfigEntry + public String customMessage = "Playing Skyblock"; + } + + public static class ItemList { + @ConfigEntry + 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 { + @ConfigEntry + public boolean enableNPCPrice = true; + + @ConfigEntry + public boolean enableMotesPrice = true; + + @ConfigEntry + public boolean enableAvgBIN = true; + + @ConfigEntry + public Average avg = Average.THREE_DAY; + + @ConfigEntry + public boolean enableLowestBIN = true; + + @ConfigEntry + public boolean enableBazaarPrice = true; + + @ConfigEntry + public boolean enableMuseumDate = true; + } + + public static class ItemInfoDisplay { + @ConfigEntry + public boolean attributeShardInfo = true; } - public static void save() { - INSTANCE.save(); + public static class SpecialEffects { + @ConfigEntry + public boolean rareDungeonDropEffects = true; + } + + public static class Locations { + @ConfigEntry + public Barn barn = new Barn(); + + @ConfigEntry + public Dungeons dungeons = new Dungeons(); + + @ConfigEntry + public DwarvenMines dwarvenMines = new DwarvenMines(); + + @ConfigEntry + public Rift rift = new Rift(); + + @ConfigEntry + public SpidersDen spidersDen = new SpidersDen(); + } + + public static class Dungeons { + @ConfigEntry + public SecretWaypoints secretWaypoints = new SecretWaypoints(); + + @ConfigEntry + public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit(); + + @ConfigEntry + public boolean croesusHelper = true; + + @ConfigEntry + public boolean enableMap = true; + + @ConfigEntry + public float mapScaling = 1f; + + @ConfigEntry + public int mapX = 2; + + @ConfigEntry + public int mapY = 2; + + @ConfigEntry + public boolean starredMobGlow = true; + + @ConfigEntry + public boolean solveThreeWeirdos = true; + + @ConfigEntry + public boolean blazesolver = true; + + @ConfigEntry + public boolean solveTrivia = true; + + @ConfigEntry + public boolean solveTicTacToe = true; + + @ConfigEntry + public LividColor lividColor = new LividColor(); + + @ConfigEntry + public Terminals terminals = new Terminals(); + } + + public static class SecretWaypoints { + @ConfigEntry + public boolean enableSecretWaypoints = true; + + @ConfigEntry + public boolean noInitSecretWaypoints = false; + + @ConfigEntry + public boolean enableEntranceWaypoints = true; + + @ConfigEntry + public boolean enableSuperboomWaypoints = true; + + @ConfigEntry + public boolean enableChestWaypoints = true; + + @ConfigEntry + public boolean enableItemWaypoints = true; + + @ConfigEntry + public boolean enableBatWaypoints = true; + + @ConfigEntry + public boolean enableWitherWaypoints = true; + + @ConfigEntry + public boolean enableLeverWaypoints = true; + + @ConfigEntry + public boolean enableFairySoulWaypoints = true; + + @ConfigEntry + public boolean enableStonkWaypoints = true; + + @ConfigEntry + public boolean enableDefaultWaypoints = true; } - public static Screen createGUI(Screen parent) { - return YetAnotherConfigLib.create(INSTANCE, (defaults, config, builder) -> { - return builder - .title(Text.literal("Skyblocker")) - .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); + public static class DungeonChestProfit { + @ConfigEntry + public boolean enableProfitCalculator = true; + + @ConfigEntry + public boolean includeKismet = false; + + @ConfigEntry + public boolean includeEssence = true; + + @ConfigEntry + public int neutralThreshold = 1000; + + @ConfigEntry + public FormattingOption neutralColor = FormattingOption.DARK_GRAY; + + @ConfigEntry + public FormattingOption profitColor = FormattingOption.DARK_GREEN; + + @ConfigEntry + public FormattingOption lossColor = FormattingOption.RED; + + @ConfigEntry + public FormattingOption incompleteColor = FormattingOption.BLUE; + } - /** - * 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))); + 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 + public boolean enableLividColor = true; + + @ConfigEntry + public String lividColorText = "The livid color is [color]"; + } + + public static class Terminals { + @ConfigEntry + public boolean solveColor = true; + + @ConfigEntry + public boolean solveOrder = true; + + @ConfigEntry + public boolean solveStartsWith = true; + } + + public static class DwarvenMines { + @ConfigEntry + public boolean enableDrillFuel = true; + + @ConfigEntry + public boolean solveFetchur = true; + + @ConfigEntry + public boolean solvePuzzler = true; + + @ConfigEntry + public DwarvenHud dwarvenHud = new DwarvenHud(); + } + + public static class DwarvenHud { + @ConfigEntry + public boolean enabled = true; + + @ConfigEntry + public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE; + + @ConfigEntry + public boolean enableBackground = true; + + @ConfigEntry + public int x = 10; + + @ConfigEntry + 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 { + @ConfigEntry + public boolean solveHungryHiker = true; + + @ConfigEntry + public boolean solveTreasureHunter = true; + } + + public static class Rift { + @ConfigEntry + public boolean mirrorverseWaypoints = true; + + @ConfigEntry + public int mcGrubberStacks = 0; + } + + public static class SpidersDen { + @ConfigEntry + public Relics relics = new Relics(); + } + + public static class Relics { + @ConfigEntry + public boolean enableRelicsHelper = false; + + @ConfigEntry + public boolean highlightFoundRelics = true; + } + + public static class Slayer { + @ConfigEntry + public VampireSlayer vampireSlayer = new VampireSlayer(); + } + + public static class VampireSlayer { + @ConfigEntry + public boolean enableEffigyWaypoints = true; + + @ConfigEntry + public boolean compactEffigyWaypoints; + + @ConfigEntry + public int effigyUpdateFrequency = 5; + + @ConfigEntry + public boolean enableHolyIceIndicator = true; + + @ConfigEntry + public int holyIceIndicatorTickDelay = 10; + + @ConfigEntry + public int holyIceUpdateFrequency = 5; + + @ConfigEntry + public boolean enableHealingMelonIndicator = true; + + @ConfigEntry + public float healingMelonHealthThreshold = 4f; + + @ConfigEntry + public boolean enableSteakStakeIndicator = true; + + @ConfigEntry + public int steakStakeUpdateFrequency = 5; + + @ConfigEntry + public boolean enableManiaIndicator = true; + + @ConfigEntry + public int maniaUpdateFrequency = 5; + } + + public static class Messages { + @ConfigEntry + public ChatFilterResult hideAbility = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideHeal = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideAOTE = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideImplosion = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideAds = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideCombo = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideAutopet = ChatFilterResult.PASS; + + @ConfigEntry + public ChatFilterResult hideShowOff = ChatFilterResult.PASS; + + @ConfigEntry + 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..534dde6d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfigManager.java @@ -0,0 +1,88 @@ +package me.xmrvizzy.skyblocker.config; + +import java.lang.StackWalker.Option; +import java.nio.file.Path; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; + +import dev.isxander.yacl3.api.YetAnotherConfigLib; +import dev.isxander.yacl3.config.GsonConfigInstance; +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.MessageFilterCategory; +import me.xmrvizzy.skyblocker.config.categories.LocationsCategory; +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; + +@SuppressWarnings("deprecation") +public class SkyblockerConfigManager { + private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve("skyblocker.json"); + private static final GsonConfigInstance<SkyblockerConfig> INSTANCE = GsonConfigInstance.createBuilder(SkyblockerConfig.class) + .setPath(PATH) + .overrideGsonBuilder(ConfigSerializer.INSTANCE) + .build(); + /*private static final ConfigClassHandler<ConfigModel> HANDLER = ConfigClassHandler.createBuilder(ConfigModel.class) + .serializer(config -> GsonConfigSerializerBuilder.create(config) + .setPath(PATH) + .setJson5(false) + .overrideGsonBuilder(ConfigSerializer.INSTANCE) + .build()) + .build();*/ + + public static SkyblockerConfig get() { + return INSTANCE.getConfig(); + } + + /** + * 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!"); + } + + INSTANCE.load(); + ClientCommandRegistrationCallback.EVENT.register(((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE).then(optionsLiteral("config")).then(optionsLiteral("options"))))); + } + + public static void save() { + INSTANCE.save(); + } + + public static Screen createGUI(Screen parent) { + return YetAnotherConfigLib.create(INSTANCE, (defaults, config, builder) -> { + return builder + .title(Text.literal("Skyblocker")) + .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 index 9f7d066b..4357c29c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DiscordRPCCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DiscordRPCCategory.java @@ -5,13 +5,13 @@ 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.ConfigModel; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.config.ConfigUtils; import net.minecraft.text.Text; public class DiscordRPCCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.richPresence")) @@ -23,7 +23,7 @@ public class DiscordRPCCategory { newValue -> config.richPresence.enableRichPresence = newValue) .controller(BooleanControllerBuilder::create) .build()) - .option(Option.<ConfigModel.Info>createBuilder() + .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, diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java index e26bbae6..0f6b1208 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DungeonsCategory.java @@ -10,8 +10,8 @@ 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.ConfigModel; -import me.xmrvizzy.skyblocker.config.ConfigModel.FormattingOption; +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; @@ -19,7 +19,7 @@ import net.minecraft.text.Text; public class DungeonsCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons")) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java index 540a04e4..c6b8b8bc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/DwarvenMinesCategory.java @@ -7,7 +7,7 @@ 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.ConfigModel; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.config.ConfigUtils; import me.xmrvizzy.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; import net.minecraft.client.MinecraftClient; @@ -15,7 +15,7 @@ import net.minecraft.text.Text; public class DwarvenMinesCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines")) @@ -53,7 +53,7 @@ public class DwarvenMinesCategory { newValue -> config.locations.dwarvenMines.dwarvenHud.enabled = newValue) .controller(BooleanControllerBuilder::create) .build()) - .option(Option.<ConfigModel.DwarvenHudStyle>createBuilder() + .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]"), diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java index 1019703c..e75dc331 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/GeneralCategory.java @@ -9,7 +9,7 @@ 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.ConfigModel; +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; @@ -18,7 +18,7 @@ import net.minecraft.text.Text; public class GeneralCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.general")) @@ -86,7 +86,7 @@ public class GeneralCategory { newValue -> config.general.tabHud.plainPlayerNames = newValue) .controller(BooleanControllerBuilder::create) .build()) - .option(Option.<ConfigModel.NameSorting>createBuilder() + .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, @@ -107,28 +107,28 @@ public class GeneralCategory { newValue -> config.general.bars.enableBars = newValue) .controller(BooleanControllerBuilder::create) .build()) - .option(Option.<ConfigModel.BarPosition>createBuilder() + .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::createCyclingListController4Enum) .build()) - .option(Option.<ConfigModel.BarPosition>createBuilder() + .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::createCyclingListController4Enum) .build()) - .option(Option.<ConfigModel.BarPosition>createBuilder() + .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::createCyclingListController4Enum) .build()) - .option(Option.<ConfigModel.BarPosition>createBuilder() + .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, @@ -306,7 +306,7 @@ public class GeneralCategory { newValue -> config.general.itemTooltip.enableAvgBIN = newValue) .controller(BooleanControllerBuilder::create) .build()) - .option(Option.<ConfigModel.Average>createBuilder() + .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, @@ -411,14 +411,14 @@ public class GeneralCategory { newValue -> config.general.titleContainer.y = newValue) .controller(IntegerFieldControllerBuilder::create) .build()) - .option(Option.<ConfigModel.Direction>createBuilder() + .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::createCyclingListController4Enum) .build()) - .option(Option.<ConfigModel.Alignment>createBuilder() + .option(Option.<SkyblockerConfig.Alignment>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.alignment")) .binding(defaults.general.titleContainer.alignment, () -> config.general.titleContainer.alignment, diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java index 640bc5e6..8c3189ee 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/LocationsCategory.java @@ -6,12 +6,12 @@ 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.ConfigModel; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.text.Text; public class LocationsCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.locations")) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java index d73a38ba..5fc5a808 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/MessageFilterCategory.java @@ -5,13 +5,13 @@ 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.ConfigModel; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.config.ConfigUtils; import net.minecraft.text.Text; public class MessageFilterCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.messages")) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java index 831efa07..4ca38375 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/QuickNavigationCategory.java @@ -6,12 +6,12 @@ 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.ConfigModel; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.text.Text; public class QuickNavigationCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.quickNav")) diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java b/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java index f7f1886b..bfb3c6ad 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/categories/SlayersCategory.java @@ -8,12 +8,12 @@ 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.ConfigModel; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.text.Text; public class SlayersCategory { - public static ConfigCategory create(ConfigModel defaults, ConfigModel config) { + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.slayer")) |