Polyfrost / OneConfig

Next generation configuration library for Minecraft
https://polyfrost.org/projects/oneconfig
Other
217 stars 23 forks source link

OneConfig not saving settings #320

Closed DylanBruner closed 5 months ago

DylanBruner commented 5 months ago

Original reporter & ticket id

No response

Category

Backend

Bug description

I've been using the oneconfig demo mod as a base for my mod for a while now. But recently i'm getting this error over and over and it's not saving the users settings.

[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]: java.lang.IllegalArgumentException: class java.text.Format$Field declares multiple JSON fields named serialVersionUID
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:52)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:82)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:81)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:118)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.getAdapter(Gson.java:356)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.toJson(Gson.java:585)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.toJson(Gson.java:572)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.toJson(Gson.java:527)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at com.google.gson.Gson.toJson(Gson.java:507)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at cc.polyfrost.oneconfig.config.Config.save(Config.java:167)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at cc.polyfrost.oneconfig.internal.config.core.ConfigCore.saveAll(ConfigCore.java:45)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[10:12:28] [pool-7-thread-1/INFO] (STDERR) [cc.polyfrost.oneconfig.config.Config:save:169]:     at java.lang.Thread.run(Thread.java:748)

Steps to reproduce

mod list: OneConfig, my mod loader: forge version: 1.8.9

clone the example mod and make changes to the config.

Anything else?

No response

nextdayy commented 5 months ago

this is most probably caused by you attempting to save an object which is not directly serializable. Could you share your config class?

DylanBruner commented 5 months ago

Unless I'm stupid I'm not trying to save anything crazy.

@SuppressWarnings("unused")
public class Config extends cc.polyfrost.oneconfig.config.Config {
    @Dropdown(
            name = "Selected Helper",
            options = {"None", "Tiny Dancer", "Fishing Helper", "A/D Macro", "Cactus Macro",
                       "Cane Macro", "Coco Macro", "Mushroom Macro", "Pumpkin/Melon Macro", "Auto F11",
                       "AFK Helper", "Dynamic Macro", "Mithril Macro"},
            size = OptionSize.DUAL
    )
    public static int MacroCore_SelectedMacro = 0;

    @Switch(name = "Disable Mouse", category = "General", description = "Disable the mouse when using a macro (prevents mouse snapping/miss-inputs)")
    public static boolean General_DisableMouse = false;

    // HUD Config =======================================================================================================
    @HUD(name = "Active Pet", category = "Hud")
    public ActivePet activePetDisplay = new ActivePet();

    // Failsafe =========================================================================================================
    public static boolean FailSafe_Enabled = true; // left here for compatibility

    @Header(text = "Discord Notification", category = "Failsafe", size = OptionSize.DUAL)
    public static boolean ignored;

    @Switch(name = "Enabled", category = "Failsafe")
    public static boolean FailSafe_DiscordEnabled = true;

    @Text(name = "Webhook", category = "Failsafe", placeholder = "https://discordapp.com/api/webhooks/...", size=2)
    public static String FailSafe_DiscordWebhook = "";

    @Header(text = "Response Time", category = "Failsafe")
    public static boolean ignored2;

    @Slider(name = "Minimum (ms)", category = "Failsafe", min = 0, max = 10_000)
    public static int FailSafe_MinResponseTime = 3000;

    @Slider(name = "Maximum (ms)", category = "Failsafe", min = 0, max = 10_000)
    public static int FailSafe_MaxResponseTime = 5000;

    @Header(text = "Triggers", category = "Failsafe", size = OptionSize.DUAL)
    public static boolean ignored3;

    @Switch(name = "World Unload", category = "Failsafe")
    public static boolean FailSafe_WorldUnload = true;

    @Switch(name = "Position Change", category = "Failsafe")
    public static boolean FailSafe_Movement = true;

    @Switch(name = "Yaw/Pitch Change", category = "Failsafe")
    public static boolean FailSafe_CameraMovement = true;

    @Switch(name = "Slot Change", category = "Failsafe")
    public static boolean FailSafe_SlotChange = true;

    @Switch(name = "Open Container", category = "Failsafe")
    public static boolean FailSafe_OpenContainer = true;

    @Switch(name = "Rotation Packet", category = "Failsafe")
    public static boolean FailSafe_RotationPacket = true;

