package io.github.moulberry.notenoughupdates.options; import com.google.gson.*; import io.github.moulberry.notenoughupdates.dungeons.GuiDungeonMapEditor; import io.github.moulberry.notenoughupdates.GuiEnchantColour; import io.github.moulberry.notenoughupdates.NEUOverlayPlacements; import io.github.moulberry.notenoughupdates.NotEnoughUpdates; import io.github.moulberry.notenoughupdates.util.Utils; import net.minecraft.client.Minecraft; import java.awt.*; import java.io.*; import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Options { /** * Ok, I'll be honest. I wrote this class without looking too much in to how to make proper serializable * variables with defaults values/etc. It works. I'm happy. */ public static final transient int FLAG_COLOUR = 0b1; public static final transient int FLAG_INT = 0b10; public static final int CAT_ALL = 0; public static final int CAT_MISC = 1; public static final int CAT_FEATURES = 2; public static final int CAT_SLIDERS = 3; public static final int CAT_COLOURS = 4; public Option enableItemEditing = new Option( false, "Enable Item Editing", true, "Dev Feature.", CAT_ALL); public Option onlyShowOnSkyblock = new Option( true, "Only Show On Skyblock", false, "NEU Overlay only appears when you are playing Skyblock.", CAT_MISC); public Option showVanillaItems = new Option( true, "Show Vanilla Items", false, "Shows vanilla items in the itemlist.", CAT_MISC); public Option hidePotionEffect = new Option( true, "Hide Potion Effects", false, "Potion effects are hidden in the inventory GUI. Contrib: All the gamers that play on GUI AUTO", CAT_MISC); public Option showQuickCommands = new Option( true, "Quick Commands", false, "Shows QuickCommands\u2122 above search bar.", CAT_FEATURES); public Option showUpdateMsg = new Option( true, "Show Update Notifs", false, "Shows update messages if NEU is out-of-date.", CAT_MISC); public Option tooltipBorderColours = new Option( true, "Coloured Tooltip Borders", false, "Makes the border of tooltips coloured. (Only NEU Tooltips)", CAT_MISC); public Option disableAhScroll = new Option( false, "No NeuAH Scroll", false, "Disables Scrolling in NeuAH", CAT_MISC); public Option advancedPriceInfo = new Option( false, "Adv. Item Price Info", false, "Shows some extra information about item prices.", CAT_MISC); public Option cacheRenderedItempane = new Option( true, "Cache Itempane", false, "Caches the drawn itempane, drastically improving performance. Animated textures will not work.", CAT_MISC); public Option streamerMode = new Option( false, "Streamer Mode", false, "Hides or randomises some stuff on your screen to prevent sniping", CAT_MISC); public Option disableTreecapOverlay = new Option( false, "Disable Treecap Overlay", false, "Disables the treecapitator overlay effect", CAT_FEATURES); public Option disableWandOverlay = new Option( false, "Disable Builder's Wand Overlay", false, "Disables the builder's wand overlay effect", CAT_FEATURES); public Option wandBlockCount = new Option( true, "Builder's Wand Block Count", false, "If true, will show how many blocks you have remaining when holding a builder's wand.", CAT_MISC); public Option hideApiKey = new Option( false, "Hide Apikey Setting", false, "Hides the Apikey setting (please try not to leak Apikey if you're recording)", CAT_MISC); public Option bgBlurFactor = new Option( 5.0, "Background Blur", false, "Changes the strength of pane background blur. 0-50.", 0, 50, CAT_SLIDERS); public Option apiKey = new Option( "", "Api Key", false, "Type /api new to receive key and put it here.", CAT_MISC); public Option autoupdate = new Option( true, "Automatically Update Items", false, "If true, updated items will automatically download from the remote repository when you start the game. \nHIGHLY RECOMMENDED.", CAT_MISC); public Option quickcommandMousePress = new Option( false, "QuickCommand on Mouse Press", false, "If true, quickcommands will trigger on mouse down instead of mouse up.", CAT_MISC); public Option disableItemTabOpen = new Option( false, "No Tab Open", false, "If True, moving your mouse to the item tab on the right side won't open the itempane.", CAT_MISC); public Option keepopen = new Option( false, "Keep Itempane Open", false, "If true, the itempane will stay open after the gui is closed.", CAT_MISC); public Option itemStyle = new Option( true, "Circular Item Style", false, "Uses the circular item background style instead of the square style. Contrib: Calyps0", CAT_MISC); public Option hideEmptyPanes = new Option( true, "Hide GUI Filler Tooltips", false, "Hides the tooltip of glass panes in skyblock GUIs. Contrib: ThatGravyBoat", CAT_MISC); public Option guiButtonClicks = new Option( true, "Button Click Sounds", false, "Plays a click sound whenever various NEU GUIs are interacted with", CAT_MISC); public Option dungeonProfitLore = new Option( false, "Dungeon Profit in Lore", false, "If true, will show the dungeon profit on the tooltip of the 'reward chest' instead of as a GUI.", CAT_MISC); public Option auctionPriceInfo = new Option( true, "Price Info in Auction Lore", false, "If true, will show price information about an item inside the auction house item tooltip.", CAT_MISC); public Option useCustomTrade = new Option( true, "Custom Trade", false, "If true, uses the custom trade window for skyblock trades.", CAT_FEATURES); public Option invBazaarPrice = new Option( false, "Show Bazaar Price In Inventory", false, "If true, shows the bazaar price for the item you hover in your inventory.", CAT_MISC); public Option invAuctionPrice = new Option( false, "Show Auction Price In Inventory", false, "If true, shows the auction price for the item you hover in your inventory.", CAT_MISC); public Option dungeonBlocksEverywhere = new Option( false, "Show Dungeon Block Overlay Everywhere", false, "If true, will show the overlay for cracked bricks, etc. even when not in dungeons.", CAT_MISC); public Option disableDungeonBlocks = new Option( true, "Disable the dungeon blocks feature", false, "If true, the dungeon block overlay will be disabled. WARNING: May cause memory/fps issues on some machines", CAT_FEATURES); public Option slowDungeonBlocks = new Option( false, "Slowly Update Dungeon Block Textures", false, "If true, dungeon blocks will only update once every second.\n" + "Use this option if you are having performance\n" + "issues relating to the dungeon blocks.", CAT_MISC); public Option missingEnchantList = new Option( true, "Missing Enchant List", false, "If true, will show enchants that are missing on an enchanted item when LSHIFT is pressed.", CAT_FEATURES); public Option neuAuctionHouse = new Option( false, "NEU Auction House", false, "Enables the auction house which can be found using /neuah.\n" + "Don't enable this option unless you use /neuah\n" + "You *may* need to restart after enabling this for the auctions to download properly", CAT_FEATURES); public Option eventNotifications = new Option( true, "Skyblock Event Notifications", false, "Notifies you 5m (default) before and when favourited events (/neucalendar) start.", CAT_FEATURES); public Option showEventTimerInInventory = new Option( true, "Event Timer In Inventory", false, "Will show how long until the next event starts at the top of your inventory", CAT_FEATURES); public Option eventNotificationSounds = new Option( true, "Skyblock Event Notification Sounds", false, "Will play a sounds whenever a favourited event starts.", CAT_MISC); public Option spookyMorningNotification = new Option( true, "Spooky Festival Morning Notification", false, "During a spooky festival, will notify the player whenever it hits 7am", CAT_MISC); public Option accessoryBagOverlay = new Option( true, "Accessory Bag Overlay", false, "If true, will an overlay with useful information in your accessory bag.", CAT_FEATURES); public Option rodColours = new Option( true, "Custom Rod Line Colours", false, "If true, will use custom colours for fishing line rods in skyblock.", CAT_FEATURES); public Option paneGuiScale = new Option( 0.0, "Pane GUI Scale", false, "Changes the GUI scale of the item pane. 0 = use game default. 1-4 = scale", FLAG_INT, 0, 4, CAT_SLIDERS); public Option paneWidthMult = new Option( 1.0, "Pane Width", false, "Changes how wide the item and info panes are. Value between 0.5-1.5.", 0.5, 1.5, CAT_SLIDERS); public Option smoothAoteMillis = new Option( 175.0, "Smooth AOTE Milliseconds", false, "How long teleporting with the AOTE takes. 0 = disable.", 0, 300, CAT_SLIDERS); public Option itemHighlightOpacity = new Option( 178.0, "Item Highlight Opacity", false, "Changes the opacity of item highlights. Value between 0-255.", 0, 255, CAT_SLIDERS); public Option panePadding = new Option( 10.0, "Pane Padding", false, "Changes the padding of the panes. Value between 0-20.", 0, 20, CAT_SLIDERS); public Option ahNotification = new Option( 2.0, "AH Notification (Mins, 0 = off)", false, "Minutes before AH ends to notify. 0-10.", 0, 10, CAT_SLIDERS); public Option tooltipBorderOpacity = new Option( 200.0, "Coloured Tooltip Border Opacity", false, "Coloured tooltips only apply to tooltips in my GUIs. Value between 0-255.", 0, 255, CAT_SLIDERS); public Option dynamicMenuBackgroundStyle = new Option( 1.0, "SBMenu Background Style", false, "Style of the background used for the skyblock menu.", 0, 10, CAT_FEATURES); public Option dynamicMenuButtonStyle = new Option( 1.0, "SBMenu Button Style", false, "Style of the buttons used for the skyblock menu.", 0, 10, CAT_FEATURES); public Option dungeonWinMillis = new Option( 5000.0, "Dungeon Victory Screen Millis", false, "Changes how long the victory screen at the end of dungeons appears for. 0 = off", FLAG_INT, 0, 15000, CAT_SLIDERS); public Option eventNotificationBeforeSeconds = new Option( 300.0, "Event Notification Before Seconds", false, "Changes how long before skyblock events will the 'starting in' notification show. 0 = off", FLAG_INT, 0, 1800, CAT_SLIDERS); public Option itemBackgroundColour = new Option( "00:255:100:100:100", "Item BG Colour", false, "Item BG Colour", FLAG_COLOUR, CAT_COLOURS); public Option itemFavouriteColour = new Option( "00:255:200:150:50", "Item BG Favourite Colour", false, "Item BG Favourite Colour", FLAG_COLOUR, CAT_COLOURS); public Option paneBackgroundColour = new Option( "15:6:0:0:255", "Pane Background Colour", false, "Pane Background Colour", FLAG_COLOUR, CAT_COLOURS); public Option treecapOverlayColour = new Option( "00:50:64:224:208", "Treecapitator Overlay Colour", false, "Treecapitator Overlay Colour", FLAG_COLOUR, CAT_COLOURS); public Option wandOverlayColour = new Option( "00:50:64:224:208", "Builder's Wand Overlay Colour", false, "Builder's Wand Overlay Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungCrackedColour = new Option( "0:252:7:255:217", "Dungeon Cracked Brick Colour", false, "Dungeon Cracked Brick Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungDispenserColour = new Option( "0:255:255:76:0", "Dungeon Dispenser Colour", false, "Dungeon Dispenser Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungLeverColour = new Option( "0:252:24:249:255", "Dungeon Lever Colour", false, "Dungeon Lever Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungTripWireColour = new Option( "0:255:255:0:0", "Dungeon Trip Wire Colour", false, "Dungeon Trip Wire Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungChestColour = new Option( "0:255:0:163:36", "Dungeon Chest Colour", false, "Dungeon Chest Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungTrappedChestColour = new Option( "0:255:0:163:36", "Dungeon Trapped Chest Colour", false, "Dungeon Trapped Chest Colour", FLAG_COLOUR, CAT_COLOURS); public Option dungBatColour = new Option( "0:255:12:255:0", "Dungeon Bat Colour", false, "Dungeon Bat Colour", FLAG_COLOUR, CAT_COLOURS); public Option selfRodLineColour = new Option( "0:255:0:0:0", "Your Rod Line Colour", false, "Changes the colour of your rod's fishing line.\nContrib: ThatGravyBoat", FLAG_COLOUR, CAT_COLOURS); public Option otherRodLineColour = new Option( "0:255:0:0:0", "Other Rod Line Colour", false, "Changes the colour of other players' rod's fishing line.\nContrib: ThatGravyBoat", FLAG_COLOUR, CAT_COLOURS); /** * OPTIONS THAT DON'T SHOW IN GUI */ public Option dev = new Option( false, "Show Dev Options", true, "Dev Feature. Please don't use.", CAT_ALL); public Option loadedModBefore = new Option( false, "loadedModBefore", true, "loadedModBefore", CAT_ALL); public Option doRamNotif = new Option( true, "doRamNotif", false, "doRamNotif", CAT_ALL); public Option customTradePrices = new Option( true, "Trade Item Values", true, "If true, shows a window with the total item value of either side", CAT_ALL); public Option customTradePriceStyle = new Option( true, "Trade Prices Style", true, "Changes the style of the top item prices", CAT_ALL); public Option selectedCape = new Option( "", "Selected Cape", true, "Selected Cape", CAT_ALL); public Option compareMode = new Option( 0.0, "Compare Mode", false, "Compare Mode", CAT_ALL); public Option sortMode = new Option( 0.0, "Sort Mode", false, "Sort Mode", CAT_ALL); public Option> compareAscending = new Option( Utils.createList(true, true, true), "Compare Ascending", false, "Compare Ascending", CAT_ALL); public Option> favourites = new Option( new ArrayList(), "Favourites", false, "Favourites", CAT_ALL); public Option> eventFavourites = new Option( new ArrayList(), "Event Favourites", false, "Event Favourites", CAT_ALL); public Option>> collectionLog = new Option( new HashMap>(), "CollectionLog", false, "CollectionLog", CAT_ALL); public Option> quickCommands = new Option( createDefaultQuickCommands(), "Quick Commands", false, "Quick Commands", CAT_ALL); public Option overlaySearchBar = new Option( "", "OverlaySearchBar", false, "OverlaySearchBar", CAT_ALL); public Option overlayQuickCommand = new Option( "", "OverlaySearchBar", false, "OverlaySearchBar", CAT_ALL); public Option> enchantColours = new Option( Utils.createList("[a-zA-Z\\- ]+:\u003e:9:6", "[a-zA-Z\\- ]+:\u003e:6:c", "[a-zA-Z\\- ]+:\u003e:5:5", "Experience:\u003e:3:5", "Life Steal:\u003e:3:5", "Scavenger:\u003e:3:5", "Looting:\u003e:3:5"), "enchantColours", false, "enchantColours", CAT_ALL); //Dungeon Map Options public Option dmBorderSize = new Option( 1.0, "Border Size", false, "Changes the size of the map border, without changing the size of the contents", 0, 5, CAT_ALL); public Option dmRoomSize = new Option( 1.0, "Room Size", false, "Changes the size of rooms. Useful for higher dungeons with larger maps", 0, 5, CAT_ALL); public Option dmIconScale = new Option( 1.0, "Icon Size", false, "Changes the scale of room indicators and player icons", 0.5, 3, CAT_ALL); public Option dmBorderStyle = new Option( 0.0, "Border Style", false, "Various custom borders from various talented artists.\nUse 'custom' if your texture pack has a custom border", CAT_ALL); public Option dmEnable = new Option( true, "Show Dungeon Map", false, "Show/hide the NEU dungeon map", CAT_ALL); public Option dmCenterPlayer = new Option( false, "Map Center", false, "Center on rooms, or center on your player", CAT_ALL); public Option dmRotatePlayer = new Option( true, "Rotate with Player", false, "Rotate the map to face the same direction as your player", CAT_ALL); public Option dmOrientCheck = new Option( true, "Orient Checkmarks", false, "Checkmarks will always show vertically, regardless of rotation", CAT_ALL); public Option dmCenterCheck = new Option( false, "Center Checkmarks", false, "Checkmarks will show closer to the center of rooms", CAT_ALL); public Option dmPlayerHeads = new Option( 0.0, "Player Icon Style", false, "Various player icon styles", CAT_ALL); public Option dmPlayerInterp = new Option( true, "Interpolate Far Players", false, "Will make players far away move smoothly", CAT_ALL); public Option dmCompat = new Option( 0.0, "OpenGL Compatibility", false, "Compatiblity options for people with bad computers. ONLY use this if you know what you are doing, otherwise the map will look worse", CAT_ALL); public Option dmBackgroundColour = new Option( "00:170:75:75:75", "Background Colour", false, "Colour of the map background. Supports opacity & chroma", FLAG_COLOUR, CAT_ALL); public Option dmBorderColour = new Option( "00:0:0:0:0", "Border Colour", false, "Colour of the map border. Supports opacity & chroma. Turn off custom borders to see", FLAG_COLOUR, CAT_ALL); public Option dmChromaBorder = new Option( false, "Chroma Border Mode", false, "Applies a hue offset around the map border", CAT_ALL); public Option dmBackgroundBlur = new Option( 3.0, "Background Blur Factor", false, "Changes the blur factor behind the map. Set to 0 to disable blur", CAT_ALL); public Option dmCenterX = new Option( 8.5, "Center X (%)", false, "The horizontal position of the map", CAT_ALL); public Option dmCenterY = new Option( 15.0, "Center Y (%)", false, "The vertical position of the map", CAT_ALL); private ArrayList createDefaultQuickCommands() { ArrayList arr = new ArrayList<>(); arr.add("/warp home:Warp Home:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="); arr.add("/warp hub:Warp Hub:eyJ0aW1lc3RhbXAiOjE1NTkyMTU0MTY5MDksInByb2ZpbGVJZCI6IjQxZDNhYmMyZDc0OTQwMGM5MDkwZDU0MzRkMDM4MzFiIiwicHJvZmlsZU5hbWUiOiJNZWdha2xvb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Q3Y2M2Njg3NDIzZDA1NzBkNTU2YWM1M2UwNjc2Y2I1NjNiYmRkOTcxN2NkODI2OWJkZWJlZDZmNmQ0ZTdiZjgifX19"); arr.add("/craft:Crafting Table:CRAFTING_TABLE"); arr.add("/enderchest:Ender Chest:ENDER_CHEST"); arr.add("/wardrobe:Wardrobe:LEATHER_CHESTPLATE"); arr.add("/pets:Pets:BONE"); arr.add("neucl:Collection Log:MAP"); arr.add("neuah:NEU Auction House:GOLD_BLOCK"); return arr; } public class Button { public String displayName; public String desc; public Runnable click; public Button(String displayName, String desc, Runnable click) { this.displayName = displayName; this.desc = desc; this.click = click; } } private transient List