    @Switch(name = "Teleport", category = "Failsafe")
    public static boolean FailSafe_Teleport = true;

    @Switch(name = "Captcha", category = "Failsafe", description = "If a captcha is detected stop the macro")
    public static boolean FailSafe_Captcha = true;

    @Header(text = "Player Detection", category = "Failsafe", size = OptionSize.DUAL)
    public static boolean ignored7;

    @Switch(name = "Enabled", category = "Failsafe")
    public static boolean FailSafe_PlayerDetection = false;

    @DualOption(name = "Reaction", category = "Failsafe", left = "Instant", right = "Delayed")
    public static boolean FailSafe_PlayerDetectionReaction = true;

    @Slider(name = "Range", category = "Failsafe", min = 0, max = 100)
    public static int FailSafe_PlayerDetectionRange = 20;

    @Switch(name = "Sex Stop", category = "Failsafe", description = "If a player enters you stop the macro")
    public static boolean FailSafe_PlayerDetectionSexStop = true;

    @Switch(name = "Warp out", category = "Failsafe", description = "Warp out if a player is detected (respects reaction type)")
    public static boolean FailSafe_PlayerDetectionWarpOut = false;

    // Cheats ===========================================================================================================
    @Switch(name = "True Sight", category = "Cheats", subcategory = "Render", description = "See invisible entities", size = OptionSize.DUAL)
    public static boolean TrueSight_Enabled = false;

    @Switch(name = "All Mob ESP", category = "Cheats", subcategory = "Render", description = "Wall Hacks")
    public static boolean AllMobESP_Enabled = false;

    @Switch(name = "20 Gift ESP", category = "Cheats", subcategory = "Render", description = "ESP for the 20 gifts needed on Jerry's Workshop")
    public static boolean GiftESP_Enabled = true;

    @Color(name = "", category = "Cheats", subcategory = "Render", allowAlpha = false, description = "The color for ESP")
    public static OneColor AllMobESP_Color = new OneColor(255, 0, 0);

    @Slider(name = "ESP Width", category = "Cheats", subcategory = "Render", description = "The box width for ESP", min = 1, max = 25)
    public static int ESP_Width = 3;

    @Header(text = "Left Click", category = "Cheats", subcategory = "Auto Clicker")
    public static boolean ignored1;

    @Switch(name = "Enabled", category = "Cheats", subcategory = "Auto Clicker")
    public static boolean AutoClicker_LeftClick = true;

    @Slider(name = "CPS", category = "Cheats", subcategory = "Auto Clicker", min = 1, max = 15)
    public static int AutoClicker_LeftClickCPS = 10;

    @Text(name = "Items", category = "Cheats", subcategory = "Auto Clicker", placeholder = "Hyperion, Aspect of the End")
    public static String AutoClicker_LeftClickBlacklist = "";

    @DualOption(name = "Mode", category = "Cheats", subcategory = "Auto Clicker", left = "Blacklist", right = "Whitelist")
    public static boolean AutoClicker_LeftClickMode = false;

    @Header(text = "Right Click", category = "Cheats", subcategory = "Auto Clicker")
    public static boolean ignored6;

    @Switch(name = "Enabled", category = "Cheats", subcategory = "Auto Clicker")
    public static boolean AutoClicker_RightClick = true;

    @Slider(name = "CPS", category = "Cheats", subcategory = "Auto Clicker", min = 1, max = 15)
    public static int AutoClicker_RightClickCPS = 10;

    @Text(name = "Items", category = "Cheats", subcategory = "Auto Clicker", placeholder = "Hyperion, Aspect of the End")
    public static String AutoClicker_RightClickBlacklist = "";

    @DualOption(name = "Mode", category = "Cheats", subcategory = "Auto Clicker", left = "Blacklist", right = "Whitelist")
    public static boolean AutoClicker_RightClickMode = false;

    // Tweaks ===========================================================================================================
    @Button(name = "Unlock NEU Dev", text = "Unlock", category = "Tweaks", description = "Adds your UUID to the NEU Dev list")
    Runnable runnable = UnlockNeu::unlock;

    // Farming ==========================================================================================================
    @Header(text = "Garden", category = "Farming", size = OptionSize.DUAL)
    public static boolean ignored12;

    @Switch(name = "Pest ESP", category = "Farming", description = "Wall Hacks")
    public static boolean PestESP_Enabled = false;

    @Color(name = "", category = "Farming", allowAlpha = false, description = "The color for ESP")
    public static OneColor PestESP_Color = new OneColor(255, 0, 0);

    @Switch(name = "Pest Tracers", category = "Farming", description = "Tracer to pest")
    public static boolean PestTracers_Enabled = false;

    @Color(name = "", category = "Farming", allowAlpha = false, description = "The color for ESP")
    public static OneColor PestTracers_Color = new OneColor(255, 0, 0);

    @Header(text = "Quick Death", category = "Farming", size = OptionSize.DUAL)
    public static boolean ignored8;

    @Switch(name = "Enabled", category = "Farming", size = OptionSize.DUAL)
    public static boolean Farming_QuickDeath = true;

    @Slider(name = "Distance", category = "Farming", min = 1, max = 10)
    public static int Farming_QuickDeathDistance = 3;

    @Switch(name = "Pelt ESP", subcategory = "Pelt QOL", category = "Farming")
    public static boolean Pelt_ESP = false;

    @Switch(name = "Pelt Tracers", subcategory = "Pelt QOL", category = "Farming")
    public static boolean Pelt_Tracers = false;

    @Switch(name = "Auto Warp Trapper", category = "Farming", subcategory = "Pelt QOL", description = "Automatically warp to the trapper after killing a mob")
    public static boolean Pelt_AutoWarpTrapper = false;

    @Switch(name = "Auto Accept Task", category = "Farming", subcategory = "Pelt QOL", description = "Automatically accept a task")
    public static boolean Pelt_AutoAcceptTask = false;

    // Custom Farming Strings ===========================================================================================
    @Button(name = "Web Editor", text = "Open", category = "Farming Overrides", description = "Click to create macros", size = OptionSize.DUAL)
    private static Runnable HelpButton = () -> {
        modMessage("Yeah this don't do shit yet!"); // TODO: Make this open a web blocks editor for the macros
    };

    @Text(name = "ADMacro", category = "Farming Overrides")
    public static String Custom_FarmingAD = "";

    @Text(name = "Cactus Macro", category = "Farming Overrides")
    public static String Custom_CactusMacro = "";

    @Text(name = "Cane Macro", category = "Farming Overrides")
    public static String Custom_CaneMacro = "";

    @Text(name ="Coco Macro", category = "Farming Overrides")
    public static String Custom_CocoMacro = "";

    @Text(name = "Mushroom Macro", category = "Farming Overrides")
    public static String Custom_MushroomMacro = "";

    @Text(name = "Pumpkin/Melon Macro", category = "Farming Overrides")
    public static String Custom_PumpkinMelonMacro = "";

    // Dungeons QOL =====================================================================================================
    @Switch(name = "Starred Mob ESP", category = "Dungeons", description = "Wall Hacks")
    public static boolean StarredMobESP_Enabled = false;

    @Switch(name = "Starred Mob Tracers", category = "Dungeons")
    public static boolean StarredMobTracers_Enabled = false;

    @Color(name = "Mob Color", category = "Dungeons", allowAlpha = false, description = "The color for ESP")
    public static OneColor StarredMobESP_Color = new OneColor(java.awt.Color.ORANGE);

    @Color(name = "Mini Color", category = "Dungeons", allowAlpha = false, description = "The color for ESP")
    public static OneColor StarredMobESP_MiniColor = new OneColor(java.awt.Color.MAGENTA);

    @Switch(name = "Auto Close Secret Chests", category = "Dungeons", description = "Automatically close secret chests")
    public static boolean AutoCloseSecretChests_Enabled = false;

    // Slayer ===========================================================================================================
    @Switch(name = "Slayer Spawn Alert", category = "Slayer", description = "Alerts you when any slayer boss spawns")
    public static boolean SlayerSpawnAlert_Enabled = false;

    @Switch(name = "Summon Saver", category = "Slayer", description = "Automatically despawn summons when they are about to die")
    public static boolean SummonSaver_Enabled = false;

    @Switch(name = "Slayer ESP", category = "Slayer", subcategory = "Render", description = "Wall Hacks")
    public static boolean SlayerESP_Enabled = false;

    @Color(name = "", category = "Slayer", subcategory = "Render", allowAlpha = false, description = "The color for ESP")
    public static OneColor SlayerESP_Color = new OneColor(255, 0, 0);

    @Switch(name = "Slayer mini-boss ESP", category = "Slayer", subcategory = "Render", description = "Wall Hacks")
    public static boolean SlayerMiniBossESP_Enabled = false;

    @Color(name = "", category = "Slayer", subcategory = "Render", allowAlpha = false, description = "The color for ESP")
    public static OneColor SlayerMiniBossESP_Color = new OneColor(255, 255, 153);

    @Switch(name = "Auto Dagger", category = "Slayer", subcategory = "Blaze Slayer", description = "Automatically switch to the correct dagger")
    public static boolean BlazeSlayerAssistant_AutoDagger = false;

    @Switch(name = "Auto Veil", category = "Slayer", subcategory = "Blaze Slayer", description = "Automatically cloak to avoid pillars")
    public static boolean BlazeSlayerAssistant_AutoVeil = false;

    // Fishing Helper Config ============================================================================================
    @Switch(name = "Rod Smacking", category = "Fishing Helper", subcategory = "Options", description = "Smack the rod like a player")
    public static boolean FishingHelper_AutoSmackRod = true;

    @Switch(name = "Shift", category = "Fishing Helper", subcategory = "Options", description = "Shift randomly like a player")
    public static boolean FishingHelper_AutoShift = true;

    @Switch(name = "Idle Cast", category = "Fishing Helper", subcategory = "Options", description = "Cast if there was no bobber in the last 5 seconds")
    public static boolean FishingHelper_IdleCast = true;

    @Slider(name = "Reel Delay (s)", category = "Fishing Helper", subcategory = "Options", min = 0, max = 60)
    public static int FishingHelper_AutoWiggleReelDelay = 0;

    @Header(text = "Wiggle", category = "Fishing Helper", subcategory = "Options", size = OptionSize.DUAL)
    public static boolean ignored4;

    @Switch(name = "Enabled", category = "Fishing Helper", subcategory = "Options", description = "Anti-macro wiggle bypass")
    public static boolean FishingHelper_AutoWiggle = true;

    @Switch(name = "Mouse Break", category = "Fishing Helper", subcategory = "Options", description = "Stop any wiggle if the mouse is moved")
    public static boolean FishingHelper_AutoWiggleMouseBreak = true;

    @Header(text = "Auto Kill", category = "Fishing Helper", subcategory = "Options", size = OptionSize.DUAL)
    public static boolean ignored5;

    @Switch(name = "Enabled", category = "Fishing Helper", subcategory = "Options", description = "Will automatically kill Lava Flames")
    public static boolean FishingHelper_AutoKill = true;

    @Text(name = "Item", category = "Fishing Helper", subcategory = "Options", placeholder = "Hyperion")
    public static String FishingHelper_AutoKillItem = "Hyperion";

    @Slider(name = "Clicks", category = "Fishing Helper", subcategory = "Options", min = 1, max = 15)
    public static int FishingHelper_AutoKillClicks = 5;

    // Mining ===========================================================================================================
    @Header(text = "Crystal Hollows", category = "Mining", size = OptionSize.DUAL)
    public static boolean ignored10;

    @Switch(name = "Chest ESP", category = "Mining", description = "Wall Hacks")
    public static boolean ChestESP_Enabled = false;

    @Color(name = "", category = "Mining", allowAlpha = false, description = "The color for ESP")
    public static OneColor ChestESP_Color = new OneColor(255, 0, 0);

    @Slider(name = "Range", category = "Mining", min = 1, max = 30)
    public static int ChestESP_Range = 25;

    @Header(text = "Mining Macro", category = "Mining", size = OptionSize.DUAL)
    public static boolean ignored9;

    @Slider(name = "Speed", category = "Mining", min = 5, max = 35)
    public static int MithrilMacro_Speed = 15;

    @Switch(name = "Shift", category = "Mining", description = "Hold down shift")
    public static boolean MithrilMacro_Shift = false;

    @Header(text = "Mining Macro - Targets", category = "Mining", size = OptionSize.DUAL)
    public static boolean ignored11;

    @Switch(name = "Only Ores", category = "Mining", description = "Only mine ores")
    public static boolean MithrilMacro_OnlyOres = false;

    @Switch(name = "Include Ores", category = "Mining", description = "Include ores")
    public static boolean MithrilMacro_IncludeOres = false;

    @Switch(name = "Ignore Titanium", category = "Mining", description = "Ignore titanium")
    public static boolean MithrilMacro_IgnoreTitanium = false;

    @Switch(name = "Enabled", category = "Mining", subcategory = "Auto Powder Swap")
    public static boolean AutoPowderSwap_Enabled = false;

    @Text(name = "Powder Drill", category = "Mining", subcategory = "Auto Powder Swap", placeholder = "Jasper Drill X")
    public static String AutoPowderSwap_PowderDrill = "";

    // Incognito ========================================================================================================
    @Switch(name = "Hide Important Information", category = "Incognito", description = "Hide revealing information")
    public static boolean Incognito_HideImportantInformation = false;

    @Switch(name = "Hide Scoreboard", category = "Incognito", description = "Hide the scoreboard")
    public static boolean Incognito_HideScoreboard = false;

    @Switch(name = "Hide Mod Message", category = "Incognito", description = "Hide NotAMacro messages")
    public static boolean Incognito_modMessage = false;

    public Config() {
        super(new Mod(NotAMacro.NAME, ModType.UTIL_QOL, "/logo.png", 170, 170), NotAMacro.MODID + ".json");

        initialize();

        addDependency("Farming_QuickDeathDistance", "Farming_QuickDeath");

        // disable auto kill options if auto kill is disabled
        addDependency("FishingHelper_AutoKillItem", "FishingHelper_AutoKill");
        addDependency("FishingHelper_AutoKillClicks", "FishingHelper_AutoKill");

        // disable mouse break if auto wiggle is disabled
        addDependency("FishingHelper_AutoWiggleMouseBreak", "FishingHelper_AutoWiggle");

        // disable left click options if left click is disabled
        addDependency("AutoClicker_LeftClickCPS", "AutoClicker_LeftClick");
        addDependency("AutoClicker_LeftClickBlacklist", "AutoClicker_LeftClick");
        addDependency("AutoClicker_LeftClickMode", "AutoClicker_LeftClick");

        // disable right click options if right click is disabled
        addDependency("AutoClicker_RightClickCPS", "AutoClicker_RightClick");
        addDependency("AutoClicker_RightClickBlacklist", "AutoClicker_RightClick");
        addDependency("AutoClicker_RightClickMode", "AutoClicker_RightClick");

        // disable the discord webhook if discord notifications are disabled
        addDependency("FailSafe_DiscordWebhook", "FailSafe_DiscordEnabled");

        // disable reaction type, warp out, sex stop and range if player detection is disabled
        addDependency("FailSafe_PlayerDetectionSexStop", "FailSafe_PlayerDetection");
        addDependency("FailSafe_PlayerDetectionReaction", "FailSafe_PlayerDetection");
        addDependency("FailSafe_PlayerDetectionWarpOut", "FailSafe_PlayerDetection");
        addDependency("FailSafe_PlayerDetectionRange", "FailSafe_PlayerDetection");

        // disable sex stop if reaction is instant or player detection is disabled
        addDependency("FailSafe_PlayerDetectionSexStop", "FailSafe_PlayerDetectionReaction");

        // if all mob esp & starred mob esp & all mob esp are disabled disable esp width and color
        addDependency("ESP_Width", "ESP Enabled", () -> AllMobESP_Enabled || StarredMobESP_Enabled || PestESP_Enabled);

        addDependency("ESP_Color", "ESP Enabled", () -> AllMobESP_Enabled || StarredMobESP_Enabled || PestESP_Enabled);

        // disabled features =================================================================================================
        addDependency("SlayerSpawnAlert_Enabled", "Work In Progress", () -> false);
        SlayerSpawnAlert_Enabled = false;

        addDependency("BlazeSlayerAssistant_AutoVeil", "Work In Progress", () -> false);
        BlazeSlayerAssistant_AutoVeil = false;
    }
}
nextdayy commented 5 months ago

okay, thank you. most likely, the issue is caused by your HUD class. For any field you do not want saved in that class, you need to either add the transient modifier or add the @Exclude annotation to the field.

this is caused by default behaviour we plan to change, which is that it will attempt to saved any field unless told otherwise. In future versions, only fields explicitly marked will be saved.