aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java1429
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java2994
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java15
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java15
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AuctionHouseSearch.java40
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java53
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java142
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java199
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/EnchSolvers.java106
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java208
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java46
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java35
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java196
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java110
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java181
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java70
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java256
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java45
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java32
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java74
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java58
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java71
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java188
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java64
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java90
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java27
26 files changed, 3455 insertions, 3289 deletions
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java
index b0e46e00..ea2631df 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java
@@ -1,714 +1,715 @@
-package io.github.moulberry.notenoughupdates.dungeons;
-
-import io.github.moulberry.notenoughupdates.core.config.gui.GuiPositionEditor;
-import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils;
-import io.github.moulberry.notenoughupdates.core.util.render.TextRenderUtils;
-import io.github.moulberry.notenoughupdates.options.NEUConfig;
-import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
-import io.github.moulberry.notenoughupdates.core.GuiElementColour;
-import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider;
-import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
-import io.github.moulberry.notenoughupdates.itemeditor.GuiElementTextField;
-import io.github.moulberry.notenoughupdates.util.SpecialColour;
-import io.github.moulberry.notenoughupdates.util.Utils;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiScreen;
-import net.minecraft.client.gui.ScaledResolution;
-import net.minecraft.client.renderer.GlStateManager;
-import net.minecraft.client.renderer.OpenGlHelper;
-import net.minecraft.client.shader.Framebuffer;
-import net.minecraft.client.shader.Shader;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.util.Matrix4f;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.Vec4b;
-import org.lwjgl.input.Keyboard;
-import org.lwjgl.input.Mouse;
-import org.lwjgl.opengl.GL11;
-
-import java.awt.*;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.*;
-import java.util.List;
-import static io.github.moulberry.notenoughupdates.util.GuiTextures.*;
-
-public class GuiDungeonMapEditor extends GuiScreen {
-
- public static final ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates:dungeon_map/editor/background.png");
- public static final ResourceLocation BUTTON = new ResourceLocation("notenoughupdates:button.png");
- private static final DungeonMap demoMap = new DungeonMap();
-
- private int sizeX;
- private int sizeY;
- private int guiLeft;
- private int guiTop;
-
- private List<Button> buttons = new ArrayList<>();
-
- private GuiElementTextField blurField = new GuiElementTextField("", GuiElementTextField.NUM_ONLY | GuiElementTextField.NO_SPACE);
- private GuiElementColour activeColourEditor = null;
-
- private Field clickedSlider;
-
- class Button {
- private int id;
- private int x;
- private int y;
- private String text;
- private Color colour = new Color(-1, true);
- private Field option;
- private String displayName;
- private String desc;
-
- public Button(int id, int x, int y, String text) {
- this(id, x, y, text, null);
- }
-
- public Button(int id, int x, int y, String text, Field option) {
- this.id = id;
- this.x = x;
- this.y = y;
- this.text = text;
- this.option = option;
-
- if(option != null) {
- ConfigOption optionAnnotation = option.getAnnotation(ConfigOption.class);
- displayName = optionAnnotation.name();
- desc = optionAnnotation.desc();
- }
- }
-
- public List<String> getTooltip() {
- if(option == null) {
- return null;
- }
-
- List<String> tooltip = new ArrayList<>();
- tooltip.add(EnumChatFormatting.YELLOW+displayName);
- for(String line : desc.split("\n")) {
- tooltip.add(EnumChatFormatting.AQUA+line);
- }
- return tooltip;
- }
-
- public void render() {
- if(text == null) return;
-
- Minecraft.getMinecraft().getTextureManager().bindTexture(BUTTON);
- if(isButtonPressed(id)) {
- GlStateManager.color(colour.getRed()*0.85f/255f, colour.getGreen()*0.85f/255f,
- colour.getBlue()*0.85f/255f, 1);
- Utils.drawTexturedRect(guiLeft+x, guiTop+y, 48, 16, 1, 0, 1, 0, GL11.GL_NEAREST);
- } else {
- GlStateManager.color(colour.getRed()/255f, colour.getGreen()/255f, colour.getBlue()/255f, 1);
- Utils.drawTexturedRect(guiLeft+x, guiTop+y, 48, 16, GL11.GL_NEAREST);
- }
-
- if(text.length() > 0) {
- Utils.drawStringCenteredScaledMaxWidth(text, Minecraft.getMinecraft().fontRendererObj , guiLeft+x+24, guiTop+y+8, false, 39, 0xFF000000);
- }
- }
-
- }
-
- public GuiDungeonMapEditor() {
- NEUConfig.DungeonMap options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
- //Map Border Size
- //buttons.add(new Button(0, 6, 37, "Small", options.dmBorderSize));
- //buttons.add(new Button(1, 52, 37, "Medium", options.dmBorderSize));
- //buttons.add(new Button(2, 98, 37, "Large", options.dmBorderSize));
-
- //Map Rooms Size
- //buttons.add(new Button(3, 6, 67+19, "Small", options.dmRoomSize));
- //buttons.add(new Button(4, 52, 67+19, "Medium", options.dmRoomSize));
- //buttons.add(new Button(5, 98, 67+19, "Large", options.dmRoomSize));
-
- //Map Border Styles
- buttons.add(new Button(6, 6, 97+30, "None"));
- buttons.add(new Button(7, 52, 97+30, "Custom"));
- buttons.add(new Button(8, 98, 97+30, "Stone"));
- buttons.add(new Button(9, 6, 116+30, "Wood"));
- buttons.add(new Button(10, 52, 116+30, "Rustic(S)"));
- buttons.add(new Button(11, 98, 116+30, "Rustic(C)"));
- buttons.add(new Button(12, 6, 135+30, "Fade"));
- buttons.add(new Button(13, 52, 135+30, "Ribbons"));
- buttons.add(new Button(14, 98, 135+30, "Paper"));
- buttons.add(new Button(15, 6, 154+30, "Crimson"));
- buttons.add(new Button(16, 52, 154+30, "Ornate"));
- buttons.add(new Button(17, 98, 154+30, "Dragon"));
-
- try {
- //Dungeon Map
- buttons.add(new Button(18, 20+139, 36, "Yes/No", NEUConfig.DungeonMap.class.getDeclaredField("dmEnable")));
- //Center
- buttons.add(new Button(19, 84+139, 36, "Player/Map", NEUConfig.DungeonMap.class.getDeclaredField("dmCenterPlayer")));
- //Rotate
- buttons.add(new Button(20, 20+139, 65, "Player/No Rotate", NEUConfig.DungeonMap.class.getDeclaredField("dmRotatePlayer")));
- //Icon Style
- buttons.add(new Button(21, 84+139, 65, "Default/Heads", NEUConfig.DungeonMap.class.getDeclaredField("dmPlayerHeads")));
- //Check Orient
- buttons.add(new Button(22, 20+139, 94, "Normal/Reorient", NEUConfig.DungeonMap.class.getDeclaredField("dmOrientCheck")));
- //Check Center
- buttons.add(new Button(23, 84+139, 94, "Yes/No", NEUConfig.DungeonMap.class.getDeclaredField("dmCenterCheck")));
- //Interpolation
- buttons.add(new Button(24, 20+139, 123, "Yes/No", NEUConfig.DungeonMap.class.getDeclaredField("dmPlayerInterp")));
- //Compatibility
- buttons.add(new Button(25, 84+139, 123, "Normal/No SHD/No FB/SHD", NEUConfig.DungeonMap.class.getDeclaredField("dmCompat")));
-
- //Background
- buttons.add(new Button(26, 20+139, 152, "", NEUConfig.DungeonMap.class.getDeclaredField("dmBackgroundColour")));
- //Border
- buttons.add(new Button(27, 84+139, 152, "", NEUConfig.DungeonMap.class.getDeclaredField("dmBorderColour")));
-
- //Chroma Mode
- buttons.add(new Button(28, 84+139, 181, "Normal/Scroll", NEUConfig.DungeonMap.class.getDeclaredField("dmChromaBorder")));
- } catch(Exception e) {
- e.printStackTrace();
- }
-
- //buttons.add(new Button(29, 52, 86+19, "XLarge", options.dmRoomSize));
- //buttons.add(new Button(30, 52, 56, "XLarge", options.dmBorderSize));
-
- {
- double val = NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBackgroundBlur;
- String strVal;
- if(val % 1 == 0) {
- strVal = Integer.toString((int)val);
- } else {
- strVal = Double.toString(val);
- strVal = strVal.replaceAll("(\\.\\d\\d\\d)(?:\\d)+", "$1");
- strVal = strVal.replaceAll("0+$", "");
- }
- blurField.setText(strVal);
- }
- }
-
- @Override
- public void drawScreen(int mouseX, int mouseY, float partialTicks) {
- ScaledResolution scaledResolution = Utils.pushGuiScale(2);
- this.width = scaledResolution.getScaledWidth();
- this.height = scaledResolution.getScaledHeight();
-
- mouseX = Mouse.getEventX() * this.width / this.mc.displayWidth;
- mouseY = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
-
- List<String> tooltipToDisplay = null;
- for(Button button : buttons) {
- if(mouseX >= guiLeft+button.x && mouseX <= guiLeft+button.x+48 &&
- mouseY >= guiTop+button.y-13 && mouseY <= guiTop+button.y+16) {
- if(button.id >= 6 && button.id <= 17) {
- String mapDesc = null;
- String mapCredit = null;
- int id = button.id;
- switch(id) {
- case 6:
- mapDesc = "No Border"; break;
- case 7:
- mapDesc = "Used by custom Resource Packs"; break;
- case 8:
- mapDesc = "Simple gray border"; mapCredit = "TomEngMaster"; break;
- case 9:
- mapDesc = "Viney wood border"; mapCredit = "iDevil4Hell"; break;
- case 10:
- mapDesc = "Steampunk-inspired square border"; mapCredit = "ThatGravyBoat"; break;
- case 11:
- mapDesc = "Steampunk-inspired circular border"; mapCredit = "ThatGravyBoat"; break;
- case 12:
- mapDesc = "Light fade border"; mapCredit = "Qwiken"; break;
- case 13:
- mapDesc = "Simple gray border with red ribbons"; mapCredit = "Sai"; break;
- case 14:
- mapDesc = "Paper border"; mapCredit = "KingJames02st"; break;
- case 15:
- mapDesc = "Nether-inspired border"; mapCredit = "DTRW191"; break;
- case 16:
- mapDesc = "Golden ornate border"; mapCredit = "iDevil4Hell"; break;
- case 17:
- mapDesc = "Stone dragon border"; mapCredit = "ImperiaL"; break;
- }
-
- ArrayList<String> tooltip = new ArrayList<>();
- tooltip.add(EnumChatFormatting.YELLOW+"Border Style");
- tooltip.add(EnumChatFormatting.AQUA+"Customize the look of the dungeon border");
- tooltip.add("");
- if(mapDesc != null) tooltip.add(EnumChatFormatting.YELLOW+"Set to: "+EnumChatFormatting.AQUA+mapDesc);
- if(mapCredit != null) tooltip.add(EnumChatFormatting.YELLOW+"Artist: "+EnumChatFormatting.GOLD+mapCredit);
- tooltipToDisplay = tooltip;
- } else {
- tooltipToDisplay = button.getTooltip();
- }
- break;
- }
- }
-
- this.sizeX = 431;
- this.sizeY = 237;
- this.guiLeft = (this.width - this.sizeX) / 2;
- this.guiTop = (this.height-this.sizeY)/2;
-
- super.drawScreen(mouseX, mouseY, partialTicks);
- drawDefaultBackground();
-
- blurBackground();
- renderBlurredBackground(width, height, guiLeft+2, guiTop+2, sizeX-4, sizeY-4);
-
- Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND);
- GlStateManager.color(1, 1, 1, 1);
- Utils.drawTexturedRect(guiLeft, guiTop, sizeX, sizeY, GL11.GL_NEAREST);
-
- Minecraft.getMinecraft().fontRendererObj.drawString("NEU Dungeon Map Editor", guiLeft+8, guiTop+6, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Border Size", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+76, guiTop+30, false, 137, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Rooms Size", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+76, guiTop+60, false, 137, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Icon Scale", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+76, guiTop+90, false, 137, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Border Style", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+76, guiTop+120, false, 137, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Dungeon Map", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+44+139, guiTop+30, false, 60, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Center", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+108+139, guiTop+30, false, 60, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Rotate", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+44+139, guiTop+59, false, 60, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Icon Style", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+108+139, guiTop+59, false, 60, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Check Orient", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+44+139, guiTop+88, false, 60, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Check Center", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+108+139, guiTop+88, false, 60, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Interpolation", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+44+139, guiTop+117, false, 60, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Compatibility", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+108+139, guiTop+117, false, 60, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Background", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+44+139, guiTop+146, false, 60, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Border", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+108+139, guiTop+146, false, 60, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("BG Blur", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+44+139, guiTop+175, false, 60, 0xFFB4B4B4);
- Utils.drawStringCenteredScaledMaxWidth("Chroma Type", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+108+139, guiTop+175, false, 60, 0xFFB4B4B4);
-
- Utils.drawStringCenteredScaledMaxWidth("Edit Map Position", Minecraft.getMinecraft().fontRendererObj,
- guiLeft+76, guiTop+209, false, 200, 0xFFB4B4B4);
-
- try {
- drawSlider(NEUConfig.DungeonMap.class.getDeclaredField("dmBorderSize"), guiLeft+76, guiTop+45);
- drawSlider(NEUConfig.DungeonMap.class.getDeclaredField("dmRoomSize"), guiLeft+76, guiTop+75);
- drawSlider(NEUConfig.DungeonMap.class.getDeclaredField("dmIconScale"), guiLeft+76, guiTop+105);
- } catch(Exception e) {
- e.printStackTrace();
- }
-
- NEUConfig.DungeonMap options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
- buttons.get(18-6).text = options.dmEnable ? "Enabled" : "Disabled";
- buttons.get(19-6).text = options.dmCenterPlayer ? "Player" : "Map";
- buttons.get(20-6).text = options.dmRotatePlayer ? "Player" : "Vertical";
- buttons.get(21-6).text = options.dmPlayerHeads <= 0 ? "Default" : options.dmPlayerHeads == 1 ? "Heads" : "Heads w/ Border";
- buttons.get(22-6).text = options.dmOrientCheck ? "Orient" : "Off";
- buttons.get(23-6).text = options.dmCenterCheck ? "Center" : "Off";
- buttons.get(24-6).text = options.dmPlayerInterp ? "Interp" : "No Interp";
- buttons.get(25-6).text = options.dmCompat <= 0 ? "Normal" : options.dmCompat >= 2 ? "No FB/SHD" : "No SHD";
-
- buttons.get(26-6).colour = new Color(SpecialColour.specialToChromaRGB(options.dmBackgroundColour));
- buttons.get(27-6).colour = new Color(SpecialColour.specialToChromaRGB(options.dmBorderColour));
-
- buttons.get(28-6).text = options.dmChromaBorder ? "Scroll" : "Normal";
-
- blurField.setSize(48, 16);
- blurField.render(guiLeft+20+139, guiTop+181);
-
- GlStateManager.color(1, 1, 1, 1);
- Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex);
- RenderUtils.drawTexturedRect(guiLeft+52, guiTop+215, 48, 16);
- TextRenderUtils.drawStringCenteredScaledMaxWidth("Edit", fontRendererObj, guiLeft+76, guiTop+223,
- false, 48, 0xFF303030);
-
- Map<String, Vec4b> decorations = new HashMap<>();
- Vec4b vec4b = new Vec4b((byte)3, (byte)(((50)-64)*2), (byte)(((40)-64)*2), (byte)((60)*16/360));
- decorations.put(Minecraft.getMinecraft().thePlayer.getName(), vec4b);
-
- HashSet<String> players = new HashSet<>();
- players.add(Minecraft.getMinecraft().thePlayer.getName());
- GlStateManager.color(1, 1, 1, 1);
-
- demoMap.renderMap(guiLeft+357, guiTop+125, NotEnoughUpdates.INSTANCE.colourMap, decorations, 0,
- players, false, partialTicks);
-
- for(Button button : buttons) {
- button.render();
- }
-
- //List<String> textLines, final int mouseX, final int mouseY, final int screenWidth, final int screenHeight, final int maxTextWidth, FontRenderer font
- if(tooltipToDisplay != null) {
- Utils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, 200, Minecraft.getMinecraft().fontRendererObj);
- }
-
- Utils.pushGuiScale(-1);
-
- if(activeColourEditor != null) {
- activeColourEditor.render();
- }
- }
-
- public void drawSlider(Field option, int centerX, int centerY) {
- float value;
- float minValue;
- float maxValue;
- try {
- value = ((Number)option.get(NotEnoughUpdates.INSTANCE.config.dungeonMap)).floatValue();
-
- ConfigEditorSlider sliderAnnotation = option.getAnnotation(ConfigEditorSlider.class);
- minValue = sliderAnnotation.minValue();
- maxValue = sliderAnnotation.maxValue();
- } catch(Exception e) {
- e.printStackTrace();
- return;
- }
-
- float sliderAmount = Math.max(0, Math.min(1, (value-minValue)/(maxValue-minValue)));
- int sliderAmountI = (int)(96*sliderAmount);
-
- GlStateManager.color(1f, 1f, 1f, 1f);
- Minecraft.getMinecraft().getTextureManager().bindTexture(slider_on_large);
- Utils.drawTexturedRect(centerX-48, centerY-8, sliderAmountI, 16,
- 0, sliderAmount, 0, 1, GL11.GL_NEAREST);
-
- Minecraft.getMinecraft().getTextureManager().bindTexture(slider_off_large);
- Utils.drawTexturedRect(centerX-48+sliderAmountI, centerY-8, 96-sliderAmountI, 16,
- sliderAmount, 1, 0, 1, GL11.GL_NEAREST);
-
- Minecraft.getMinecraft().getTextureManager().bindTexture(slider_button);
- Utils.drawTexturedRect(centerX-48+sliderAmountI-4, centerY-8, 8, 16,
- 0, 1, 0, 1, GL11.GL_NEAREST);
- }
-
- @Override
- protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) {
- super.mouseClickMove(mouseX, mouseY, clickedMouseButton, timeSinceLastClick);
-
- if(clickedSlider != null) {
- float minValue;
- float maxValue;
- try {
- ConfigEditorSlider sliderAnnotation = clickedSlider.getAnnotation(ConfigEditorSlider.class);
- minValue = sliderAnnotation.minValue();
- maxValue = sliderAnnotation.maxValue();
- } catch(Exception e) {
- e.printStackTrace();
- return;
- }
-
- float sliderAmount = (mouseX - (guiLeft+76-48))/96f;
- double val = minValue+(maxValue-minValue)*sliderAmount;
- if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
- val = Math.round(val);
- }
- float value = (float)Math.max(minValue, Math.min(maxValue, val));
- try {
- if(clickedSlider.getType() == int.class) {
- clickedSlider.set(NotEnoughUpdates.INSTANCE.config.dungeonMap, Math.round(value));
- } else {
- clickedSlider.set(NotEnoughUpdates.INSTANCE.config.dungeonMap, value);
- }
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
-
- }
-
- @Override
- protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
- for(Button button : buttons) {
- if(mouseX >= guiLeft+button.x && mouseX <= guiLeft+button.x+48 &&
- mouseY >= guiTop+button.y && mouseY <= guiTop+button.y+16) {
- buttonClicked(mouseX, mouseY, button.id);
-
- blurField.otherComponentClick();
- return;
- }
- }
-
- clickedSlider = null;
- if(mouseX >= guiLeft+76-48 && mouseX <= guiLeft+76+48) {
- try {
- if(mouseY > guiTop+45-8 && mouseY < guiTop+45+8) {
- clickedSlider = NEUConfig.DungeonMap.class.getDeclaredField("dmBorderSize");
- return;
- } else if(mouseY > guiTop+75-8 && mouseY < guiTop+75+8) {
- clickedSlider = NEUConfig.DungeonMap.class.getDeclaredField("dmRoomSize");
- return;
- } else if(mouseY > guiTop+105-8 && mouseY < guiTop+105+8) {
- clickedSlider = NEUConfig.DungeonMap.class.getDeclaredField("dmIconScale");
- return;
- }
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
-
- if(mouseY > guiTop+181 && mouseY < guiTop+181+16) {
- if(mouseX > guiLeft+20+139 && mouseX < guiLeft+20+139+48) {
- blurField.mouseClicked(mouseX, mouseY, mouseButton);
- return;
- }
- } else if(mouseY > guiTop+215 && mouseY < guiTop+215+16) {
- if(mouseX > guiLeft+52 && mouseX < guiLeft+100) {
- int size = 80 + Math.round(40*NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBorderSize);
-
- Map<String, Vec4b> decorations = new HashMap<>();
- Vec4b vec4b = new Vec4b((byte)3, (byte)(((50)-64)*2), (byte)(((40)-64)*2), (byte)((60)*16/360));
- decorations.put(Minecraft.getMinecraft().thePlayer.getName(), vec4b);
-
- HashSet<String> players = new HashSet<>();
- players.add(Minecraft.getMinecraft().thePlayer.getName());
- GlStateManager.color(1, 1, 1, 1);
-
- Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(
- NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition,
- size, size, () -> {
- ScaledResolution scaledResolution = Utils.pushGuiScale(2);
- demoMap.renderMap(NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsX(scaledResolution, size)+size/2,
- NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsY(scaledResolution, size)+size/2,
- NotEnoughUpdates.INSTANCE.colourMap, decorations, 0,
- players, false, 0);
- Utils.pushGuiScale(-1);
- }, () -> {
- }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiDungeonMapEditor()
- ).withScale(2));
- return;
- }
- }
-
- blurField.otherComponentClick();
- }
-
- @Override
- public void handleMouseInput() throws IOException {
- super.handleMouseInput();
-
- if(activeColourEditor != null) {
- ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
- int mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
- int mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
- activeColourEditor.mouseInput(mouseX, mouseY);
- }
- }
-
- @Override
- public void handleKeyboardInput() throws IOException {
- super.handleKeyboardInput();
-
- if(activeColourEditor != null) {
- activeColourEditor.keyboardInput();
- }
- }
-
- @Override
- protected void keyTyped(char typedChar, int keyCode) throws IOException {
- super.keyTyped(typedChar, keyCode);
-
- if(blurField.getFocus()) {
- blurField.keyTyped(typedChar, keyCode);
-
- try {
- blurField.setCustomBorderColour(-1);
- NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBackgroundBlur = Float.parseFloat(blurField.getText());
- } catch(Exception e) {
- blurField.setCustomBorderColour(Color.RED.getRGB());
- }
- }
- }
-
- private void buttonClicked(int mouseX, int mouseY, int id) {
- NEUConfig.DungeonMap options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
- switch (id) {
- case 0:
- options.dmBorderSize = 0; break;
- case 1:
- options.dmBorderSize = 1; break;
- case 2:
- options.dmBorderSize = 2; break;
- case 30:
- options.dmBorderSize = 3; break;
- case 3:
- options.dmRoomSize = 0; break;
- case 4:
- options.dmRoomSize = 1; break;
- case 5:
- options.dmRoomSize = 2; break;
- case 29:
- options.dmRoomSize = 3; break;
- case 18:
- options.dmEnable = !options.dmEnable; break;
- case 19:
- options.dmCenterPlayer = !options.dmCenterPlayer; break;
- case 20:
- options.dmRotatePlayer = !options.dmRotatePlayer; break;
- case 21:
- options.dmPlayerHeads++;
- if(options.dmPlayerHeads > 2) options.dmPlayerHeads = 0; break;
- case 22:
- options.dmOrientCheck = !options.dmOrientCheck; break;
- case 23:
- options.dmCenterCheck = !options.dmCenterCheck; break;
- case 24:
- options.dmPlayerInterp = !options.dmPlayerInterp; break;
- case 25:
- options.dmCompat++;
- if(options.dmCompat > 2) options.dmCompat = 0;
- break;
- case 26: {
- ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
- mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
- mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
- activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBackgroundColour,
- (col) -> options.dmBackgroundColour = col, () -> activeColourEditor = null);
- }
- break;
- case 27: {
- ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
- mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
- mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
- activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBorderColour,
- (col) -> options.dmBorderColour = col, () -> activeColourEditor = null);
- }
- break;
- case 28:
- options.dmChromaBorder = !options.dmChromaBorder; break;
- default:
- if(id >= 6 && id <= 17) {
- options.dmBorderStyle = id-6; break;
- }
- };
- }
-
- private boolean isButtonPressed(int id) {
- NEUConfig.DungeonMap options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
-
- if(id >= 0 && id <= 2) {
- return options.dmBorderSize == id;
- } else if(id >= 3 && id <= 5) {
- return options.dmRoomSize == id-3;
- } else if(id >= 6 && id <= 17) {
- return options.dmBorderStyle == id-6;
- } else if(id == 29) {
- return options.dmRoomSize == 3;
- } else if(id == 30) {
- return options.dmBorderSize == 3;
- }
- return false;
- }
-
- Shader blurShaderHorz = null;
- Framebuffer blurOutputHorz = null;
- Shader blurShaderVert = null;
- Framebuffer blurOutputVert = null;
-
- /**
- * Creates a projection matrix that projects from our coordinate space [0->width; 0->height] to OpenGL coordinate
- * space [-1 -> 1; 1 -> -1] (Note: flipped y-axis).
- *
- * This is so that we can render to and from the framebuffer in a way that is familiar to us, instead of needing to
- * apply scales and translations manually.
- */
- private Matrix4f createProjectionMatrix(int width, int height) {
- Matrix4f projMatrix = new Matrix4f();
- projMatrix.setIdentity();
- projMatrix.m00 = 2.0F / (float)width;
- projMatrix.m11 = 2.0F / (float)(-height);
- projMatrix.m22 = -0.0020001999F;
- projMatrix.m33 = 1.0F;
- projMatrix.m03 = -1.0F;
- projMatrix.m13 = 1.0F;
- projMatrix.m23 = -1.0001999F;
- return projMatrix;
- }
-
- private double lastBgBlurFactor = -1;
- private void blurBackground() {
- if(!OpenGlHelper.isFramebufferEnabled()) return;
-
- int width = Minecraft.getMinecraft().displayWidth;
- int height = Minecraft.getMinecraft().displayHeight;
-
- if(blurOutputHorz == null) {
- blurOutputHorz = new Framebuffer(width, height, false);
- blurOutputHorz.setFramebufferFilter(GL11.GL_NEAREST);
- }
- if(blurOutputVert == null) {
- blurOutputVert = new Framebuffer(width, height, false);
- blurOutputVert.setFramebufferFilter(GL11.GL_NEAREST);
- }
- if(blurOutputHorz.framebufferWidth != width || blurOutputHorz.framebufferHeight != height) {
- blurOutputHorz.createBindFramebuffer(width, height);
- blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height));
- Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
- }
- if(blurOutputVert.framebufferWidth != width || blurOutputVert.framebufferHeight != height) {
- blurOutputVert.createBindFramebuffer(width, height);
- blurShaderVert.setProjectionMatrix(createProjectionMatrix(width, height));
- Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
- }
-
- if(blurShaderHorz == null) {
- try {
- blurShaderHorz = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur",
- Minecraft.getMinecraft().getFramebuffer(), blurOutputHorz);
- blurShaderHorz.getShaderManager().getShaderUniform("BlurDir").set(1, 0);
- blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height));
- } catch(Exception e) { }
- }
- if(blurShaderVert == null) {
- try {
- blurShaderVert = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur",
- blurOutputHorz, blurOutputVert);
- blurShaderVert.getShaderManager().getShaderUniform("BlurDir").set(0, 1);
- blurShaderVert.setProjectionMatrix(createProjectionMatrix(width, height));
- } catch(Exception e) { }
- }
- if(blurShaderHorz != null && blurShaderVert != null) {
- if(15 != lastBgBlurFactor) {
- blurShaderHorz.getShaderManager().getShaderUniform("Radius").set((float)15);
- blurShaderVert.getShaderManager().getShaderUniform("Radius").set((float)15);
- lastBgBlurFactor = 15;
- }
- GL11.glPushMatrix();
- blurShaderHorz.loadShader(0);
- blurShaderVert.loadShader(0);
- GlStateManager.enableDepth();
- GL11.glPopMatrix();
-
- Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
- }
- }
-
- /**
- * Renders a subsection of the blurred framebuffer on to the corresponding section of the screen.
- * Essentially, this method will "blur" the background inside the bounds specified by [x->x+blurWidth, y->y+blurHeight]
- */
- public void renderBlurredBackground(int width, int height, int x, int y, int blurWidth, int blurHeight) {
- if(!OpenGlHelper.isFramebufferEnabled()) return;
-
- float uMin = x/(float)width;
- float uMax = (x+blurWidth)/(float)width;
- float vMin = (height-y)/(float)height;
- float vMax = (height-y-blurHeight)/(float)height;
-
- blurOutputVert.bindFramebufferTexture();
- GlStateManager.color(1f, 1f, 1f, 1f);
- Utils.drawTexturedRect(x, y, blurWidth, blurHeight, uMin, uMax, vMin, vMax);
- blurOutputVert.unbindFramebufferTexture();
- }
-
-}
+package io.github.moulberry.notenoughupdates.dungeons;
+
+import io.github.moulberry.notenoughupdates.core.config.gui.GuiPositionEditor;
+import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils;
+import io.github.moulberry.notenoughupdates.core.util.render.TextRenderUtils;
+import io.github.moulberry.notenoughupdates.options.NEUConfig;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.core.GuiElementColour;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+import io.github.moulberry.notenoughupdates.itemeditor.GuiElementTextField;
+import io.github.moulberry.notenoughupdates.options.seperateSections.DungeonMapConfig;
+import io.github.moulberry.notenoughupdates.util.SpecialColour;
+import io.github.moulberry.notenoughupdates.util.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.shader.Framebuffer;
+import net.minecraft.client.shader.Shader;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.Matrix4f;
+import net.minecraft.util.ResourceLocation;
+import net.minecraft.util.Vec4b;
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.*;
+import java.util.List;
+import static io.github.moulberry.notenoughupdates.util.GuiTextures.*;
+
+public class GuiDungeonMapEditor extends GuiScreen {
+
+ public static final ResourceLocation BACKGROUND = new ResourceLocation("notenoughupdates:dungeon_map/editor/background.png");
+ public static final ResourceLocation BUTTON = new ResourceLocation("notenoughupdates:button.png");
+ private static final DungeonMap demoMap = new DungeonMap();
+
+ private int sizeX;
+ private int sizeY;
+ private int guiLeft;
+ private int guiTop;
+
+ private List<Button> buttons = new ArrayList<>();
+
+ private GuiElementTextField blurField = new GuiElementTextField("", GuiElementTextField.NUM_ONLY | GuiElementTextField.NO_SPACE);
+ private GuiElementColour activeColourEditor = null;
+
+ private Field clickedSlider;
+
+ class Button {
+ private int id;
+ private int x;
+ private int y;
+ private String text;
+ private Color colour = new Color(-1, true);
+ private Field option;
+ private String displayName;
+ private String desc;
+
+ public Button(int id, int x, int y, String text) {
+ this(id, x, y, text, null);
+ }
+
+ public Button(int id, int x, int y, String text, Field option) {
+ this.id = id;
+ this.x = x;
+ this.y = y;
+ this.text = text;
+ this.option = option;
+
+ if(option != null) {
+ ConfigOption optionAnnotation = option.getAnnotation(ConfigOption.class);
+ displayName = optionAnnotation.name();
+ desc = optionAnnotation.desc();
+ }
+ }
+
+ public List<String> getTooltip() {
+ if(option == null) {
+ return null;
+ }
+
+ List<String> tooltip = new ArrayList<>();
+ tooltip.add(EnumChatFormatting.YELLOW+displayName);
+ for(String line : desc.split("\n")) {
+ tooltip.add(EnumChatFormatting.AQUA+line);
+ }
+ return tooltip;
+ }
+
+ public void render() {
+ if(text == null) return;
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(BUTTON);
+ if(isButtonPressed(id)) {
+ GlStateManager.color(colour.getRed()*0.85f/255f, colour.getGreen()*0.85f/255f,
+ colour.getBlue()*0.85f/255f, 1);
+ Utils.drawTexturedRect(guiLeft+x, guiTop+y, 48, 16, 1, 0, 1, 0, GL11.GL_NEAREST);
+ } else {
+ GlStateManager.color(colour.getRed()/255f, colour.getGreen()/255f, colour.getBlue()/255f, 1);
+ Utils.drawTexturedRect(guiLeft+x, guiTop+y, 48, 16, GL11.GL_NEAREST);
+ }
+
+ if(text.length() > 0) {
+ Utils.drawStringCenteredScaledMaxWidth(text, Minecraft.getMinecraft().fontRendererObj , guiLeft+x+24, guiTop+y+8, false, 39, 0xFF000000);
+ }
+ }
+
+ }
+
+ public GuiDungeonMapEditor() {
+ DungeonMapConfig options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
+ //Map Border Size
+ //buttons.add(new Button(0, 6, 37, "Small", options.dmBorderSize));
+ //buttons.add(new Button(1, 52, 37, "Medium", options.dmBorderSize));
+ //buttons.add(new Button(2, 98, 37, "Large", options.dmBorderSize));
+
+ //Map Rooms Size
+ //buttons.add(new Button(3, 6, 67+19, "Small", options.dmRoomSize));
+ //buttons.add(new Button(4, 52, 67+19, "Medium", options.dmRoomSize));
+ //buttons.add(new Button(5, 98, 67+19, "Large", options.dmRoomSize));
+
+ //Map Border Styles
+ buttons.add(new Button(6, 6, 97+30, "None"));
+ buttons.add(new Button(7, 52, 97+30, "Custom"));
+ buttons.add(new Button(8, 98, 97+30, "Stone"));
+ buttons.add(new Button(9, 6, 116+30, "Wood"));
+ buttons.add(new Button(10, 52, 116+30, "Rustic(S)"));
+ buttons.add(new Button(11, 98, 116+30, "Rustic(C)"));
+ buttons.add(new Button(12, 6, 135+30, "Fade"));
+ buttons.add(new Button(13, 52, 135+30, "Ribbons"));
+ buttons.add(new Button(14, 98, 135+30, "Paper"));
+ buttons.add(new Button(15, 6, 154+30, "Crimson"));
+ buttons.add(new Button(16, 52, 154+30, "Ornate"));
+ buttons.add(new Button(17, 98, 154+30, "Dragon"));
+
+ try {
+ //Dungeon Map
+ buttons.add(new Button(18, 20+139, 36, "Yes/No", DungeonMapConfig.class.getDeclaredField("dmEnable")));
+ //Center
+ buttons.add(new Button(19, 84+139, 36, "Player/Map", DungeonMapConfig.class.getDeclaredField("dmCenterPlayer")));
+ //Rotate
+ buttons.add(new Button(20, 20+139, 65, "Player/No Rotate", DungeonMapConfig.class.getDeclaredField("dmRotatePlayer")));
+ //Icon Style
+ buttons.add(new Button(21, 84+139, 65, "Default/Heads", DungeonMapConfig.class.getDeclaredField("dmPlayerHeads")));
+ //Check Orient
+ buttons.add(new Button(22, 20+139, 94, "Normal/Reorient", DungeonMapConfig.class.getDeclaredField("dmOrientCheck")));
+ //Check Center
+ buttons.add(new Button(23, 84+139, 94, "Yes/No", DungeonMapConfig.class.getDeclaredField("dmCenterCheck")));
+ //Interpolation
+ buttons.add(new Button(24, 20+139, 123, "Yes/No", DungeonMapConfig.class.getDeclaredField("dmPlayerInterp")));
+ //Compatibility
+ buttons.add(new Button(25, 84+139, 123, "Normal/No SHD/No FB/SHD", DungeonMapConfig.class.getDeclaredField("dmCompat")));
+
+ //Background
+ buttons.add(new Button(26, 20+139, 152, "", DungeonMapConfig.class.getDeclaredField("dmBackgroundColour")));
+ //Border
+ buttons.add(new Button(27, 84+139, 152, "", DungeonMapConfig.class.getDeclaredField("dmBorderColour")));
+
+ //Chroma Mode
+ buttons.add(new Button(28, 84+139, 181, "Normal/Scroll", DungeonMapConfig.class.getDeclaredField("dmChromaBorder")));
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ //buttons.add(new Button(29, 52, 86+19, "XLarge", options.dmRoomSize));
+ //buttons.add(new Button(30, 52, 56, "XLarge", options.dmBorderSize));
+
+ {
+ double val = NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBackgroundBlur;
+ String strVal;
+ if(val % 1 == 0) {
+ strVal = Integer.toString((int)val);
+ } else {
+ strVal = Double.toString(val);
+ strVal = strVal.replaceAll("(\\.\\d\\d\\d)(?:\\d)+", "$1");
+ strVal = strVal.replaceAll("0+$", "");
+ }
+ blurField.setText(strVal);
+ }
+ }
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float partialTicks) {
+ ScaledResolution scaledResolution = Utils.pushGuiScale(2);
+ this.width = scaledResolution.getScaledWidth();
+ this.height = scaledResolution.getScaledHeight();
+
+ mouseX = Mouse.getEventX() * this.width / this.mc.displayWidth;
+ mouseY = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
+
+ List<String> tooltipToDisplay = null;
+ for(Button button : buttons) {
+ if(mouseX >= guiLeft+button.x && mouseX <= guiLeft+button.x+48 &&
+ mouseY >= guiTop+button.y-13 && mouseY <= guiTop+button.y+16) {
+ if(button.id >= 6 && button.id <= 17) {
+ String mapDesc = null;
+ String mapCredit = null;
+ int id = button.id;
+ switch(id) {
+ case 6:
+ mapDesc = "No Border"; break;
+ case 7:
+ mapDesc = "Used by custom Resource Packs"; break;
+ case 8:
+ mapDesc = "Simple gray border"; mapCredit = "TomEngMaster"; break;
+ case 9:
+ mapDesc = "Viney wood border"; mapCredit = "iDevil4Hell"; break;
+ case 10:
+ mapDesc = "Steampunk-inspired square border"; mapCredit = "ThatGravyBoat"; break;
+ case 11:
+ mapDesc = "Steampunk-inspired circular border"; mapCredit = "ThatGravyBoat"; break;
+ case 12:
+ mapDesc = "Light fade border"; mapCredit = "Qwiken"; break;
+ case 13:
+ mapDesc = "Simple gray border with red ribbons"; mapCredit = "Sai"; break;
+ case 14:
+ mapDesc = "Paper border"; mapCredit = "KingJames02st"; break;
+ case 15:
+ mapDesc = "Nether-inspired border"; mapCredit = "DTRW191"; break;
+ case 16:
+ mapDesc = "Golden ornate border"; mapCredit = "iDevil4Hell"; break;
+ case 17:
+ mapDesc = "Stone dragon border"; mapCredit = "ImperiaL"; break;
+ }
+
+ ArrayList<String> tooltip = new ArrayList<>();
+ tooltip.add(EnumChatFormatting.YELLOW+"Border Style");
+ tooltip.add(EnumChatFormatting.AQUA+"Customize the look of the dungeon border");
+ tooltip.add("");
+ if(mapDesc != null) tooltip.add(EnumChatFormatting.YELLOW+"Set to: "+EnumChatFormatting.AQUA+mapDesc);
+ if(mapCredit != null) tooltip.add(EnumChatFormatting.YELLOW+"Artist: "+EnumChatFormatting.GOLD+mapCredit);
+ tooltipToDisplay = tooltip;
+ } else {
+ tooltipToDisplay = button.getTooltip();
+ }
+ break;
+ }
+ }
+
+ this.sizeX = 431;
+ this.sizeY = 237;
+ this.guiLeft = (this.width - this.sizeX) / 2;
+ this.guiTop = (this.height-this.sizeY)/2;
+
+ super.drawScreen(mouseX, mouseY, partialTicks);
+ drawDefaultBackground();
+
+ blurBackground();
+ renderBlurredBackground(width, height, guiLeft+2, guiTop+2, sizeX-4, sizeY-4);
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(BACKGROUND);
+ GlStateManager.color(1, 1, 1, 1);
+ Utils.drawTexturedRect(guiLeft, guiTop, sizeX, sizeY, GL11.GL_NEAREST);
+
+ Minecraft.getMinecraft().fontRendererObj.drawString("NEU Dungeon Map Editor", guiLeft+8, guiTop+6, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Border Size", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+76, guiTop+30, false, 137, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Rooms Size", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+76, guiTop+60, false, 137, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Icon Scale", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+76, guiTop+90, false, 137, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Border Style", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+76, guiTop+120, false, 137, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Dungeon Map", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+44+139, guiTop+30, false, 60, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Center", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+108+139, guiTop+30, false, 60, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Rotate", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+44+139, guiTop+59, false, 60, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Icon Style", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+108+139, guiTop+59, false, 60, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Check Orient", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+44+139, guiTop+88, false, 60, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Check Center", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+108+139, guiTop+88, false, 60, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Interpolation", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+44+139, guiTop+117, false, 60, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Compatibility", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+108+139, guiTop+117, false, 60, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Background", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+44+139, guiTop+146, false, 60, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Border", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+108+139, guiTop+146, false, 60, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("BG Blur", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+44+139, guiTop+175, false, 60, 0xFFB4B4B4);
+ Utils.drawStringCenteredScaledMaxWidth("Chroma Type", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+108+139, guiTop+175, false, 60, 0xFFB4B4B4);
+
+ Utils.drawStringCenteredScaledMaxWidth("Edit Map Position", Minecraft.getMinecraft().fontRendererObj,
+ guiLeft+76, guiTop+209, false, 200, 0xFFB4B4B4);
+
+ try {
+ drawSlider(DungeonMapConfig.class.getDeclaredField("dmBorderSize"), guiLeft+76, guiTop+45);
+ drawSlider(DungeonMapConfig.class.getDeclaredField("dmRoomSize"), guiLeft+76, guiTop+75);
+ drawSlider(DungeonMapConfig.class.getDeclaredField("dmIconScale"), guiLeft+76, guiTop+105);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ DungeonMapConfig options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
+ buttons.get(18-6).text = options.dmEnable ? "Enabled" : "Disabled";
+ buttons.get(19-6).text = options.dmCenterPlayer ? "Player" : "Map";
+ buttons.get(20-6).text = options.dmRotatePlayer ? "Player" : "Vertical";
+ buttons.get(21-6).text = options.dmPlayerHeads <= 0 ? "Default" : options.dmPlayerHeads == 1 ? "Heads" : "Heads w/ Border";
+ buttons.get(22-6).text = options.dmOrientCheck ? "Orient" : "Off";
+ buttons.get(23-6).text = options.dmCenterCheck ? "Center" : "Off";
+ buttons.get(24-6).text = options.dmPlayerInterp ? "Interp" : "No Interp";
+ buttons.get(25-6).text = options.dmCompat <= 0 ? "Normal" : options.dmCompat >= 2 ? "No FB/SHD" : "No SHD";
+
+ buttons.get(26-6).colour = new Color(SpecialColour.specialToChromaRGB(options.dmBackgroundColour));
+ buttons.get(27-6).colour = new Color(SpecialColour.specialToChromaRGB(options.dmBorderColour));
+
+ buttons.get(28-6).text = options.dmChromaBorder ? "Scroll" : "Normal";
+
+ blurField.setSize(48, 16);
+ blurField.render(guiLeft+20+139, guiTop+181);
+
+ GlStateManager.color(1, 1, 1, 1);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex);
+ RenderUtils.drawTexturedRect(guiLeft+52, guiTop+215, 48, 16);
+ TextRenderUtils.drawStringCenteredScaledMaxWidth("Edit", fontRendererObj, guiLeft+76, guiTop+223,
+ false, 48, 0xFF303030);
+
+ Map<String, Vec4b> decorations = new HashMap<>();
+ Vec4b vec4b = new Vec4b((byte)3, (byte)(((50)-64)*2), (byte)(((40)-64)*2), (byte)((60)*16/360));
+ decorations.put(Minecraft.getMinecraft().thePlayer.getName(), vec4b);
+
+ HashSet<String> players = new HashSet<>();
+ players.add(Minecraft.getMinecraft().thePlayer.getName());
+ GlStateManager.color(1, 1, 1, 1);
+
+ demoMap.renderMap(guiLeft+357, guiTop+125, NotEnoughUpdates.INSTANCE.colourMap, decorations, 0,
+ players, false, partialTicks);
+
+ for(Button button : buttons) {
+ button.render();
+ }
+
+ //List<String> textLines, final int mouseX, final int mouseY, final int screenWidth, final int screenHeight, final int maxTextWidth, FontRenderer font
+ if(tooltipToDisplay != null) {
+ Utils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, 200, Minecraft.getMinecraft().fontRendererObj);
+ }
+
+ Utils.pushGuiScale(-1);
+
+ if(activeColourEditor != null) {
+ activeColourEditor.render();
+ }
+ }
+
+ public void drawSlider(Field option, int centerX, int centerY) {
+ float value;
+ float minValue;
+ float maxValue;
+ try {
+ value = ((Number)option.get(NotEnoughUpdates.INSTANCE.config.dungeonMap)).floatValue();
+
+ ConfigEditorSlider sliderAnnotation = option.getAnnotation(ConfigEditorSlider.class);
+ minValue = sliderAnnotation.minValue();
+ maxValue = sliderAnnotation.maxValue();
+ } catch(Exception e) {
+ e.printStackTrace();
+ return;
+ }
+
+ float sliderAmount = Math.max(0, Math.min(1, (value-minValue)/(maxValue-minValue)));
+ int sliderAmountI = (int)(96*sliderAmount);
+
+ GlStateManager.color(1f, 1f, 1f, 1f);
+ Minecraft.getMinecraft().getTextureManager().bindTexture(slider_on_large);
+ Utils.drawTexturedRect(centerX-48, centerY-8, sliderAmountI, 16,
+ 0, sliderAmount, 0, 1, GL11.GL_NEAREST);
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(slider_off_large);
+ Utils.drawTexturedRect(centerX-48+sliderAmountI, centerY-8, 96-sliderAmountI, 16,
+ sliderAmount, 1, 0, 1, GL11.GL_NEAREST);
+
+ Minecraft.getMinecraft().getTextureManager().bindTexture(slider_button);
+ Utils.drawTexturedRect(centerX-48+sliderAmountI-4, centerY-8, 8, 16,
+ 0, 1, 0, 1, GL11.GL_NEAREST);
+ }
+
+ @Override
+ protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) {
+ super.mouseClickMove(mouseX, mouseY, clickedMouseButton, timeSinceLastClick);
+
+ if(clickedSlider != null) {
+ float minValue;
+ float maxValue;
+ try {
+ ConfigEditorSlider sliderAnnotation = clickedSlider.getAnnotation(ConfigEditorSlider.class);
+ minValue = sliderAnnotation.minValue();
+ maxValue = sliderAnnotation.maxValue();
+ } catch(Exception e) {
+ e.printStackTrace();
+ return;
+ }
+
+ float sliderAmount = (mouseX - (guiLeft+76-48))/96f;
+ double val = minValue+(maxValue-minValue)*sliderAmount;
+ if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
+ val = Math.round(val);
+ }
+ float value = (float)Math.max(minValue, Math.min(maxValue, val));
+ try {
+ if(clickedSlider.getType() == int.class) {
+ clickedSlider.set(NotEnoughUpdates.INSTANCE.config.dungeonMap, Math.round(value));
+ } else {
+ clickedSlider.set(NotEnoughUpdates.INSTANCE.config.dungeonMap, value);
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+ @Override
+ protected void mouseClicked(int mouseX, int mouseY, int mouseButton) {
+ for(Button button : buttons) {
+ if(mouseX >= guiLeft+button.x && mouseX <= guiLeft+button.x+48 &&
+ mouseY >= guiTop+button.y && mouseY <= guiTop+button.y+16) {
+ buttonClicked(mouseX, mouseY, button.id);
+
+ blurField.otherComponentClick();
+ return;
+ }
+ }
+
+ clickedSlider = null;
+ if(mouseX >= guiLeft+76-48 && mouseX <= guiLeft+76+48) {
+ try {
+ if(mouseY > guiTop+45-8 && mouseY < guiTop+45+8) {
+ clickedSlider = DungeonMapConfig.class.getDeclaredField("dmBorderSize");
+ return;
+ } else if(mouseY > guiTop+75-8 && mouseY < guiTop+75+8) {
+ clickedSlider = DungeonMapConfig.class.getDeclaredField("dmRoomSize");
+ return;
+ } else if(mouseY > guiTop+105-8 && mouseY < guiTop+105+8) {
+ clickedSlider = DungeonMapConfig.class.getDeclaredField("dmIconScale");
+ return;
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ if(mouseY > guiTop+181 && mouseY < guiTop+181+16) {
+ if(mouseX > guiLeft+20+139 && mouseX < guiLeft+20+139+48) {
+ blurField.mouseClicked(mouseX, mouseY, mouseButton);
+ return;
+ }
+ } else if(mouseY > guiTop+215 && mouseY < guiTop+215+16) {
+ if(mouseX > guiLeft+52 && mouseX < guiLeft+100) {
+ int size = 80 + Math.round(40*NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBorderSize);
+
+ Map<String, Vec4b> decorations = new HashMap<>();
+ Vec4b vec4b = new Vec4b((byte)3, (byte)(((50)-64)*2), (byte)(((40)-64)*2), (byte)((60)*16/360));
+ decorations.put(Minecraft.getMinecraft().thePlayer.getName(), vec4b);
+
+ HashSet<String> players = new HashSet<>();
+ players.add(Minecraft.getMinecraft().thePlayer.getName());
+ GlStateManager.color(1, 1, 1, 1);
+
+ Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(
+ NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition,
+ size, size, () -> {
+ ScaledResolution scaledResolution = Utils.pushGuiScale(2);
+ demoMap.renderMap(NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsX(scaledResolution, size)+size/2,
+ NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsY(scaledResolution, size)+size/2,
+ NotEnoughUpdates.INSTANCE.colourMap, decorations, 0,
+ players, false, 0);
+ Utils.pushGuiScale(-1);
+ }, () -> {
+ }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiDungeonMapEditor()
+ ).withScale(2));
+ return;
+ }
+ }
+
+ blurField.otherComponentClick();
+ }
+
+ @Override
+ public void handleMouseInput() throws IOException {
+ super.handleMouseInput();
+
+ if(activeColourEditor != null) {
+ ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
+ int mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
+ int mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
+ activeColourEditor.mouseInput(mouseX, mouseY);
+ }
+ }
+
+ @Override
+ public void handleKeyboardInput() throws IOException {
+ super.handleKeyboardInput();
+
+ if(activeColourEditor != null) {
+ activeColourEditor.keyboardInput();
+ }
+ }
+
+ @Override
+ protected void keyTyped(char typedChar, int keyCode) throws IOException {
+ super.keyTyped(typedChar, keyCode);
+
+ if(blurField.getFocus()) {
+ blurField.keyTyped(typedChar, keyCode);
+
+ try {
+ blurField.setCustomBorderColour(-1);
+ NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBackgroundBlur = Float.parseFloat(blurField.getText());
+ } catch(Exception e) {
+ blurField.setCustomBorderColour(Color.RED.getRGB());
+ }
+ }
+ }
+
+ private void buttonClicked(int mouseX, int mouseY, int id) {
+ DungeonMapConfig options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
+ switch (id) {
+ case 0:
+ options.dmBorderSize = 0; break;
+ case 1:
+ options.dmBorderSize = 1; break;
+ case 2:
+ options.dmBorderSize = 2; break;
+ case 30:
+ options.dmBorderSize = 3; break;
+ case 3:
+ options.dmRoomSize = 0; break;
+ case 4:
+ options.dmRoomSize = 1; break;
+ case 5:
+ options.dmRoomSize = 2; break;
+ case 29:
+ options.dmRoomSize = 3; break;
+ case 18:
+ options.dmEnable = !options.dmEnable; break;
+ case 19:
+ options.dmCenterPlayer = !options.dmCenterPlayer; break;
+ case 20:
+ options.dmRotatePlayer = !options.dmRotatePlayer; break;
+ case 21:
+ options.dmPlayerHeads++;
+ if(options.dmPlayerHeads > 2) options.dmPlayerHeads = 0; break;
+ case 22:
+ options.dmOrientCheck = !options.dmOrientCheck; break;
+ case 23:
+ options.dmCenterCheck = !options.dmCenterCheck; break;
+ case 24:
+ options.dmPlayerInterp = !options.dmPlayerInterp; break;
+ case 25:
+ options.dmCompat++;
+ if(options.dmCompat > 2) options.dmCompat = 0;
+ break;
+ case 26: {
+ ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
+ mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
+ mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
+ activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBackgroundColour,
+ (col) -> options.dmBackgroundColour = col, () -> activeColourEditor = null);
+ }
+ break;
+ case 27: {
+ ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
+ mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
+ mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
+ activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBorderColour,
+ (col) -> options.dmBorderColour = col, () -> activeColourEditor = null);
+ }
+ break;
+ case 28:
+ options.dmChromaBorder = !options.dmChromaBorder; break;
+ default:
+ if(id >= 6 && id <= 17) {
+ options.dmBorderStyle = id-6; break;
+ }
+ };
+ }
+
+ private boolean isButtonPressed(int id) {
+ DungeonMapConfig options = NotEnoughUpdates.INSTANCE.config.dungeonMap;
+
+ if(id >= 0 && id <= 2) {
+ return options.dmBorderSize == id;
+ } else if(id >= 3 && id <= 5) {
+ return options.dmRoomSize == id-3;
+ } else if(id >= 6 && id <= 17) {
+ return options.dmBorderStyle == id-6;
+ } else if(id == 29) {
+ return options.dmRoomSize == 3;
+ } else if(id == 30) {
+ return options.dmBorderSize == 3;
+ }
+ return false;
+ }
+
+ Shader blurShaderHorz = null;
+ Framebuffer blurOutputHorz = null;
+ Shader blurShaderVert = null;
+ Framebuffer blurOutputVert = null;
+
+ /**
+ * Creates a projection matrix that projects from our coordinate space [0->width; 0->height] to OpenGL coordinate
+ * space [-1 -> 1; 1 -> -1] (Note: flipped y-axis).
+ *
+ * This is so that we can render to and from the framebuffer in a way that is familiar to us, instead of needing to
+ * apply scales and translations manually.
+ */
+ private Matrix4f createProjectionMatrix(int width, int height) {
+ Matrix4f projMatrix = new Matrix4f();
+ projMatrix.setIdentity();
+ projMatrix.m00 = 2.0F / (float)width;
+ projMatrix.m11 = 2.0F / (float)(-height);
+ projMatrix.m22 = -0.0020001999F;
+ projMatrix.m33 = 1.0F;
+ projMatrix.m03 = -1.0F;
+ projMatrix.m13 = 1.0F;
+ projMatrix.m23 = -1.0001999F;
+ return projMatrix;
+ }
+
+ private double lastBgBlurFactor = -1;
+ private void blurBackground() {
+ if(!OpenGlHelper.isFramebufferEnabled()) return;
+
+ int width = Minecraft.getMinecraft().displayWidth;
+ int height = Minecraft.getMinecraft().displayHeight;
+
+ if(blurOutputHorz == null) {
+ blurOutputHorz = new Framebuffer(width, height, false);
+ blurOutputHorz.setFramebufferFilter(GL11.GL_NEAREST);
+ }
+ if(blurOutputVert == null) {
+ blurOutputVert = new Framebuffer(width, height, false);
+ blurOutputVert.setFramebufferFilter(GL11.GL_NEAREST);
+ }
+ if(blurOutputHorz.framebufferWidth != width || blurOutputHorz.framebufferHeight != height) {
+ blurOutputHorz.createBindFramebuffer(width, height);
+ blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height));
+ Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
+ }
+ if(blurOutputVert.framebufferWidth != width || blurOutputVert.framebufferHeight != height) {
+ blurOutputVert.createBindFramebuffer(width, height);
+ blurShaderVert.setProjectionMatrix(createProjectionMatrix(width, height));
+ Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
+ }
+
+ if(blurShaderHorz == null) {
+ try {
+ blurShaderHorz = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur",
+ Minecraft.getMinecraft().getFramebuffer(), blurOutputHorz);
+ blurShaderHorz.getShaderManager().getShaderUniform("BlurDir").set(1, 0);
+ blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height));
+ } catch(Exception e) { }
+ }
+ if(blurShaderVert == null) {
+ try {
+ blurShaderVert = new Shader(Minecraft.getMinecraft().getResourceManager(), "blur",
+ blurOutputHorz, blurOutputVert);
+ blurShaderVert.getShaderManager().getShaderUniform("BlurDir").set(0, 1);
+ blurShaderVert.setProjectionMatrix(createProjectionMatrix(width, height));
+ } catch(Exception e) { }
+ }
+ if(blurShaderHorz != null && blurShaderVert != null) {
+ if(15 != lastBgBlurFactor) {
+ blurShaderHorz.getShaderManager().getShaderUniform("Radius").set((float)15);
+ blurShaderVert.getShaderManager().getShaderUniform("Radius").set((float)15);
+ lastBgBlurFactor = 15;
+ }
+ GL11.glPushMatrix();
+ blurShaderHorz.loadShader(0);
+ blurShaderVert.loadShader(0);
+ GlStateManager.enableDepth();
+ GL11.glPopMatrix();
+
+ Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false);
+ }
+ }
+
+ /**
+ * Renders a subsection of the blurred framebuffer on to the corresponding section of the screen.
+ * Essentially, this method will "blur" the background inside the bounds specified by [x->x+blurWidth, y->y+blurHeight]
+ */
+ public void renderBlurredBackground(int width, int height, int x, int y, int blurWidth, int blurHeight) {
+ if(!OpenGlHelper.isFramebufferEnabled()) return;
+
+ float uMin = x/(float)width;
+ float uMax = (x+blurWidth)/(float)width;
+ float vMin = (height-y)/(float)height;
+ float vMax = (height-y-blurHeight)/(float)height;
+
+ blurOutputVert.bindFramebufferTexture();
+ GlStateManager.color(1f, 1f, 1f, 1f);
+ Utils.drawTexturedRect(x, y, blurWidth, blurHeight, uMin, uMax, vMin, vMax);
+ blurOutputVert.unbindFramebufferTexture();
+ }
+
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
index c6203059..b12e2ea5 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
@@ -1,2575 +1,419 @@
-package io.github.moulberry.notenoughupdates.options;
-
-import com.google.common.collect.Lists;
-import com.google.gson.annotations.Expose;
-import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
-import io.github.moulberry.notenoughupdates.core.GuiScreenElementWrapper;
-import io.github.moulberry.notenoughupdates.core.config.Config;
-import io.github.moulberry.notenoughupdates.core.config.Position;
-import io.github.moulberry.notenoughupdates.core.config.annotations.*;
-import io.github.moulberry.notenoughupdates.core.config.gui.GuiPositionEditor;
-import io.github.moulberry.notenoughupdates.miscgui.GuiEnchantColour;
-import io.github.moulberry.notenoughupdates.miscgui.GuiInvButtonEditor;
-import io.github.moulberry.notenoughupdates.miscgui.NEUOverlayPlacements;
-import io.github.moulberry.notenoughupdates.overlays.*;
-import io.github.moulberry.notenoughupdates.util.SBInfo;
-import net.minecraft.client.Minecraft;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraftforge.client.ClientCommandHandler;
-import org.lwjgl.input.Keyboard;
-import org.lwjgl.util.vector.Vector2f;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-public class NEUConfig extends Config {
-
- private void editOverlay(String activeConfig, TextOverlay overlay, Position position) {
- Vector2f size = overlay.getDummySize();
- int width = (int)size.x;
- int height = (int)size.y;
- Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(position, width, height, () -> {
- overlay.renderDummy();
- OverlayManager.dontRenderOverlay = overlay.getClass();
- }, () -> {
- }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiScreenElementWrapper(
- new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config, activeConfig))
- ));
- }
-
- @Override
- public void executeRunnable(int runnableId) {
- String activeConfigCategory = null;
- if(Minecraft.getMinecraft().currentScreen instanceof GuiScreenElementWrapper) {
- GuiScreenElementWrapper wrapper = (GuiScreenElementWrapper) Minecraft.getMinecraft().currentScreen;
- if(wrapper.element instanceof NEUConfigEditor) {
- activeConfigCategory = ((NEUConfigEditor)wrapper.element).getSelectedCategoryName();
- }
- }
- final String activeConfigCategoryF = activeConfigCategory;
-
- switch (runnableId) {
- case 0:
- ClientCommandHandler.instance.executeCommand(Minecraft.getMinecraft().thePlayer, "/neumap");
- return;
- case 1:
- editOverlay(activeConfigCategory, OverlayManager.miningOverlay, mining.overlayPosition);
- return;
- case 2:
- Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(
- NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarPosition,
- NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarWidth, 12, () -> {
- }, () -> {
- }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiScreenElementWrapper(
- new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config, activeConfigCategoryF))
- ));
- return;
- case 3:
- editOverlay(activeConfigCategory, OverlayManager.farmingOverlay, skillOverlays.farmingPosition);
- return;
- case 4:
- editOverlay(activeConfigCategory, OverlayManager.petInfoOverlay, petOverlay.petInfoPosition);
- return;
- case 5:
- editOverlay(activeConfigCategory, OverlayManager.timersOverlay, miscOverlays.todoPosition);
- return;
- case 6:
- NotEnoughUpdates.INSTANCE.openGui = new NEUOverlayPlacements();
- return;
- case 7:
- NotEnoughUpdates.INSTANCE.openGui = new GuiInvButtonEditor();
- return;
- case 8:
- NotEnoughUpdates.INSTANCE.openGui = new GuiEnchantColour();
- return;
-
- }
- }
-
- @Expose
- @Category(
- name = "Misc",
- desc = "Miscellaneous options which don't fit into any other category"
- )
- public Misc misc = new Misc();
-
- @Expose
- @Category(
- name = "Notifications",
- desc = "Notifications"
- )
- public Notifications notifications = new Notifications();
-
- @Expose
- @Category(
- name = "Item List",
- desc = "Item List"
- )
- public Itemlist itemlist = new Itemlist();
-
- @Expose
- @Category(
- name = "Toolbar",
- desc = "Toolbar"
- )
- public Toolbar toolbar = new Toolbar();
-
- @Expose
- @Category(
- name = "Inventory Buttons",
- desc = "Inventory Buttons"
- )
- public InventoryButtons inventoryButtons = new InventoryButtons();
-
-
- @Expose
- @Category(
- name = "Slot Locking",
- desc = "Slot Locking"
- )
- public SlotLocking slotLocking = new SlotLocking();
-
- @Expose
- @Category(
- name = "Tooltip Tweaks",
- desc = "Tooltip Tweaks"
- )
- public TooltipTweaks tooltipTweaks = new TooltipTweaks();
-
- @Expose
- @Category(
- name = "Item Overlays",
- desc = "Item Overlays"
- )
- public ItemOverlays itemOverlays = new ItemOverlays();
-
- @Expose
- @Category(
- name = "Skill Overlays",
- desc = "Skill Overlays"
- )
- public SkillOverlays skillOverlays = new SkillOverlays();
-
- @Expose
- @Category(
- name = "Misc Overlays",
- desc = "Misc Overlays"
- )
- public MiscOverlays miscOverlays = new MiscOverlays();
-
- @Expose
- @Category(
- name = "Storage GUI",
- desc = "Storage GUI"
- )
- public StorageGUI storageGUI = new StorageGUI();
-
- @Expose
- @Category(
- name = "Dungeons",
- desc = "Dungeons"
- )
- public Dungeons dungeons = new Dungeons();
-
-
- @Expose
- @Category(
- name = "Enchanting Solvers",
- desc = "Enchanting Solvers"
- )
- public EnchSolvers enchantingSolvers = new EnchSolvers();
-
- @Expose
- @Category(
- name = "Mining",
- desc = "Mining"
- )
- public Mining mining = new Mining();
-
-
- @Expose
- @Category(
- name = "Fishing",
- desc = "Fishing"
- )
- public Fishing fishing = new Fishing();
-
- @Expose
- @Category(
- name = "NEU Auction House",
- desc = "NEU Auction House"
- )
- public NeuAuctionHouse neuAuctionHouse = new NeuAuctionHouse();
-
- @Expose
- @Category(
- name = "Improved SB Menus",
- desc = "Improved SB Menus"
- )
- public ImprovedSBMenu improvedSBMenu = new ImprovedSBMenu();
-
- @Expose
- @Category(
- name = "Calendar",
- desc = "Calendar"
- )
- public Calendar calendar = new Calendar();
-
- @Expose
- @Category(
- name = "Trade Menu",
- desc = "Trade Menu"
- )
- public TradeMenu tradeMenu = new TradeMenu();
-
- @Expose
- @Category(
- name = "Pet Overlay",
- desc = "Pet Overlay"
- )
- public PetOverlay petOverlay = new PetOverlay();
-
- @Expose
- @Category(
- name = "AH Search GUI",
- desc = "AH Search GUI"
- )
- public AuctionHouseSearch auctionHouseSearch = new AuctionHouseSearch();
-
- @Expose
- @Category(
- name = "Accessory Bag Overlay",
- desc = "Accessory Bag Overlay"
- )
- public AccessoryBag accessoryBag = new AccessoryBag();
-
- @Expose
- @Category(
- name = "Api Key",
- desc = "Api Key"
- )
- public ApiKey apiKey = new ApiKey();
-
- @Expose
- public Hidden hidden = new Hidden();
-
- @Expose
- public DungeonMap dungeonMap = new DungeonMap();
-
- public static class Misc {
- @Expose
- @ConfigOption(
- name = "Only Show on Skyblock",
- desc = "The item list and some other GUI elements will only show on skyblock"
- )
- @ConfigEditorBoolean
- public boolean onlyShowOnSkyblock = true;
-
- @Expose
- @ConfigOption(
- name = "Hide Potion Effects",
- desc = "Hide the potion effects inside your inventory while on skyblock"
- )
- @ConfigEditorBoolean
- public boolean hidePotionEffect = true;
-
- @Expose
- @ConfigOption(
- name = "Streamer Mode",
- desc = "Randomize lobby names in the scoreboard and chat messages to help prevent stream sniping"
- )
- @ConfigEditorBoolean
- public boolean streamerMode = false;
-
- @Expose
- @ConfigOption(
- name = "GUI Click Sounds",
- desc = "Play click sounds in various NEU-related GUIs when pressing buttons"
- )
- @ConfigEditorBoolean
- public boolean guiButtonClicks = true;
-
- @Expose
- @ConfigOption(
- name = "Damage Indicator Style",
- desc = "Change the style of Skyblock damage indicators to be easier to read"
- )
- @ConfigEditorDropdown(
- values = {"Off", "Commas", "Shortened"}
- )
- public int damageIndicatorStyle = 1;
-
- @Expose
- @ConfigOption(
- name = "Edit Enchant Colours",
- desc = "Change the colours of certain skyblock enchants"
- )
- @ConfigEditorButton(runnableId = 8, buttonText = "Open")
- public boolean editEnchantColoursButton = true;
-
- @Expose
- @ConfigOption(
- name = "Chroma Text Speed",
- desc = "Change the speed of chroma text for items names (/neucustomize) and enchant colours (/neuec) with the chroma colour code (&z)"
- )
- @ConfigEditorSlider(
- minValue = 10,
- maxValue = 500,
- minStep = 10
- )
- public int chromaSpeed = 100;
- }
-
- public static class Notifications {
- @Expose
- @ConfigOption(
- name = "Update Messages",
- desc = "Give a notification in chat whenever a new version of NEU is released"
- )
- @ConfigEditorBoolean
- public boolean showUpdateMsg = true;
-
- @Expose
- @ConfigOption(
- name = "RAM Warning",
- desc = "Warning when game starts with lots of RAM allocated\n"+
- "\u00a7cBefore disabling this, please seriously read the message. If you complain about FPS issues without listening to the warning, that's your fault."
- )
- @ConfigEditorBoolean
- public boolean doRamNotif = true;
-
- /*@Expose
- @ConfigOption(
- name = "Wrong Pet",
- desc = "Gives a notification in chat whenever you're using a pet that doesnt match the same xp you're gathering."
- )
- @ConfigEditorBoolean
- public boolean showWrongPetMsg = false;*/
- }
-
- public static class Itemlist {
- @Expose
- @ConfigOption(
- name = "Show Vanilla Items",
- desc = "Vanilla items are included in the item list"
- )
- @ConfigEditorBoolean
- public boolean showVanillaItems = true;
-
- @Expose
- @ConfigOption(
- name = "Open Itemlist Arrow",
- desc = "Creates an arrow on the right-side to open the item list when hovered"
- )
- @ConfigEditorBoolean
- public boolean tabOpen = true;
-
- @Expose
- @ConfigOption(
- name = "Keep Open",
- desc = "Keeps the Itemlist open after the inventory is closed"
- )
- @ConfigEditorBoolean
- public boolean keepopen = false;
-
- @Expose
- @ConfigOption(
- name = "Item Style",
- desc = "Sets the style of the background behind items"
- )
- @ConfigEditorDropdown(
- values = {"Round", "Square"}
- )
- public int itemStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Pane Gui Scale",
- desc = "Change the gui scale of the Itemlist"
- )
- @ConfigEditorDropdown(
- values = {"Default", "Small", "Medium", "Large", "Auto"}
- )
- public int paneGuiScale = 0;
-
- @Expose
- @ConfigOption(
- name = "Background Blur",
- desc = "Change the blur amount behind the Itemlist. 0 = off"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 20,
- minStep = 1
- )
- public int bgBlurFactor = 5;
-
- @Expose
- @ConfigOption(
- name = "Pane Width Multiplier",
- desc = "Change the width of the Itemlist"
- )
- @ConfigEditorSlider(
- minValue = 0.5f,
- maxValue = 1.5f,
- minStep = 0.1f
- )
- public float paneWidthMult = 1.0f;
-
- @Expose
- @ConfigOption(
- name = "Pane Padding",
- desc = "Change the padding around the Itemlist"
- )
- @ConfigEditorSlider(
- minValue = 0f,
- maxValue = 20f,
- minStep = 1f
- )
- public int panePadding = 10;
-
- @Expose
- @ConfigOption(
- name = "Foreground Colour",
- desc = "Change the colour of foreground elements in the Itemlist"
- )
- @ConfigEditorColour
- public String foregroundColour = "00:255:100:100:100";
-
- @Expose
- @ConfigOption(
- name = "Favourite Colour",
- desc = "Change the colour of favourited elements in the Itemlist"
- )
- @ConfigEditorColour
- public String favouriteColour = "00:255:200:150:50";
-
- @Expose
- @ConfigOption(
- name = "Pane Background Colour",
- desc = "Change the colour of the Itemlist background"
- )
- @ConfigEditorColour
- public String backgroundColour = "15:6:0:0:255";
- }
-
- public static class Toolbar {
- @Expose
- @ConfigOption(
- name = "Edit Toolbar Positions",
- desc = "Edit the position of the QuickCommands / Search Bar"
- )
- @ConfigEditorButton(runnableId = 6, buttonText = "Edit")
- public boolean positionButton = true;
-
- @Expose
- @ConfigOption(
- name = "Show Quick Commands",
- desc = "Show QuickCommands\u2122 in the NEU toolbar"
- )
- @ConfigEditorBoolean
- public boolean quickCommands = true;
-
- @Expose
- @ConfigOption(
- name = "Show Search Bar",
- desc = "Show Itemlist search bar in the NEU toolbar"
- )
- @ConfigEditorBoolean
- public boolean searchBar = true;
-
- @Expose
- @ConfigOption(
- name = "Search Bar Width",
- desc = "Change the width of the search bar"
- )
- @ConfigEditorSlider(
- minValue = 50f,
- maxValue = 300f,
- minStep = 10f
- )
- public int searchBarWidth = 200;
-
- @Expose
- @ConfigOption(
- name = "Search Bar Height",
- desc = "Change the height of the search bar"
- )
- @ConfigEditorSlider(
- minValue = 15f,
- maxValue = 50f,
- minStep = 1f
- )
- public int searchBarHeight = 40;
-
- @Expose
- @ConfigOption(
- name = "Quick Commands Click Type",
- desc = "Change the click type needed to trigger quick commands"
- )
- @ConfigEditorDropdown(
- values = {"Mouse Up", "Mouse Down"}
- )
- public int quickCommandsClickType = 0;
- }
-
- public static class InventoryButtons {
- @Expose
- @ConfigOption(
- name = "Open Button Editor",
- desc = "Open button editor GUI (/neubuttons)"
- )
- @ConfigEditorButton(runnableId = 7, buttonText = "Open")
- public boolean openEditorButton = true;
-
- @Expose
- @ConfigOption(
- name = "Always Hide \"Crafting\" Text",
- desc = "Hide crafting text in inventory, even when no button is there"
- )
- @ConfigEditorBoolean
- public boolean hideCrafting = false;
-
- @Expose
- @ConfigOption(
- name = "Button Click Type",
- desc = "Change the click type needed to trigger commands"
- )
- @ConfigEditorDropdown(
- values = {"Mouse Down", "Mouse Up"}
- )
- public int clickType = 0;
- }
-
- public static class SlotLocking {
- @Expose
- @ConfigOption(
- name = "Enable Slot Locking",
- desc = "Allows you to lock slots and create slot bindings"
- )
- @ConfigEditorBoolean
- public boolean enableSlotLocking = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Slot Binding",
- desc = "Allows you to create slot bindings\nNote: \"Enable Slot Locking\" must be on"
- )
- @ConfigEditorBoolean
- public boolean enableSlotBinding = true;
-
- @Expose
- @ConfigOption(
- name = "Don't Drop Bound Slots",
- desc = "Slot bindings also act as locked slots (prevents dropping / moving in inventory)"
- )
- @ConfigEditorBoolean
- public boolean bindingAlsoLocks = false;
-
- @Expose
- @ConfigOption(
- name = "Slot Lock Key",
- desc = "Click this key to LOCK a slot\n" +
- "Hold this key and drag to BIND a slot"
- )
- @ConfigEditorKeybind(defaultKey = Keyboard.KEY_L)
- public int slotLockKey = Keyboard.KEY_L;
-
- @Expose
- @ConfigOption(
- name = "Lock Slots in Trade",
- desc = "Prevents trading locked items in the custom trade windows"
- )
- @ConfigEditorBoolean
- public boolean lockSlotsInTrade = true;
-
- @Expose
- @ConfigOption(
- name = "Slot Lock Sound",
- desc = "Play a ding when locking/unlocking slots"
- )
- @ConfigEditorBoolean
- public boolean slotLockSound = true;
-
- @Expose
- @ConfigOption(
- name = "Slot Lock Sound Vol.",
- desc = "Set the volume of the ding sound"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 100,
- minStep = 1
- )
- public float slotLockSoundVol = 20;
- }
-
- public static class TooltipTweaks {
- @ConfigOption(
- name = "Tooltip Price Information",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean priceInfoAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Price Info (Auc)",
- desc = "\u00a7rSelect what price information you would like to see on auctionable item tooltips\n" +
- "\u00a7eDrag text to rearrange"
- )
- @ConfigEditorDraggableList(
- exampleText = {"\u00a7eLowest BIN",
- "\u00a7eAH Price",
- "\u00a7eAH Sales",
- "\u00a7eRaw Craft Cost",
- "\u00a7eAVG Lowest BIN",
- "\u00a7eDungeon Costs"}
- )
- @ConfigAccordionId(id = 0)
- public List<Integer> priceInfoAuc = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 5));
-
- @Expose
- @ConfigOption(
- name = "Price Info (Baz)",
- desc = "\u00a7rSelect what price information you would like to see on bazaar item tooltips\n" +
- "\u00a7eDrag text to rearrange"
- )
- @ConfigEditorDraggableList(
- exampleText = {"\u00a7eBuy", "\u00a7eSell", "\u00a7eBuy (Insta)", "\u00a7eSell (Insta)", "\u00a7eRaw Craft Cost"}
- )
- @ConfigAccordionId(id = 0)
- public List<Integer> priceInfoBaz = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4));
-
- @Expose
- @ConfigOption(
- name = "Price Info (Inv)",
- desc = "Show price information for items in your inventory"
- )
- @ConfigEditorBoolean
- public boolean showPriceInfoInvItem = true;
-
- @Expose
- @ConfigOption(
- name = "Price Info (AH)",
- desc = "Show price information for auctioned items"
- )
- @ConfigEditorBoolean
- public boolean showPriceInfoAucItem = true;
-
- @Expose
- @ConfigOption(
- name = "Missing Enchant List",
- desc = "Show which enchants are missing on an item when pressing LSHIFT"
- )
- @ConfigEditorBoolean
- public boolean missingEnchantList = true;
-
- @Expose
- @ConfigOption(
- name = "Tooltip Border Colours",
- desc = "Make the borders of tooltips match the rarity of the item (NEU Tooltips Only)"
- )
- @ConfigEditorBoolean
- public boolean tooltipBorderColours = true;
-
- @Expose
- @ConfigOption(
- name = "Tooltip Border Opacity",
- desc = "Change the opacity of the rarity highlight (NEU Tooltips Only)"
- )
- @ConfigEditorSlider(
- minValue = 0f,
- maxValue = 255f,
- minStep = 1f
- )
- public int tooltipBorderOpacity = 200;
- }
-
- public static class ItemOverlays {
- @ConfigOption(
- name = "Treecapitator Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean treecapAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Treecap Overlay",
- desc = "Show which blocks will be broken when using a Jungle Axe or Treecapitator"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean enableTreecapOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Overlay Colour",
- desc = "Change the colour of the overlay"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 0)
- public String treecapOverlayColour = "00:50:64:224:208";
-
- @Expose
- @ConfigOption(
- name = "Enable Monkey Pet Check",
- desc = "Will check use the API to check what pet you're using\nto determine the cooldown based off of if you have monkey pet."
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean enableMonkeyCheck = true;
-
- @ConfigOption(
- name = "Builder's Wand Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 1)
- public boolean wandAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Wand Overlay",
- desc = "Show which blocks will be placed when using the Builder's Wand"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean enableWandOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Wand Block Count",
- desc = "Shows the total count of a block in your inventory"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean wandBlockCount = true;
-
- @Expose
- @ConfigOption(
- name = "Overlay Colour",
- desc = "Change the colour of the ghost block outline"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 1)
- public String wandOverlayColour = "00:50:64:224:208";
-
- @ConfigOption(
- name = "Block Zapper Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 6)
- public boolean zapperAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Zapper Overlay",
- desc = "Show which blocks will be destroyed when using the Block Zapper"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 6)
- public boolean enableZapperOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Overlay Colour",
- desc = "Change the colour of the ghost block outline"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 6)
- public String zapperOverlayColour = "0:102:171:5:0";
-
- @ConfigOption(
- name = "Smooth AOTE",
- desc = ""
- )
- @ConfigEditorAccordion(id = 2)
- public boolean aoteAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Smooth AOTE",
- desc = "Teleport smoothly to your destination when using AOTE"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean enableSmoothAOTE = true;
-
- @Expose
- @ConfigOption(
- name = "Enable Smooth Hyperion",
- desc = "Teleport smoothly to your destination when using Hyperion"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean enableSmoothHyperion = true;
-
- @Expose
- @ConfigOption(
- name = "Smooth TP Time",
- desc = "Change the amount of time (milliseconds) taken to teleport"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 500,
- minStep = 25
- )
- @ConfigAccordionId(id = 2)
- public int smoothTpMillis = 175;
-
- @Expose
- @ConfigOption(
- name = "Disable Hyperion Particles",
- desc = "Remove the explosion effect when using a hyperion"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean disableHyperionParticles = true;
-
- @ConfigOption(
- name = "Bonemerang Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 3)
- public boolean bonemerangAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Highlight Targeted Entities",
- desc = "Highlight entities that will be hit by your bonemerang"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 3)
- public boolean highlightTargeted = true;
-
- @Expose
- @ConfigOption(
- name = "Break Warning",
- desc = "Show a warning below your crosshair if the bonemerang will break on a block"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 3)
- public boolean showBreak = true;
-
- @ConfigOption(
- name = "Minion Crystal Radius Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 5)
- public boolean crystalAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Crystal Overlay",
- desc = "Show a block overlay for the effective radius of minion crystals (farming, mining, etc)"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 5)
- public boolean enableCrystalOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Always Show Crystal Overlay",
- desc = "Show the crystal overlay, even when a minion crystal is not being held"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 5)
- public boolean alwaysShowCrystal = false;
- }
-
- public static class SkillOverlays {
- @Expose
- @ConfigOption(
- name = "Enable Farming Overlay",
- desc = "Show an overlay while farming with useful information"
- )
- @ConfigEditorBoolean
- public boolean farmingOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Farming Text",
- desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
- "\u00a7rHold a mathematical hoe or use an axe while gaining farming xp to show the overlay"
- )
- @ConfigEditorDraggableList(
- exampleText = {"\u00a7bCounter: \u00a7e37,547,860",
- "\u00a7bCrops/m: \u00a7e38.29",
- "\u00a7bFarm: \u00a7e12\u00a77 [\u00a7e|||||||||||||||||\u00a78||||||||\u00a77] \u00a7e67%",
- "\u00a7bCurrent XP: \u00a7e6,734",
- "\u00a7bRemaining XP: \u00a7e3,265",
- "\u00a7bXP/h: \u00a7e238,129",
- "\u00a7bYaw: \u00a7e68.25\u00a7l\u1D52",
- "\u00a7bETA: 13h12m"}
- )
- public List<Integer> farmingText = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 7, 6));
-
- @Expose
- @ConfigOption(
- name = "Farming Position",
- desc = "Change the position of the Farming overlay"
- )
- @ConfigEditorButton(
- runnableId = 3,
- buttonText = "Edit"
- )
- public Position farmingPosition = new Position(10, 200);
-
- @Expose
- @ConfigOption(
- name = "Farming Style",
- desc = "Change the style of the Farming overlay"
- )
- @ConfigEditorDropdown(
- values = {"Background", "No Shadow", "Shadow", "Full Shadow"}
- )
- public int farmingStyle = 0;
- }
-
- public static class Dungeons {
- @ConfigOption(
- name = "Dungeon Map",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean dungeonMapAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Edit Dungeon Map",
- desc = "The NEU dungeon map has it's own editor (/neumap).\n" +
- "Click the button on the left to open it"
- )
- @ConfigEditorButton(
- runnableId = 0,
- buttonText = "Edit"
- )
- @ConfigAccordionId(id = 0)
- public int editDungeonMap = 0;
-
- @Expose
- @ConfigOption(
- name = "Show Own Head As Marker",
- desc = "If you have the \"Head\" icon style selected, don't replace your green marker with a head"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean showOwnHeadAsMarker = false;
-
- @ConfigOption(
- name = "Dungeon Profit",
- desc = ""
- )
- @ConfigEditorAccordion(id = 1)
- public boolean dungeonProfitAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Profit Type",
- desc = "Set the price dataset used for calculating profit"
- )
- @ConfigEditorDropdown(
- values = {"Lowest BIN", "24 AVG Lowest Bin", "Auction AVG"}
- )
- @ConfigAccordionId(id = 1)
- public int profitType = 0;
-
- @Expose
- @ConfigOption(
- name = "Profit Display Location",
- desc = "Set where the profit information is displayed\n" +
- "Overlay = Overlay on right side of inventory\n" +
- "GUI Title = Text displayed next to the inventory title\n" +
- "Lore = Inside the \"Open Reward Chest\" item"
- )
- @ConfigEditorDropdown(
- values = {"Overlay", "GUI Title", "Lore", "Off"}
- )
- @ConfigAccordionId(id = 1)
- public int profitDisplayLoc = 0;
-
-
- @ConfigOption(
- name = "Dungeon Win Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 3)
- public boolean dungeonWinAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Dungeon Win",
- desc = "Show a fancy win screen and stats when completing a dungeon"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 3)
- public boolean enableDungeonWin = true;
-
- @Expose
- @ConfigOption(
- name = "Dungeon Win Time",
- desc = "Change the amount of time (milliseconds) that the win screen shows for"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 20000,
- minStep = 500
- )
- @ConfigAccordionId(id = 3)
- public int dungeonWinMillis = 8000;
-
- @ConfigOption(
- name = "Dungeon Block Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 2)
- public boolean dungeonBlocksAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Block Overlay",
- desc = "Change the colour of certain blocks / entities while inside dungeons, but keeps the normal texture outside of dungeons"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean enableDungBlockOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Show Overlay Everywhere",
- desc = "Show the dungeon block overlay even when not inside dungeons. Should only be used for testing."
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean dungeonBlocksEverywhere = false;
-
- @Expose
- @ConfigOption(
- name = "Slow Update",
- desc = "Updates the colour every second instead of every tick.\n" +
- "\u00A7cWARNING: This will cause all texture animations (eg. flowing water) to update slowly.\n" +
- "This should only be used on low-end machines"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean slowDungeonBlocks = false;
-
- @Expose
- @ConfigOption(
- name = "Cracked Bricks",
- desc = "Change the colour of: Cracked Bricks"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungCrackedColour = "0:255:7:255:217";
-
- @Expose
- @ConfigOption(
- name = "Dispensers",
- desc = "Change the colour of: Dispensers"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungDispenserColour = "0:255:255:76:0";
-
- @Expose
- @ConfigOption(
- name = "Levers",
- desc = "Change the colour of: Levers"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungLeverColour = "0:252:24:249:255";
-
- @Expose
- @ConfigOption(
- name = "Tripwire String",
- desc = "Change the colour of: Tripwire String"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungTripWireColour = "0:255:255:0:0";
-
- @Expose
- @ConfigOption(
- name = "Normal Chests",
- desc = "Change the colour of: Normal Chests"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungChestColour = "0:255:0:163:36";
-
- @Expose
- @ConfigOption(
- name = "Trapped Chests",
- desc = "Change the colour of: Trapped Chests"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungTrappedChestColour = "0:255:0:163:36";
-
- @Expose
- @ConfigOption(
- name = "Bats",
- desc = "Change the colour of: Bats"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String dungBatColour = "0:255:12:255:0";
- }
-
- public static class MiscOverlays {
- @ConfigOption(
- name = "Todo Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean todoAccordion = true;
-
- @Expose
- @ConfigOption(
- name = "Enable Todo Overlay",
- desc = "Show an overlay that reminds you to do important tasks"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean todoOverlay = false;
-
- @Expose
- @ConfigOption(
- name = "Todo Text",
- desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
- "\u00a7rIf you want to see the time until something is available, click \"Add\" and then the respective timer"
- )
- @ConfigEditorDraggableList(
- exampleText = {
- "\u00a73Cakes: \u00a7e1d21h",
- "\u00a73Cookie Buff: \u00a7e2d23h",
- "\u00a73Godpot: \u00a7e19h",
- "\u00a73Puzzler: \u00a7e13h",
- "\u00a73Fetchur: \u00a7e3h38m",
- "\u00a73Commissions: \u00a7e3h38m",
- "\u00a73Experiments: \u00a7e3h38m"}
- )
- @ConfigAccordionId(id = 0)
- public List<Integer> todoText = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6));
-
- @ConfigOption(
- name = "Show Only If Soon",
- desc = ""
- )
- @ConfigAccordionId(id = 0)
- @ConfigEditorAccordion(id = 1)
- public boolean TodoAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Experimentation Display",
- desc = "Change the way the experimentation timer displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int experimentationDisplay = 0;
-
-
- @Expose
- @ConfigOption(
- name = "Puzzler Reset Display",
- desc = "Change the way the puzzler reset timer displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int puzzlerDisplay = 0;
-
- @Expose
- @ConfigOption(
- name = "Fetchur Reset Display",
- desc = "Change the way the fetchur reset timer displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int fetchurDisplay = 0;
-
- @Expose
- @ConfigOption(
- name = "Commission timer Display",
- desc = "Change the way the Commission timer displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int commissionDisplay = 0;
-
- @Expose
- @ConfigOption(
- name = "Cake Buff Display",
- desc = "Change the way the cake buff timer displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int cakesDisplay = 0;
-
- @Expose
- @ConfigOption(
- name = "Cookie Buff Display",
- desc = "Change the way the cookie buff displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int cookieBuffDisplay = 0;
-
- @Expose
- @ConfigOption(
- name = "God Pot Display",
- desc = "Change the way the god pot displays\n" +
- "Only when ready, When very Soon, When soon, When kinda soon or always."
- )
- @ConfigAccordionId(id =1)
- @ConfigEditorDropdown(
- values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
- )
- public int godpotDisplay = 0;
-
- @ConfigOption(
- name = "Colours",
- desc = ""
- )
-
- @ConfigEditorAccordion(id = 2)
- @ConfigAccordionId(id = 0)
- public boolean TodoColourAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Ready colour",
- desc = "Change the colour of when the timer is ready"
-
- )
- @ConfigEditorDropdown(
- values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
- )
- @ConfigEditorAccordion(id = 2)
- public int readyColour = 0;
-
- @Expose
- @ConfigOption(
- name = "Gone colour",
- desc = "Change the colour of when the timer is gone"
-
- )
- @ConfigEditorDropdown(
- values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
- )
- @ConfigEditorAccordion(id = 2)
- public int goneColour = 0;
-
- @Expose
- @ConfigOption(
- name = "Very soon colour",
- desc = "Change the colour of when the timer is almost ready/gone"
-
- )
- @ConfigEditorDropdown(
- values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
- )
- @ConfigEditorAccordion(id = 2)
- public int verySoonColour = 0;
-
- @Expose
- @ConfigOption(
- name = "Soon Colour",
- desc = "Change the colour of when the timer is soon ready/gone"
-
- )
- @ConfigEditorDropdown(
- values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
- )
- @ConfigEditorAccordion(id = 2)
- public int soonColour = 0;
-
- @Expose
- @ConfigOption(
- name = "Kinda Soon Colour",
- desc = "Change the colour of when the timer is kinda soon ready/gone"
-
- )
- @ConfigEditorDropdown(
- values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
- )
- @ConfigEditorAccordion(id = 2)
- public int kindaSoonColour = 0;
-
-
- @Expose
- @ConfigOption(
- name = "Default Colour",
- desc = "Change the default colour of the timers"
-
- )
-
- @ConfigEditorDropdown(
- values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
- )
- @ConfigEditorAccordion(id = 2)
- public int defaultColour = 0;
-
- @Expose
- @ConfigOption(
- name = "Todo Position",
- desc = "Change the position of the Todo overlay"
- )
- @ConfigEditorButton(
- runnableId = 5,
- buttonText = "Edit"
- )
- @ConfigAccordionId(id = 0)
- public Position todoPosition = new Position(100, 0);
-
-
- @Expose
- @ConfigOption(
- name = "Todo Style",
- desc = "Change the style of the todo overlay"
- )
- @ConfigEditorDropdown(
- values = {"Background", "No Shadow", "Shadow", "Full Shadow"}
- )
- @ConfigAccordionId(id = 0)
- public int todoStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Todo Icons",
- desc = "Add little item icons next to the lines in the todo overlay"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean todoIcons = true;
- }
-
- public static class StorageGUI {
- @ConfigOption(
- name = "Storage Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 1)
- public boolean storageOverlayAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Storage GUI",
- desc = "Show a custom storage overlay when accessing /storage." +
- "Makes switching between pages much easier and also allows for searching through all storages"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean enableStorageGUI = false;
-
- @Expose
- @ConfigOption(
- name = "Storage Height",
- desc = "Change the height of the storage preview section. Increasing this allows more storages to be seen at once"
- )
- @ConfigEditorSlider(
- minValue = 104,
- maxValue = 312,
- minStep = 26
- )
- @ConfigAccordionId(id = 1)
- public int storageHeight = 208;
-
- @Expose
- @ConfigOption(
- name = "Storage Style",
- desc = "Change the visual style of the overlay"
- )
- @ConfigEditorDropdown(
- values = {"Transparent", "Minecraft", "Dark", "Custom"}
- )
- @ConfigAccordionId(id = 1)
- public int displayStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Enderchest Preview",
- desc = "Preview Enderchest pages when hovering over the selector on the left side"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean enderchestPreview = true;
-
- @Expose
- @ConfigOption(
- name = "Backpack Preview",
- desc = "Preview Backpacks when hovering over the selector on the left side"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean backpackPreview = false;
-
- @Expose
- @ConfigOption(
- name = "Compact Vertically",
- desc = "Remove the space between backpacks when there is a size discrepancy"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean masonryMode = false;
-
- @ConfigOption(
- name = "Inventory Backpacks",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean inventorySlotAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Inventory Backpacks",
- desc = "Add a \"10th slot\" to your inventory which allows you to quickly access your backpacks"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean showInvBackpack = false;
-
- //public boolean showInvBackpack = false;
-
- @Expose
- @ConfigOption(
- name = "Backpack Side",
- desc = "Set which side of the hotbar the backpack slot shows"
- )
- @ConfigEditorDropdown(
- values = {"Left", "Right"}
- )
- @ConfigAccordionId(id = 0)
- public int backpackHotbarSide = 0;
-
- @Expose
- @ConfigOption(
- name = "Backpack Peeking",
- desc = "When the backpack is selected, show it's contents on your screen"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean showInvBackpackPreview = true;
-
- @Expose
- @ConfigOption(
- name = "Backpack Opacity%",
- desc = "Change the opacity of the backpack preview background"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 100,
- minStep = 5
- )
- @ConfigAccordionId(id = 0)
- public int backpackOpacity = 50;
-
- @Expose
- @ConfigOption(
- name = "Backpack Scroll Key",
- desc = "Change the key which needs to be pressed in order to allow backpacks to be scrolled between"
- )
- @ConfigEditorKeybind(defaultKey = Keyboard.KEY_LSHIFT)
- @ConfigAccordionId(id = 0)
- public int backpackScrollKey = Keyboard.KEY_LSHIFT;
-
- @Expose
- @ConfigOption(
- name = "Backpack Hotkey",
- desc = "Hotkey to quickly switch to the backpack slot"
- )
- @ConfigEditorKeybind(defaultKey = Keyboard.KEY_GRAVE)
- @ConfigAccordionId(id = 0)
- public int backpackHotkey = Keyboard.KEY_GRAVE;
-
- @Expose
- @ConfigOption(
- name = "Arrow Key Backpacks",
- desc = "Use arrow keys [LEFT],[RIGHT] to move between backpacks and [DOWN] to navigate backpack even when the slot is not selected. Keys are customizable below"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean arrowKeyBackpacks = false;
-
- @ConfigOption(
- name = "Arrow Key Backpack Keybinds",
- desc = ""
- )
- @ConfigEditorAccordion(id = 2)
- @ConfigAccordionId(id = 0)
- public boolean backpackArrowAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Backpack Left",
- desc = "Select the backpack to the left"
- )
- @ConfigEditorKeybind(defaultKey = Keyboard.KEY_LEFT)
- @ConfigAccordionId(id = 2)
- public int arrowLeftKey = Keyboard.KEY_LEFT;
-
- @Expose
- @ConfigOption(
- name = "Backpack Right",
- desc = "Select the backpack to the right"
- )
- @ConfigEditorKeybind(defaultKey = Keyboard.KEY_RIGHT)
- @ConfigAccordionId(id = 2)
- public int arrowRightKey = Keyboard.KEY_RIGHT;
-
- @Expose
- @ConfigOption(
- name = "Backpack Open",
- desc = "Open the selected backpack"
- )
- @ConfigEditorKeybind(defaultKey = Keyboard.KEY_DOWN)
- @ConfigAccordionId(id = 2)
- public int arrowDownKey = Keyboard.KEY_DOWN;
- }
-
- public static class EnchSolvers {
- @Expose
- @ConfigOption(
- name = "Enable Solvers",
- desc = "Turn on solvers for the experimentation table"
- )
- @ConfigEditorBoolean
- public boolean enableEnchantingSolvers = true;
-
- /*@Expose
- @ConfigOption(
- name = "Prevent Misclicks",
- desc = "Prevent accidentally failing the Chronomatron and Ultrasequencer experiments"
- )
- @ConfigEditorBoolean
- public boolean preventMisclicks = true;*/
-
- @Expose
- @ConfigOption(
- name = "Hide Tooltips",
- desc = "Hide the tooltip of items in the Chronomatron and Ultrasequencer experiments"
- )
- @ConfigEditorBoolean
- public boolean hideTooltips = true;
-
- @Expose
- @ConfigOption(
- name = "Ultrasequencer Numbers",
- desc = "Replace the items in the supersequencer with only numbers"
- )
- @ConfigEditorBoolean
- public boolean seqNumbers = false;
-
- @Expose
- @ConfigOption(
- name = "Ultrasequencer Next",
- desc = "Set the colour of the glass pane shown behind the element in the ultrasequencer which is next"
- )
- @ConfigEditorDropdown(
- values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
- "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
- )
- public int seqNext = 6;
-
- @Expose
- @ConfigOption(
- name = "Ultrasequencer Upcoming",
- desc = "Set the colour of the glass pane shown behind the element in the ultrasequencer which is coming after \"next\""
- )
- @ConfigEditorDropdown(
- values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
- "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
- )
- public int seqUpcoming = 5;
-
- @Expose
- @ConfigOption(
- name = "Superpairs Matched",
- desc = "Set the colour of the glass pane shown behind successfully matched pairs"
- )
- @ConfigEditorDropdown(
- values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
- "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
- )
- public int supMatched = 6;
-
- @Expose
- @ConfigOption(
- name = "Superpairs Possible",
- desc = "Set the colour of the glass pane shown behind pairs which can be matched, but have not yet"
- )
- @ConfigEditorDropdown(
- values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
- "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
- )
- public int supPossible = 2;
-
- @Expose
- @ConfigOption(
- name = "Superpairs Unmatched",
- desc = "Set the colour of the glass pane shown behind pairs which have been previously uncovered"
- )
- @ConfigEditorDropdown(
- values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
- "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
- )
- public int supUnmatched = 5;
-
- @Expose
- @ConfigOption(
- name = "Superpairs Powerups",
- desc = "Set the colour of the glass pane shown behind powerups"
- )
- @ConfigEditorDropdown(
- values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
- "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
- )
- public int supPower = 11;
- }
-
- public static class Mining {
- @ConfigOption(
- name = "Waypoints",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean waypointsAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Mines Waypoints",
- desc = "Show waypoints in the Dwarven mines to the various locations\n" +
- "Use \"Commissions Only\" to only show active commission locations"
- )
- @ConfigEditorDropdown(
- values = {"Hide", "Commissions Only", "Always"},
- initialIndex = 1
- )
- @ConfigAccordionId(id = 0)
- public int locWaypoints = 1;
-
- @Expose
- @ConfigOption(
- name = "Emissary Waypoints",
- desc = "Show waypoints in the Dwarven mines to emissaries\n" +
- "Use \"Commission End\" to only show after finishing commissions"
- )
- @ConfigEditorDropdown(
- values = {"Hide", "Commission End", "Always"},
- initialIndex = 1
- )
- @ConfigAccordionId(id = 0)
- public int emissaryWaypoints = 1;
-
- @ConfigOption(
- name = "Drill Fuel Bar",
- desc = ""
- )
- @ConfigEditorAccordion(id = 1)
- public boolean drillAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Drill Fuel Bar",
- desc = "Show a fancy drill fuel bar when holding a drill in mining areas"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 1)
- public boolean drillFuelBar = true;
-
- @Expose
- @ConfigOption(
- name = "Fuel Bar Width",
- desc = "Change the width of the drill fuel bar"
- )
- @ConfigEditorSlider(
- minValue = 50,
- maxValue = 400,
- minStep = 10
- )
- @ConfigAccordionId(id = 1)
- public int drillFuelBarWidth = 200;
-
- @Expose
- @ConfigOption(
- name = "Fuel Bar Position",
- desc = "Set the position of the drill fuel bar"
- )
- @ConfigEditorButton(
- runnableId = 2,
- buttonText = "Edit"
- )
- @ConfigAccordionId(id = 1)
- public Position drillFuelBarPosition = new Position(0, -100, true, false);
-
- @ConfigOption(
- name = "Dwarven Overlay",
- desc = ""
- )
- @ConfigEditorAccordion(id = 2)
- public boolean overlayAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Dwarven Overlay",
- desc = "Show an overlay with useful information on the screen while in Dwarven Mines"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 2)
- public boolean dwarvenOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Dwarven Text",
- desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
- "\u00a7rGo to the Dwarven Mines to show this overlay with useful information"
- )
- @ConfigEditorDraggableList(
- exampleText = {"\u00a73Goblin Slayer: \u00a7626.5%\n\u00a73Lucky Raffle: \u00a7c0.0%",
- "\u00a73Mithril Powder: \u00a726,243",
- "\u00a73Forge 1) \u00a79Diamonite\u00a77: \u00a7aReady!",
- "\u00a73Forge 2) \u00a77EMPTY\n\u00a73Forge 3) \u00a77EMPTY\n\u00a73Forge 4) \u00a77EMPTY",
- "\u00a73Pickaxe CD: \u00a7a78s"}
- )
- @ConfigAccordionId(id = 2)
- public List<Integer> dwarvenText = new ArrayList<>(Arrays.asList(0, 1, 4, 2, 3));
-
- @Expose
- @ConfigOption(
- name = "Overlay Position",
- desc = "Change the position of the Dwarven Mines information overlay (commisions, powder & forge statuses)"
- )
- @ConfigEditorButton(
- runnableId = 1,
- buttonText = "Edit"
- )
- @ConfigAccordionId(id = 2)
- public Position overlayPosition = new Position(10, 100);
-
- @Expose
- @ConfigOption(
- name = "Overlay Style",
- desc = "Change the style of the Dwarven Mines information overlay"
- )
- @ConfigEditorDropdown(
- values = {"Background", "No Shadow", "Shadow", "Full Shadow"}
- )
- @ConfigAccordionId(id = 2)
- public int overlayStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Puzzler Solver",
- desc = "Show the correct block to mine for the puzzler puzzle in Dwarven Mines"
- )
- @ConfigEditorBoolean
- public boolean puzzlerSolver = true;
-
- @Expose
- @ConfigOption(
- name = "Titanium Alert",
- desc = "Show an alert whenever titanium appears nearby"
- )
- @ConfigEditorBoolean
- public boolean titaniumAlert = true;
-
-
- @Expose
- @ConfigOption(
- name = "Dwarven Mines Textures",
- desc = "Allows texture packs to retexture blocks in the Dwarven Mines. If you don't have a texturepack that does this, you should leave this off"
- )
- @ConfigEditorBoolean
- public boolean dwarvenTextures = false;
-
- /*@Expose
- @ConfigOption(
- name = "Don't Mine Stone",
- desc = "Prevent mining stone blocks in mining areas"
- )
- @ConfigEditorBoolean
- public boolean dontMineStone = true;
-
- @Expose
- @ConfigOption(
- name = "Reveal Mist Creepers",
- desc = "Make the creepers in the Dwarven Mines mist visible"
- )
- @ConfigEditorBoolean
- public boolean revealMistCreepers = true;*/
- }
-
- public static class Fishing {
- @Expose
- @ConfigOption(
- name = "Hide Other Players Fishing",
- desc = "Convenience option to easily hide \u00a7lother players'\u00a7r bobbers, rod lines and fishing particles\n" +
- "The advanced options below allow you to set the precise colour, particles, etc."
- )
- @ConfigEditorBoolean
- public boolean hideOtherPlayerAll = false;
-
- @ConfigOption(
- name = "Incoming Fish Warning",
- desc = ""
- )
- @ConfigEditorAccordion(id = 3)
- public boolean incomingFishAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Incoming Fish Warning",
- desc = "Display a yellow '!' when a fish is incoming and a red '!' when you need to pull the fish up. " +
- "The red '!' also takes your ping into account"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 3)
- public boolean incomingFishWarning = true;
-
- @Expose
- @ConfigOption(
- name = "Hooked Sound",
- desc = "Play a high-pitched ding sound when the '!' turns red"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 3)
- public boolean incomingFishHookedSounds = true;
-
- @Expose
- @ConfigOption(
- name = "Approach Sound",
- desc = "Play low-pitched ding sounds while the yellow '!' is visible"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 3)
- public boolean incomingFishIncSounds = false;
-
- @ConfigOption(
- name = "Volumes",
- desc = ""
- )
- @ConfigAccordionId(id = 3)
- @ConfigEditorAccordion(id = 5)
- public boolean incomingFishVolumeAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Hooked Sound Vol.",
- desc = "Set the volume of the hooked sound"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 100,
- minStep = 1
- )
- @ConfigAccordionId(id = 5)
- public float incomingFishHookedSoundsVol = 25;
-
- @Expose
- @ConfigOption(
- name = "Approach Sound Vol.",
- desc = "Set the volume of the approaching sound"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 100,
- minStep = 1
- )
- @ConfigAccordionId(id = 5)
- public float incomingFishIncSoundsVol = 10;
-
- @ConfigOption(
- name = "Fishing Particles",
- desc = ""
- )
- @ConfigEditorAccordion(id = 0)
- public boolean particleAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Custom Particles",
- desc = "Allow you to modify the particles that appear when a fish is incoming for you and other players"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 0)
- public boolean enableCustomParticles = false;
-
- @ConfigOption(
- name = "Your Particles",
- desc = ""
- )
- @ConfigEditorAccordion(id = 1)
- @ConfigAccordionId(id = 0)
- public boolean yourParticlesAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Particle Type",
- desc = "Change the type of the particle that is spawned\n" +
- "Particle types with (RGB) support custom colours\n" +
- "Set to 'NONE' to disable particles"
- )
- @ConfigEditorDropdown(
- values = {"Default", "None", "Spark (RGB)", "Swirl (RGB)", "Dust (RGB)", "Flame", "Crit", "Magic Crit"}
- )
- @ConfigAccordionId(id = 1)
- public int yourParticleType = 0;
-
- @Expose
- @ConfigOption(
- name = "Custom Colour",
- desc = "Set a custom colour for the particle\n" +
- "Only works for particle types with (RGB)"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 1)
- public String yourParticleColour = "0:255:255:255:255";
-
- @ConfigOption(
- name = "Other Players' Particles",
- desc = ""
- )
- @ConfigEditorAccordion(id = 2)
- @ConfigAccordionId(id = 0)
- public boolean otherParticlesAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Particle Type",
- desc = "Change the type of the particle that is spawned\n" +
- "Particle types with (RGB) support custom colours\n" +
- "Set to 'NONE' to disable particles"
- )
- @ConfigEditorDropdown(
- values = {"Default", "None", "Spark (RGB)", "Swirl (RGB)", "Dust (RGB)", "Flame", "Crit", "Magic Crit"}
- )
- @ConfigAccordionId(id = 2)
- public int otherParticleType = 0;
-
- @Expose
- @ConfigOption(
- name = "Custom Colour",
- desc = "Set a custom colour for the particle\n" +
- "Only works for particle types with (RGB)"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 2)
- public String otherParticleColour = "0:255:255:255:255";
-
- @ConfigOption(
- name = "Rod Line Colours",
- desc = ""
- )
- @ConfigEditorAccordion(id = 4)
- public boolean rodAccordion = false;
-
- @Expose
- @ConfigOption(
- name = "Enable Rod Line Colours",
- desc = "Change the colour of your and other players' rod lines\n" +
- "Also fixes the position of the rod line"
- )
- @ConfigEditorBoolean
- @ConfigAccordionId(id = 4)
- public boolean enableRodColours = true;
-
- @Expose
- @ConfigOption(
- name = "Own Rod Colour",
- desc = "Change the colour of your own rod lines\n" +
- "You can set the opacity to '0' to HIDE"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 4)
- public String ownRodColour = "0:255:0:0:0";
-
- @Expose
- @ConfigOption(
- name = "Other Rod Colour",
- desc = "Change the colour of other players' rod lines\n" +
- "You can set the opacity to '0' to HIDE"
- )
- @ConfigEditorColour
- @ConfigAccordionId(id = 4)
- public String otherRodColour = "0:255:0:0:0";
- }
-
- public static class NeuAuctionHouse {
- @Expose
- @ConfigOption(
- name = "Enable NeuAH",
- desc = "Turn on the NEU Auction House. \u00A7cWARNING: May negatively impact performance on low-end machines"
- )
- @ConfigEditorBoolean
- public boolean enableNeuAuctionHouse = false;
-
- @Expose
- @ConfigOption(
- name = "Disable AH Scroll",
- desc = "Disable scrolling using the scroll wheel inside NeuAH.\n" +
- "This should be used if you want to be able to scroll through tooltips"
- )
- @ConfigEditorBoolean
- public boolean disableAhScroll = false;
-
- @Expose
- @ConfigOption(
- name = "AH Notification (Mins)",
- desc = "Change the amount of time (in minutes) before the \"Ending Soon\" notification for an auction you have bid on"
- )
- @ConfigEditorSlider(
- minValue = 1f,
- maxValue = 10f,
- minStep = 1f
- )
- public int ahNotification = 5;
-
- @Expose
- @ConfigOption(
- name = "Price Filtering in NEU AH",
- desc = "The ability to filter the price of items and their respective average BIN values"
- )
- @ConfigEditorBoolean
- public boolean priceFiltering = false;
- }
-
- public static class ImprovedSBMenu {
- @Expose
- @ConfigOption(
- name = "Enable Improved SB Menus",
- desc = "Change the way that skyblock menus (eg. /sbmenu) look"
- )
- @ConfigEditorBoolean
- public boolean enableSbMenus = true;
-
- @Expose
- @ConfigOption(
- name = "Menu Background Style",
- desc = "Change the style of the background of skyblock menus"
- )
- @ConfigEditorDropdown(
- values = {"Dark 1", "Dark 2", "Transparent", "Light 1", "Light 2", "Light 3",
- "Unused 1", "Unused 2", "Unused 3", "Unused 4"}
- )
- public int backgroundStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Button Background Style",
- desc = "Change the style of the foreground elements in skyblock menus"
- )
- @ConfigEditorDropdown(
- values = {"Dark 1", "Dark 2", "Transparent", "Light 1", "Light 2", "Light 3",
- "Unused 1", "Unused 2", "Unused 3", "Unused 4"}
- )
- public int buttonStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Hide Empty Tooltips",
- desc = "Hide the tooltips of glass panes with no text"
- )
- @ConfigEditorBoolean
- public boolean hideEmptyPanes = true;
- }
-
- public static class Calendar {
- @Expose
- @ConfigOption(
- name = "Event Notifications",
- desc = "Display notifications for skyblock calendar events"
- )
- @ConfigEditorBoolean
- public boolean eventNotifications = true;
-
- @Expose
- @ConfigOption(
- name = "Starting Soon Time",
- desc = "Display a notification before events start, time in seconds.\n" +
- "0 = No prior notification"
- )
- @ConfigEditorSlider(
- minValue = 0f,
- maxValue = 600f,
- minStep = 30f
- )
- public int startingSoonTime = 300;
-
- @Expose
- @ConfigOption(
- name = "Timer In Inventory",
- desc = "Displays the time until the next event at the top of your screen when in inventories"
- )
- @ConfigEditorBoolean
- public boolean showEventTimerInInventory = true;
-
- @Expose
- @ConfigOption(
- name = "Notification Sounds",
- desc = "Play a sound whenever events start"
- )
- @ConfigEditorBoolean
- public boolean eventNotificationSounds = true;
-
- @Expose
- @ConfigOption(
- name = "Spooky Night Notification",
- desc = "Send a notification during spooky event when the time reaches 7pm"
- )
- @ConfigEditorBoolean
- public boolean spookyNightNotification = true;
- }
-
- public static class TradeMenu {
- @Expose
- @ConfigOption(
- name = "Enable Custom Trade Menu",
- desc = "When trading with other players in skyblock, display a special GUI designed to prevent scamming"
- )
- @ConfigEditorBoolean
- public boolean enableCustomTrade = true;
-
-
- @Expose
- @ConfigOption(
- name = "Price Information",
- desc = "Show the price of items in the trade window on both sides"
- )
- @ConfigEditorBoolean
- public boolean customTradePrices = true;
-
- @Expose
- public boolean customTradePriceStyle = true;
- }
-
- public static class PetOverlay {
- @Expose
- @ConfigOption(
- name = "Enable Pet Info Overlay",
- desc = "Shows current active pet and pet exp on screen."
- )
- @ConfigEditorBoolean
- public boolean enablePetInfo = false;
-
- @Expose
- @ConfigOption(
- name = "Pet Info Position",
- desc = "The position of the pet info."
- )
- @ConfigEditorButton(
- runnableId = 4,
- buttonText = "Edit"
- )
- public Position petInfoPosition = new Position(-1, -1);
-
- @Expose
- @ConfigOption(
- name = "Pet Overlay Text",
- desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
- "\u00a7rEquip a pet to show the overlay"
- )
- @ConfigEditorDraggableList(
- exampleText = {"\u00a7a[Lvl 37] \u00a7fRock",
- "\u00a7b2,312.9/2,700\u00a7e (85.7%)",
- "\u00a7b2.3k/2.7k\u00a7e (85.7%)",
- "\u00a7bXP/h: \u00a7e27,209",
- "\u00a7bTotal XP: \u00a7e30,597.9",
- "\u00a7bHeld Item: \u00a7fMining Exp Boost",
- "\u00a7bUntil L38: \u00a7e5m13s",
- "\u00a7bUntil L100: \u00a7e2d13h"}
- )
- public List<Integer> petOverlayText = new ArrayList<>(Arrays.asList(0, 2, 3, 6, 4));
-
- @Expose
- @ConfigOption(
- name = "Pet Overlay Icon",
- desc = "Show the icon of the pet you have equiped in the overlay"
- )
- @ConfigEditorBoolean
- public boolean petOverlayIcon = true;
-
- @Expose
- @ConfigOption(
- name = "Pet Info Overlay Style",
- desc = "Change the style of the Pet Info overlay"
- )
- @ConfigEditorDropdown(
- values = {"Background", "No Shadow", "Shadow Only", "Full Shadow"}
- )
- public int petInfoOverlayStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Show Last Pet",
- desc = "Show 2 pets on the overlay\nUseful if training two pets at once with autopet"
- )
- @ConfigEditorBoolean
- public boolean dualPets = false;
- }
-
- public static class AuctionHouseSearch {
- @Expose
- @ConfigOption(
- name = "Enable Search GUI",
- desc = "Use the advanced search GUI with autocomplete and history instead of the normal sign GUI\n\u00a7eStar Selection Texture: Johnny#4567"
- )
- @ConfigEditorBoolean
- public boolean enableSearchOverlay = true;
-
- @Expose
- @ConfigOption(
- name = "Keep Previous Search",
- desc = "Don't clear the search bar after closing the GUI"
- )
- @ConfigEditorBoolean
- public boolean keepPreviousSearch = false;
-
- @Expose
- @ConfigOption(
- name = "Past Searches",
- desc = "Show past searches below the autocomplete box"
- )
- @ConfigEditorBoolean
- public boolean showPastSearches = true;
-
- @Expose
- @ConfigOption(
- name = "ESC to Full Close",
- desc = "Make pressing ESCAPE close the search GUI without opening up the AH again\n" +
- "ENTER can still be used to search"
- )
- @ConfigEditorBoolean
- public boolean escFullClose = true;
- }
-
- public static class AccessoryBag {
- @Expose
- @ConfigOption(
- name = "Enable Accessory Bag Overlay",
- desc = "Show an overlay on the accessory bag screen which gives useful information about your accessories"
- )
- @ConfigEditorBoolean
- public boolean enableOverlay = true;
- }
-
- public static class ApiKey {
- @Expose
- @ConfigOption(
- name = "Api Key",
- desc = "Hypixel api key"
- )
- @ConfigEditorText
- public String apiKey = "";
- }
-
- private static ArrayList<String> createDefaultQuickCommands() {
- ArrayList<String> arr = new ArrayList<>();
- arr.add("/warp home:Warp Home:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0=");
- arr.add("/warp hub:Warp Hub:eyJ0aW1lc3RhbXAiOjE1NTkyMTU0MTY5MDksInByb2ZpbGVJZCI6IjQxZDNhYmMyZDc0OTQwMGM5MDkwZDU0MzRkMDM4MzFiIiwicHJvZmlsZU5hbWUiOiJNZWdha2xvb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Q3Y2M2Njg3NDIzZDA1NzBkNTU2YWM1M2UwNjc2Y2I1NjNiYmRkOTcxN2NkODI2OWJkZWJlZDZmNmQ0ZTdiZjgifX19");
- arr.add("/warp dungeon_hub:Dungeon Hub:eyJ0aW1lc3RhbXAiOjE1Nzg0MDk0MTMxNjksInByb2ZpbGVJZCI6IjQxZDNhYmMyZDc0OTQwMGM5MDkwZDU0MzRkMDM4MzFiIiwicHJvZmlsZU5hbWUiOiJNZWdha2xvb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliNTY4OTViOTY1OTg5NmFkNjQ3ZjU4NTk5MjM4YWY1MzJkNDZkYjljMWIwMzg5YjhiYmViNzA5OTlkYWIzM2QiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==");
- arr.add("/craft:Crafting Table:CRAFTING_TABLE");
- arr.add("/storage:Storage:CHEST");
- arr.add("/wardrobe:Wardrobe:LEATHER_CHESTPLATE");
- arr.add("/pets:Pets:BONE");
- arr.add("neuah:NEU Auction House:GOLD_BLOCK");
- arr.add("/bz:Bazaar:GOLD_BARDING");
- return arr;
- }
-
- public HiddenProfileSpecific getProfileSpecific() {
- if(SBInfo.getInstance().currentProfile == null) {
- return null;
- }
- return hidden.profileSpecific.computeIfAbsent(SBInfo.getInstance().currentProfile, k-> new HiddenProfileSpecific());
- }
-
- public static class HiddenProfileSpecific {
- @Expose public long godPotionDuration = 0L;
- @Expose public long puzzlerCompleted = 0L;
- @Expose public long firstCakeAte = 0L;
- @Expose public long fetchurCompleted = 0L;
- @Expose public long commissionsCompleted = 0L;
- @Expose public long experimentsCompleted = 0L;
- @Expose public long cookieBuffRemaining = 0L;
-
- @Expose public int commissionMilestone = 0;
- }
-
- public static class Hidden {
- @Expose public HashMap<String, HiddenProfileSpecific> profileSpecific = new HashMap<>();
- @Expose public List<InventoryButton> inventoryButtons = createDefaultInventoryButtons();
-
- @Expose public boolean enableItemEditing = false;
- @Expose public boolean cacheRenderedItempane = true;
- @Expose public boolean autoupdate = true;
- @Expose public String overlaySearchBar = "";
- @Expose public String overlayQuickCommand = "";
- @Expose public boolean dev = false;
- @Expose public boolean loadedModBefore = false;
- @Expose public String selectedCape = null;
- @Expose public int compareMode = 0;
- @Expose public int sortMode = 0;
- @Expose public ArrayList<Boolean> compareAscending = Lists.newArrayList(true, true, true);
- @Expose public ArrayList<String> favourites = new ArrayList<>();
- @Expose public ArrayList<String> previousAuctionSearches = new ArrayList<>();
- @Expose public ArrayList<String> eventFavourites = new ArrayList<>();
- @Expose public ArrayList<String> quickCommands = createDefaultQuickCommands();
- @Expose public ArrayList<String> enchantColours = Lists.newArrayList(
- "[a-zA-Z\\- ]+:\u003e:9:6:0",
- "[a-zA-Z\\- ]+:\u003e:6:c:0",
- "[a-zA-Z\\- ]+:\u003e:5:5:0",
- "Experience:\u003e:3:5:0",
- "Life Steal:\u003e:3:5:0",
- "Scavenger:\u003e:3:5:0",
- "Looting:\u003e:3:5:0");
- }
-
- public static List<InventoryButton> createDefaultInventoryButtons() {
- List<InventoryButton> buttons = new ArrayList<>();
- //Below crafting
- buttons.add(new InventoryButton(87, 63, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+21, 63, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+21*2, 63, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+21*3, 63, null, true, false, false, 0, ""));
-
- //Above crafting
- buttons.add(new InventoryButton(87, 5, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+21, 5, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+21*2, 5, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+21*3, 5, null, true, false, false, 0, ""));
-
- //Crafting square
- buttons.add(new InventoryButton(87, 25, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+18, 25, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87, 25+18, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(87+18, 25+18, null, true, false, false, 0, ""));
-
- //Crafting result
- buttons.add(new InventoryButton(143, 35, null, true, false, false, 0, ""));
-
- //Player menu area
- buttons.add(new InventoryButton(60, 8, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(60, 60, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(26, 8, null, true, false, false, 0, ""));
- buttons.add(new InventoryButton(26, 60, null, true, false, false, 0, ""));
-
- //Right side
- for(int i=0; i<8; i++) {
- int y = 2+20*i;
- if(y < 80) {
- buttons.add(new InventoryButton(2, 2+20*i, null, false, true, false, 0, ""));
- } else {
- buttons.add(new InventoryButton(2, 2+20*i-166, null, false, true, true, 0, ""));
- }
- }
-
- //Top side
- for(int i=0; i<8; i++) {
- buttons.add(new InventoryButton(4+21*i, -19, null, false, false, false, 0, ""));
- }
-
- //Left side
- for(int i=0; i<8; i++) {
- int y = 2+20*i;
- if(y < 80) {
- buttons.add(new InventoryButton(-19, 2+20*i, null, false, false, false, 0, ""));
- } else {
- buttons.add(new InventoryButton(-19, 2+20*i-166, null, false, false, true, 0, ""));
- }
- }
-
- //Bottom side
- for(int i=0; i<8; i++) {
- buttons.add(new InventoryButton(4+21*i, 2, null, false, false, true, 0, ""));
- }
- return buttons;
- }
-
- public static class InventoryButton {
- @Expose public int x;
- @Expose public int y;
- @Expose public boolean playerInvOnly;
-
- @Expose public boolean anchorRight;
- @Expose public boolean anchorBottom;
-
- @Expose public int backgroundIndex;
- @Expose public String command;
- @Expose public String icon;
-
- public boolean isActive() {
- return command.trim().length() > 0;
- }
-
- public InventoryButton(int x, int y, String icon, boolean playerInvOnly, boolean anchorRight, boolean anchorBottom, int backgroundIndex, String command) {
- this.x = x;
- this.y = y;
- this.icon = icon;
- this.playerInvOnly = playerInvOnly;
- this.anchorRight = anchorRight;
- this.anchorBottom = anchorBottom;
- this.backgroundIndex = backgroundIndex;
- this.command = command;
- }
- }
-
- public static class DungeonMap {
- @Expose
- @ConfigOption(
- name = "Border Size",
- desc = "Changes the size of the map border, without changing the size of the contents"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 5,
- minStep = 0.25f
- )
- public float dmBorderSize = 1;
-
- @Expose
- @ConfigOption(
- name = "Room Size",
- desc = "Changes the size of rooms. Useful for higher dungeons with larger maps"
- )
- @ConfigEditorSlider(
- minValue = 0,
- maxValue = 5,
- minStep = 0.25f
- )
- public float dmRoomSize = 1;
-
- @Expose
- @ConfigOption(
- name = "Icon Size",
- desc = "Changes the scale of room indicators and player icons"
- )
- @ConfigEditorSlider(
- minValue = 0.5f,
- maxValue = 3f,
- minStep = 0.25f
- )
- public float dmIconScale = 1.0f;
-
- @Expose
- @ConfigOption(
- name = "Border Style",
- desc = "Various custom borders from various talented artists.\nUse 'custom' if your texture pack has a custom border"
- )
- public int dmBorderStyle = 0;
-
- @Expose
- @ConfigOption(
- name = "Show Dungeon Map",
- desc = "Show/hide the NEU dungeon map"
- )
- public boolean dmEnable = true;
-
- @Expose
- @ConfigOption(
- name = "Map Center",
- desc = "Center on rooms, or center on your player"
- )
- public boolean dmCenterPlayer = true;
-
- @Expose
- @ConfigOption(
- name = "Rotate with Player",
- desc = "Rotate the map to face the same direction as your player"
- )
- public boolean dmRotatePlayer = true;
-
- @Expose
- @ConfigOption(
- name = "Orient Checkmarks",
- desc = "Checkmarks will always show vertically, regardless of rotation"
- )
- public boolean dmOrientCheck = true;
-
- @Expose
- @ConfigOption(
- name = "Center Checkmarks",
- desc = "Checkmarks will show closer to the center of rooms"
- )
- public boolean dmCenterCheck = false;
-
- @Expose
- @ConfigOption(
- name = "Player Icon Style",
- desc = "Various player icon styles"
- )
- public int dmPlayerHeads = 0;
-
- @Expose
- @ConfigOption(
- name = "Interpolate Far Players",
- desc = "Will make players far away move smoothly"
- )
- public boolean dmPlayerInterp = true;
-
- @Expose
- @ConfigOption(
- name = "OpenGL Compatibility",
- desc = "Compatiblity options for people with bad computers. ONLY use this if you know what you are doing, otherwise the map will look worse"
- )
- public int dmCompat = 0;
-
- @Expose
- @ConfigOption(
- name = "Background Colour",
- desc = "Colour of the map background. Supports opacity & chroma"
- )
- public String dmBackgroundColour = "00:170:75:75:75";
-
- @Expose
- @ConfigOption(
- name = "Border Colour",
- desc = "Colour of the map border. Supports opacity & chroma. Turn off custom borders to see"
- )
- public String dmBorderColour = "00:0:0:0:0";
-
- @Expose
- @ConfigOption(
- name = "Chroma Border Mode",
- desc = "Applies a hue offset around the map border"
- )
- public boolean dmChromaBorder = false;
-
- @Expose
- @ConfigOption(
- name = "Background Blur Factor",
- desc = "Changes the blur factor behind the map. Set to 0 to disable blur"
- )
- public float dmBackgroundBlur = 0;
-
- @Expose
- @ConfigOption(
- name = "Position",
- desc = "The position of the map"
- )
- public Position dmPosition = new Position(10, 10);
- }
-
-}
+package io.github.moulberry.notenoughupdates.options;
+
+import com.google.common.collect.Lists;
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.core.GuiScreenElementWrapper;
+import io.github.moulberry.notenoughupdates.core.config.Config;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+import io.github.moulberry.notenoughupdates.core.config.gui.GuiPositionEditor;
+import io.github.moulberry.notenoughupdates.miscgui.GuiEnchantColour;
+import io.github.moulberry.notenoughupdates.miscgui.GuiInvButtonEditor;
+import io.github.moulberry.notenoughupdates.miscgui.NEUOverlayPlacements;
+import io.github.moulberry.notenoughupdates.options.seperateSections.*;
+import io.github.moulberry.notenoughupdates.overlays.*;
+import io.github.moulberry.notenoughupdates.util.SBInfo;
+import net.minecraft.client.Minecraft;
+import net.minecraftforge.client.ClientCommandHandler;
+import org.lwjgl.util.vector.Vector2f;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class NEUConfig extends Config {
+
+ private void editOverlay(String activeConfig, TextOverlay overlay, Position position) {
+ Vector2f size = overlay.getDummySize();
+ int width = (int)size.x;
+ int height = (int)size.y;
+ Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(position, width, height, () -> {
+ overlay.renderDummy();
+ OverlayManager.dontRenderOverlay = overlay.getClass();
+ }, () -> {
+ }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiScreenElementWrapper(
+ new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config, activeConfig))
+ ));
+ }
+
+ @Override
+ public void executeRunnable(int runnableId) {
+ String activeConfigCategory = null;
+ if(Minecraft.getMinecraft().currentScreen instanceof GuiScreenElementWrapper) {
+ GuiScreenElementWrapper wrapper = (GuiScreenElementWrapper) Minecraft.getMinecraft().currentScreen;
+ if(wrapper.element instanceof NEUConfigEditor) {
+ activeConfigCategory = ((NEUConfigEditor)wrapper.element).getSelectedCategoryName();
+ }
+ }
+ final String activeConfigCategoryF = activeConfigCategory;
+
+ switch (runnableId) {
+ case 0:
+ ClientCommandHandler.instance.executeCommand(Minecraft.getMinecraft().thePlayer, "/neumap");
+ return;
+ case 1:
+ editOverlay(activeConfigCategory, OverlayManager.miningOverlay, mining.overlayPosition);
+ return;
+ case 2:
+ Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(
+ NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarPosition,
+ NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarWidth, 12, () -> {
+ }, () -> {
+ }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiScreenElementWrapper(
+ new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config, activeConfigCategoryF))
+ ));
+ return;
+ case 3:
+ editOverlay(activeConfigCategory, OverlayManager.farmingOverlay, skillOverlays.farmingPosition);
+ return;
+ case 4:
+ editOverlay(activeConfigCategory, OverlayManager.petInfoOverlay, petOverlay.petInfoPosition);
+ return;
+ case 5:
+ editOverlay(activeConfigCategory, OverlayManager.timersOverlay, miscOverlays.todoPosition);
+ return;
+ case 6:
+ NotEnoughUpdates.INSTANCE.openGui = new NEUOverlayPlacements();
+ return;
+ case 7:
+ NotEnoughUpdates.INSTANCE.openGui = new GuiInvButtonEditor();
+ return;
+ case 8:
+ NotEnoughUpdates.INSTANCE.openGui = new GuiEnchantColour();
+ return;
+
+ }
+ }
+
+ @Expose
+ @Category(
+ name = "Misc",
+ desc = "Miscellaneous options which don't fit into any other category"
+ )
+ public Misc misc = new Misc();
+
+ @Expose
+ @Category(
+ name = "Notifications",
+ desc = "Notifications"
+ )
+ public Notifications notifications = new Notifications();
+
+ @Expose
+ @Category(
+ name = "Item List",
+ desc = "Item List"
+ )
+ public Itemlist itemlist = new Itemlist();
+
+ @Expose
+ @Category(
+ name = "Toolbar",
+ desc = "Toolbar"
+ )
+ public Toolbar toolbar = new Toolbar();
+
+ @Expose
+ @Category(
+ name = "Inventory Buttons",
+ desc = "Inventory Buttons"
+ )
+ public InventoryButtons inventoryButtons = new InventoryButtons();
+
+
+ @Expose
+ @Category(
+ name = "Slot Locking",
+ desc = "Slot Locking"
+ )
+ public SlotLocking slotLocking = new SlotLocking();
+
+ @Expose
+ @Category(
+ name = "Tooltip Tweaks",
+ desc = "Tooltip Tweaks"
+ )
+ public TooltipTweaks tooltipTweaks = new TooltipTweaks();
+
+ @Expose
+ @Category(
+ name = "Item Overlays",
+ desc = "Item Overlays"
+ )
+ public ItemOverlays itemOverlays = new ItemOverlays();
+
+ @Expose
+ @Category(
+ name = "Skill Overlays",
+ desc = "Skill Overlays"
+ )
+ public SkillOverlays skillOverlays = new SkillOverlays();
+
+ @Expose
+ @Category(
+ name = "Misc Overlays",
+ desc = "Misc Overlays"
+ )
+ public MiscOverlays miscOverlays = new MiscOverlays();
+
+ @Expose
+ @Category(
+ name = "Storage GUI",
+ desc = "Storage GUI"
+ )
+ public StorageGUI storageGUI = new StorageGUI();
+
+ @Expose
+ @Category(
+ name = "Dungeons",
+ desc = "Dungeons"
+ )
+ public Dungeons dungeons = new Dungeons();
+
+
+ @Expose
+ @Category(
+ name = "Enchanting Solvers",
+ desc = "Enchanting Solvers"
+ )
+ public EnchSolvers enchantingSolvers = new EnchSolvers();
+
+ @Expose
+ @Category(
+ name = "Mining",
+ desc = "Mining"
+ )
+ public Mining mining = new Mining();
+
+
+ @Expose
+ @Category(
+ name = "Fishing",
+ desc = "Fishing"
+ )
+ public Fishing fishing = new Fishing();
+
+ @Expose
+ @Category(
+ name = "NEU Auction House",
+ desc = "NEU Auction House"
+ )
+ public NeuAuctionHouse neuAuctionHouse = new NeuAuctionHouse();
+
+ @Expose
+ @Category(
+ name = "Improved SB Menus",
+ desc = "Improved SB Menus"
+ )
+ public ImprovedSBMenu improvedSBMenu = new ImprovedSBMenu();
+
+ @Expose
+ @Category(
+ name = "Calendar",
+ desc = "Calendar"
+ )
+ public Calendar calendar = new Calendar();
+
+ @Expose
+ @Category(
+ name = "Trade Menu",
+ desc = "Trade Menu"
+ )
+ public TradeMenu tradeMenu = new TradeMenu();
+
+ @Expose
+ @Category(
+ name = "Pet Overlay",
+ desc = "Pet Overlay"
+ )
+ public PetOverlay petOverlay = new PetOverlay();
+
+ @Expose
+ @Category(
+ name = "AH Search GUI",
+ desc = "AH Search GUI"
+ )
+ public AuctionHouseSearch auctionHouseSearch = new AuctionHouseSearch();
+
+ @Expose
+ @Category(
+ name = "Custom Music",
+ desc = "Custom Music"
+ )
+ public CustomMusicConfig customMusic = new CustomMusicConfig();
+
+ @Expose
+ @Category(
+ name = "Accessory Bag Overlay",
+ desc = "Accessory Bag Overlay"
+ )
+ public AccessoryBag accessoryBag = new AccessoryBag();
+
+ @Expose
+ @Category(
+ name = "Api Key",
+ desc = "Api Key"
+ )
+ public ApiKey apiKey = new ApiKey();
+
+ @Expose
+ public Hidden hidden = new Hidden();
+
+ @Expose
+ public DungeonMapConfig dungeonMap = new DungeonMapConfig();
+
+ public static class Hidden {
+ @Expose
+ public HashMap<String, NEUConfig.HiddenProfileSpecific> profileSpecific = new HashMap<>();
+ @Expose public List<NEUConfig.InventoryButton> inventoryButtons = createDefaultInventoryButtons();
+
+ @Expose public boolean enableItemEditing = false;
+ @Expose public boolean cacheRenderedItempane = true;
+ @Expose public boolean autoupdate = true;
+ @Expose public String overlaySearchBar = "";
+ @Expose public String overlayQuickCommand = "";
+ @Expose public boolean dev = false;
+ @Expose public boolean loadedModBefore = false;
+ @Expose public String selectedCape = null;
+ @Expose public int compareMode = 0;
+ @Expose public int sortMode = 0;
+ @Expose public ArrayList<Boolean> compareAscending = Lists.newArrayList(true, true, true);
+ @Expose public ArrayList<String> favourites = new ArrayList<>();
+ @Expose public ArrayList<String> previousAuctionSearches = new ArrayList<>();
+ @Expose public ArrayList<String> eventFavourites = new ArrayList<>();
+ @Expose public ArrayList<String> quickCommands = createDefaultQuickCommands();
+ @Expose public ArrayList<String> enchantColours = Lists.newArrayList(
+ "[a-zA-Z\\- ]+:\u003e:9:6:0",
+ "[a-zA-Z\\- ]+:\u003e:6:c:0",
+ "[a-zA-Z\\- ]+:\u003e:5:5:0",
+ "Experience:\u003e:3:5:0",
+ "Life Steal:\u003e:3:5:0",
+ "Scavenger:\u003e:3:5:0",
+ "Looting:\u003e:3:5:0");
+ }
+
+ private static ArrayList<String> createDefaultQuickCommands() {
+ ArrayList<String> arr = new ArrayList<>();
+ arr.add("/warp home:Warp Home:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0=");
+ arr.add("/warp hub:Warp Hub:eyJ0aW1lc3RhbXAiOjE1NTkyMTU0MTY5MDksInByb2ZpbGVJZCI6IjQxZDNhYmMyZDc0OTQwMGM5MDkwZDU0MzRkMDM4MzFiIiwicHJvZmlsZU5hbWUiOiJNZWdha2xvb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2Q3Y2M2Njg3NDIzZDA1NzBkNTU2YWM1M2UwNjc2Y2I1NjNiYmRkOTcxN2NkODI2OWJkZWJlZDZmNmQ0ZTdiZjgifX19");
+ arr.add("/warp dungeon_hub:Dungeon Hub:eyJ0aW1lc3RhbXAiOjE1Nzg0MDk0MTMxNjksInByb2ZpbGVJZCI6IjQxZDNhYmMyZDc0OTQwMGM5MDkwZDU0MzRkMDM4MzFiIiwicHJvZmlsZU5hbWUiOiJNZWdha2xvb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliNTY4OTViOTY1OTg5NmFkNjQ3ZjU4NTk5MjM4YWY1MzJkNDZkYjljMWIwMzg5YjhiYmViNzA5OTlkYWIzM2QiLCJtZXRhZGF0YSI6eyJtb2RlbCI6InNsaW0ifX19fQ==");
+ arr.add("/craft:Crafting Table:CRAFTING_TABLE");
+ arr.add("/storage:Storage:CHEST");
+ arr.add("/wardrobe:Wardrobe:LEATHER_CHESTPLATE");
+ arr.add("/pets:Pets:BONE");
+ arr.add("neuah:NEU Auction House:GOLD_BLOCK");
+ arr.add("/bz:Bazaar:GOLD_BARDING");
+ return arr;
+ }
+
+ public HiddenProfileSpecific getProfileSpecific() {
+ if(SBInfo.getInstance().currentProfile == null) {
+ return null;
+ }
+ return hidden.profileSpecific.computeIfAbsent(SBInfo.getInstance().currentProfile, k-> new HiddenProfileSpecific());
+ }
+
+ public static class HiddenProfileSpecific {
+
+ @Expose public long godPotionDuration = 0l;
+ @Expose public long puzzlerCompleted = 0L;
+ @Expose public long firstCakeAte = 0L;
+ @Expose public long fetchurCompleted = 0L;
+ @Expose public long commissionsCompleted = 0L;
+ @Expose public long experimentsCompleted = 0L;
+ @Expose public long cookieBuffRemaining = 0L;
+
+ @Expose public int commissionMilestone = 0;
+ }
+
+ public static List<InventoryButton> createDefaultInventoryButtons() {
+ List<InventoryButton> buttons = new ArrayList<>();
+ //Below crafting
+ buttons.add(new InventoryButton(87, 63, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+21, 63, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+21*2, 63, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+21*3, 63, null, true, false, false, 0, ""));
+
+ //Above crafting
+ buttons.add(new InventoryButton(87, 5, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+21, 5, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+21*2, 5, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+21*3, 5, null, true, false, false, 0, ""));
+
+ //Crafting square
+ buttons.add(new InventoryButton(87, 25, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+18, 25, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87, 25+18, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(87+18, 25+18, null, true, false, false, 0, ""));
+
+ //Crafting result
+ buttons.add(new InventoryButton(143, 35, null, true, false, false, 0, ""));
+
+ //Player menu area
+ buttons.add(new InventoryButton(60, 8, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(60, 60, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(26, 8, null, true, false, false, 0, ""));
+ buttons.add(new InventoryButton(26, 60, null, true, false, false, 0, ""));
+
+ //Right side
+ for(int i=0; i<8; i++) {
+ int y = 2+20*i;
+ if(y < 80) {
+ buttons.add(new InventoryButton(2, 2+20*i, null, false, true, false, 0, ""));
+ } else {
+ buttons.add(new InventoryButton(2, 2+20*i-166, null, false, true, true, 0, ""));
+ }
+ }
+
+ //Top side
+ for(int i=0; i<8; i++) {
+ buttons.add(new InventoryButton(4+21*i, -19, null, false, false, false, 0, ""));
+ }
+
+ //Left side
+ for(int i=0; i<8; i++) {
+ int y = 2+20*i;
+ if(y < 80) {
+ buttons.add(new InventoryButton(-19, 2+20*i, null, false, false, false, 0, ""));
+ } else {
+ buttons.add(new InventoryButton(-19, 2+20*i-166, null, false, false, true, 0, ""));
+ }
+ }
+
+ //Bottom side
+ for(int i=0; i<8; i++) {
+ buttons.add(new InventoryButton(4+21*i, 2, null, false, false, true, 0, ""));
+ }
+ return buttons;
+ }
+
+ public static class InventoryButton {
+ @Expose public int x;
+ @Expose public int y;
+ @Expose public boolean playerInvOnly;
+
+ @Expose public boolean anchorRight;
+ @Expose public boolean anchorBottom;
+
+ @Expose public int backgroundIndex;
+ @Expose public String command;
+ @Expose public String icon;
+
+ public boolean isActive() {
+ return command.trim().length() > 0;
+ }
+
+ public InventoryButton(int x, int y, String icon, boolean playerInvOnly, boolean anchorRight, boolean anchorBottom, int backgroundIndex, String command) {
+ this.x = x;
+ this.y = y;
+ this.icon = icon;
+ this.playerInvOnly = playerInvOnly;
+ this.anchorRight = anchorRight;
+ this.anchorBottom = anchorBottom;
+ this.backgroundIndex = backgroundIndex;
+ this.command = command;
+ }
+ }
+
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java
new file mode 100644
index 00000000..57bae5db
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AccessoryBag.java
@@ -0,0 +1,15 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class AccessoryBag {
+ @Expose
+ @ConfigOption(
+ name = "Enable Accessory Bag Overlay",
+ desc = "Show an overlay on the accessory bag screen which gives useful information about your accessories"
+ )
+ @ConfigEditorBoolean
+ public boolean enableOverlay = true;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java
new file mode 100644
index 00000000..18786446
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ApiKey.java
@@ -0,0 +1,15 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorText;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class ApiKey {
+ @Expose
+ @ConfigOption(
+ name = "Api Key",
+ desc = "Hypixel api key"
+ )
+ @ConfigEditorText
+ public String apiKey = "";
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AuctionHouseSearch.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AuctionHouseSearch.java
new file mode 100644
index 00000000..89e25222
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/AuctionHouseSearch.java
@@ -0,0 +1,40 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class AuctionHouseSearch {
+ @Expose
+ @ConfigOption(
+ name = "Enable Search GUI",
+ desc = "Use the advanced search GUI with autocomplete and history instead of the normal sign GUI\n\u00a7eStar Selection Texture: Johnny#4567"
+ )
+ @ConfigEditorBoolean
+ public boolean enableSearchOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Keep Previous Search",
+ desc = "Don't clear the search bar after closing the GUI"
+ )
+ @ConfigEditorBoolean
+ public boolean keepPreviousSearch = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Past Searches",
+ desc = "Show past searches below the autocomplete box"
+ )
+ @ConfigEditorBoolean
+ public boolean showPastSearches = true;
+
+ @Expose
+ @ConfigOption(
+ name = "ESC to Full Close",
+ desc = "Make pressing ESCAPE close the search GUI without opening up the AH again\n" +
+ "ENTER can still be used to search"
+ )
+ @ConfigEditorBoolean
+ public boolean escFullClose = true;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java
new file mode 100644
index 00000000..fea9853a
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Calendar.java
@@ -0,0 +1,53 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class Calendar {
+ @Expose
+ @ConfigOption(
+ name = "Event Notifications",
+ desc = "Display notifications for skyblock calendar events"
+ )
+ @ConfigEditorBoolean
+ public boolean eventNotifications = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Starting Soon Time",
+ desc = "Display a notification before events start, time in seconds.\n" +
+ "0 = No prior notification"
+ )
+ @ConfigEditorSlider(
+ minValue = 0f,
+ maxValue = 600f,
+ minStep = 30f
+ )
+ public int startingSoonTime = 300;
+
+ @Expose
+ @ConfigOption(
+ name = "Timer In Inventory",
+ desc = "Displays the time until the next event at the top of your screen when in inventories"
+ )
+ @ConfigEditorBoolean
+ public boolean showEventTimerInInventory = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Notification Sounds",
+ desc = "Play a sound whenever events start"
+ )
+ @ConfigEditorBoolean
+ public boolean eventNotificationSounds = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Spooky Night Notification",
+ desc = "Send a notification during spooky event when the time reaches 7pm"
+ )
+ @ConfigEditorBoolean
+ public boolean spookyNightNotification = true;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java
new file mode 100644
index 00000000..367a6eae
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/DungeonMapConfig.java
@@ -0,0 +1,142 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class DungeonMapConfig {
+ @Expose
+ @ConfigOption(
+ name = "Border Size",
+ desc = "Changes the size of the map border, without changing the size of the contents"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 5,
+ minStep = 0.25f
+ )
+ public float dmBorderSize = 1;
+
+ @Expose
+ @ConfigOption(
+ name = "Room Size",
+ desc = "Changes the size of rooms. Useful for higher dungeons with larger maps"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 5,
+ minStep = 0.25f
+ )
+ public float dmRoomSize = 1;
+
+ @Expose
+ @ConfigOption(
+ name = "Icon Size",
+ desc = "Changes the scale of room indicators and player icons"
+ )
+ @ConfigEditorSlider(
+ minValue = 0.5f,
+ maxValue = 3f,
+ minStep = 0.25f
+ )
+ public float dmIconScale = 1.0f;
+
+ @Expose
+ @ConfigOption(
+ name = "Border Style",
+ desc = "Various custom borders from various talented artists.\nUse 'custom' if your texture pack has a custom border"
+ )
+ public int dmBorderStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Show Dungeon Map",
+ desc = "Show/hide the NEU dungeon map"
+ )
+ public boolean dmEnable = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Map Center",
+ desc = "Center on rooms, or center on your player"
+ )
+ public boolean dmCenterPlayer = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Rotate with Player",
+ desc = "Rotate the map to face the same direction as your player"
+ )
+ public boolean dmRotatePlayer = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Orient Checkmarks",
+ desc = "Checkmarks will always show vertically, regardless of rotation"
+ )
+ public boolean dmOrientCheck = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Center Checkmarks",
+ desc = "Checkmarks will show closer to the center of rooms"
+ )
+ public boolean dmCenterCheck = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Player Icon Style",
+ desc = "Various player icon styles"
+ )
+ public int dmPlayerHeads = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Interpolate Far Players",
+ desc = "Will make players far away move smoothly"
+ )
+ public boolean dmPlayerInterp = true;
+
+ @Expose
+ @ConfigOption(
+ name = "OpenGL Compatibility",
+ desc = "Compatiblity options for people with bad computers. ONLY use this if you know what you are doing, otherwise the map will look worse"
+ )
+ public int dmCompat = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Background Colour",
+ desc = "Colour of the map background. Supports opacity & chroma"
+ )
+ public String dmBackgroundColour = "00:170:75:75:75";
+
+ @Expose
+ @ConfigOption(
+ name = "Border Colour",
+ desc = "Colour of the map border. Supports opacity & chroma. Turn off custom borders to see"
+ )
+ public String dmBorderColour = "00:0:0:0:0";
+
+ @Expose
+ @ConfigOption(
+ name = "Chroma Border Mode",
+ desc = "Applies a hue offset around the map border"
+ )
+ public boolean dmChromaBorder = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Background Blur Factor",
+ desc = "Changes the blur factor behind the map. Set to 0 to disable blur"
+ )
+ public float dmBackgroundBlur = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Position",
+ desc = "The position of the map"
+ )
+ public Position dmPosition = new Position(10, 10);
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java
new file mode 100644
index 00000000..a1b34a6d
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Dungeons.java
@@ -0,0 +1,199 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+import org.lwjgl.input.Keyboard;
+
+public class Dungeons {
+ @ConfigOption(
+ name = "Dungeon Map",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean dungeonMapAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Edit Dungeon Map",
+ desc = "The NEU dungeon map has it's own editor (/neumap).\n" +
+ "Click the button on the left to open it"
+ )
+ @ConfigEditorButton(
+ runnableId = 0,
+ buttonText = "Edit"
+ )
+ @ConfigAccordionId(id = 0)
+ public int editDungeonMap = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Show Own Head As Marker",
+ desc = "If you have the \"Head\" icon style selected, don't replace your green marker with a head"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean showOwnHeadAsMarker = false;
+
+ @ConfigOption(
+ name = "Dungeon Profit",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 1)
+ public boolean dungeonProfitAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Profit Type",
+ desc = "Set the price dataset used for calculating profit"
+ )
+ @ConfigEditorDropdown(
+ values = {"Lowest BIN", "24 AVG Lowest Bin", "Auction AVG"}
+ )
+ @ConfigAccordionId(id = 1)
+ public int profitType = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Profit Display Location",
+ desc = "Set where the profit information is displayed\n" +
+ "Overlay = Overlay on right side of inventory\n" +
+ "GUI Title = Text displayed next to the inventory title\n" +
+ "Lore = Inside the \"Open Reward Chest\" item"
+ )
+ @ConfigEditorDropdown(
+ values = {"Overlay", "GUI Title", "Lore", "Off"}
+ )
+ @ConfigAccordionId(id = 1)
+ public int profitDisplayLoc = 0;
+
+
+ @ConfigOption(
+ name = "Dungeon Win Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 3)
+ public boolean dungeonWinAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Dungeon Win",
+ desc = "Show a fancy win screen and stats when completing a dungeon"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean enableDungeonWin = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Dungeon Win Time",
+ desc = "Change the amount of time (milliseconds) that the win screen shows for"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 20000,
+ minStep = 500
+ )
+ @ConfigAccordionId(id = 3)
+ public int dungeonWinMillis = 8000;
+
+ @ConfigOption(
+ name = "Dungeon Block Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 2)
+ public boolean dungeonBlocksAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Block Overlay",
+ desc = "Change the colour of certain blocks / entities while inside dungeons, but keeps the normal texture outside of dungeons"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean enableDungBlockOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Show Overlay Everywhere",
+ desc = "Show the dungeon block overlay even when not inside dungeons. Should only be used for testing."
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean dungeonBlocksEverywhere = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Slow Update",
+ desc = "Updates the colour every second instead of every tick.\n" +
+ "\u00A7cWARNING: This will cause all texture animations (eg. flowing water) to update slowly.\n" +
+ "This should only be used on low-end machines"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean slowDungeonBlocks = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Cracked Bricks",
+ desc = "Change the colour of: Cracked Bricks"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungCrackedColour = "0:255:7:255:217";
+
+ @Expose
+ @ConfigOption(
+ name = "Dispensers",
+ desc = "Change the colour of: Dispensers"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungDispenserColour = "0:255:255:76:0";
+
+ @Expose
+ @ConfigOption(
+ name = "Levers",
+ desc = "Change the colour of: Levers"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungLeverColour = "0:252:24:249:255";
+
+ @Expose
+ @ConfigOption(
+ name = "Tripwire String",
+ desc = "Change the colour of: Tripwire String"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungTripWireColour = "0:255:255:0:0";
+
+ @Expose
+ @ConfigOption(
+ name = "Normal Chests",
+ desc = "Change the colour of: Normal Chests"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungChestColour = "0:255:0:163:36";
+
+ @Expose
+ @ConfigOption(
+ name = "Trapped Chests",
+ desc = "Change the colour of: Trapped Chests"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungTrappedChestColour = "0:255:0:163:36";
+
+ @Expose
+ @ConfigOption(
+ name = "Bats",
+ desc = "Change the colour of: Bats"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String dungBatColour = "0:255:12:255:0";
+
+
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/EnchSolvers.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/EnchSolvers.java
new file mode 100644
index 00000000..c7707973
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/EnchSolvers.java
@@ -0,0 +1,106 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class EnchSolvers {
+ @Expose
+ @ConfigOption(
+ name = "Enable Solvers",
+ desc = "Turn on solvers for the experimentation table"
+ )
+ @ConfigEditorBoolean
+ public boolean enableEnchantingSolvers = true;
+
+ /*@Expose
+ @ConfigOption(
+ name = "Prevent Misclicks",
+ desc = "Prevent accidentally failing the Chronomatron and Ultrasequencer experiments"
+ )
+ @ConfigEditorBoolean
+ public boolean preventMisclicks = true;*/
+
+ @Expose
+ @ConfigOption(
+ name = "Hide Tooltips",
+ desc = "Hide the tooltip of items in the Chronomatron and Ultrasequencer experiments"
+ )
+ @ConfigEditorBoolean
+ public boolean hideTooltips = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Ultrasequencer Numbers",
+ desc = "Replace the items in the supersequencer with only numbers"
+ )
+ @ConfigEditorBoolean
+ public boolean seqNumbers = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Ultrasequencer Next",
+ desc = "Set the colour of the glass pane shown behind the element in the ultrasequencer which is next"
+ )
+ @ConfigEditorDropdown(
+ values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
+ "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
+ )
+ public int seqNext = 6;
+
+ @Expose
+ @ConfigOption(
+ name = "Ultrasequencer Upcoming",
+ desc = "Set the colour of the glass pane shown behind the element in the ultrasequencer which is coming after \"next\""
+ )
+ @ConfigEditorDropdown(
+ values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
+ "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
+ )
+ public int seqUpcoming = 5;
+
+ @Expose
+ @ConfigOption(
+ name = "Superpairs Matched",
+ desc = "Set the colour of the glass pane shown behind successfully matched pairs"
+ )
+ @ConfigEditorDropdown(
+ values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
+ "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
+ )
+ public int supMatched = 6;
+
+ @Expose
+ @ConfigOption(
+ name = "Superpairs Possible",
+ desc = "Set the colour of the glass pane shown behind pairs which can be matched, but have not yet"
+ )
+ @ConfigEditorDropdown(
+ values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
+ "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
+ )
+ public int supPossible = 2;
+
+ @Expose
+ @ConfigOption(
+ name = "Superpairs Unmatched",
+ desc = "Set the colour of the glass pane shown behind pairs which have been previously uncovered"
+ )
+ @ConfigEditorDropdown(
+ values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
+ "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
+ )
+ public int supUnmatched = 5;
+
+ @Expose
+ @ConfigOption(
+ name = "Superpairs Powerups",
+ desc = "Set the colour of the glass pane shown behind powerups"
+ )
+ @ConfigEditorDropdown(
+ values = {"None", "White", "Orange", "Light Purple", "Light Blue", "Yellow", "Light Green", "Pink",
+ "Gray", "Light Gray", "Cyan", "Dark Purple", "Dark Blue", "Brown", "Dark Green", "Red", "Black"}
+ )
+ public int supPower = 11;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java
new file mode 100644
index 00000000..3275ad46
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Fishing.java
@@ -0,0 +1,208 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+public class Fishing {
+ @Expose
+ @ConfigOption(
+ name = "Hide Other Players Fishing",
+ desc = "Convenience option to easily hide \u00a7lother players'\u00a7r bobbers, rod lines and fishing particles\n" +
+ "The advanced options below allow you to set the precise colour, particles, etc."
+ )
+ @ConfigEditorBoolean
+ public boolean hideOtherPlayerAll = false;
+
+ @ConfigOption(
+ name = "Incoming Fish Warning",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 3)
+ public boolean incomingFishAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Incoming Fish Warning",
+ desc = "Display a yellow '!' when a fish is incoming and a red '!' when you need to pull the fish up. " +
+ "The red '!' also takes your ping into account"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean incomingFishWarning = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Auto Fish",
+ desc = "shitty auto fish"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean autoFish = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Hooked Sound",
+ desc = "Play a high-pitched ding sound when the '!' turns red"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean incomingFishHookedSounds = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Approach Sound",
+ desc = "Play low-pitched ding sounds while the yellow '!' is visible"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean incomingFishIncSounds = false;
+
+ @ConfigOption(
+ name = "Volumes",
+ desc = ""
+ )
+ @ConfigAccordionId(id = 3)
+ @ConfigEditorAccordion(id = 5)
+ public boolean incomingFishVolumeAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Hooked Sound Vol.",
+ desc = "Set the volume of the hooked sound"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 100,
+ minStep = 1
+ )
+ @ConfigAccordionId(id = 5)
+ public float incomingFishHookedSoundsVol = 25;
+
+ @Expose
+ @ConfigOption(
+ name = "Approach Sound Vol.",
+ desc = "Set the volume of the approaching sound"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 100,
+ minStep = 1
+ )
+ @ConfigAccordionId(id = 5)
+ public float incomingFishIncSoundsVol = 10;
+
+ @ConfigOption(
+ name = "Fishing Particles",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean particleAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Custom Particles",
+ desc = "Allow you to modify the particles that appear when a fish is incoming for you and other players"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean enableCustomParticles = false;
+
+ @ConfigOption(
+ name = "Your Particles",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 1)
+ @ConfigAccordionId(id = 0)
+ public boolean yourParticlesAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Particle Type",
+ desc = "Change the type of the particle that is spawned\n" +
+ "Particle types with (RGB) support custom colours\n" +
+ "Set to 'NONE' to disable particles"
+ )
+ @ConfigEditorDropdown(
+ values = {"Default", "None", "Spark (RGB)", "Swirl (RGB)", "Dust (RGB)", "Flame", "Crit", "Magic Crit"}
+ )
+ @ConfigAccordionId(id = 1)
+ public int yourParticleType = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Custom Colour",
+ desc = "Set a custom colour for the particle\n" +
+ "Only works for particle types with (RGB)"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 1)
+ public String yourParticleColour = "0:255:255:255:255";
+
+ @ConfigOption(
+ name = "Other Players' Particles",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 2)
+ @ConfigAccordionId(id = 0)
+ public boolean otherParticlesAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Particle Type",
+ desc = "Change the type of the particle that is spawned\n" +
+ "Particle types with (RGB) support custom colours\n" +
+ "Set to 'NONE' to disable particles"
+ )
+ @ConfigEditorDropdown(
+ values = {"Default", "None", "Spark (RGB)", "Swirl (RGB)", "Dust (RGB)", "Flame", "Crit", "Magic Crit"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int otherParticleType = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Custom Colour",
+ desc = "Set a custom colour for the particle\n" +
+ "Only works for particle types with (RGB)"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 2)
+ public String otherParticleColour = "0:255:255:255:255";
+
+ @ConfigOption(
+ name = "Rod Line Colours",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 4)
+ public boolean rodAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Rod Line Colours",
+ desc = "Change the colour of your and other players' rod lines\n" +
+ "Also fixes the position of the rod line"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 4)
+ public boolean enableRodColours = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Own Rod Colour",
+ desc = "Change the colour of your own rod lines\n" +
+ "You can set the opacity to '0' to HIDE"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 4)
+ public String ownRodColour = "0:255:0:0:0";
+
+ @Expose
+ @ConfigOption(
+ name = "Other Rod Colour",
+ desc = "Change the colour of other players' rod lines\n" +
+ "You can set the opacity to '0' to HIDE"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 4)
+ public String otherRodColour = "0:255:0:0:0";
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java
new file mode 100644
index 00000000..6a4cb65c
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ImprovedSBMenu.java
@@ -0,0 +1,46 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class ImprovedSBMenu {
+ @Expose
+ @ConfigOption(
+ name = "Enable Improved SB Menus",
+ desc = "Change the way that skyblock menus (eg. /sbmenu) look"
+ )
+ @ConfigEditorBoolean
+ public boolean enableSbMenus = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Menu Background Style",
+ desc = "Change the style of the background of skyblock menus"
+ )
+ @ConfigEditorDropdown(
+ values = {"Dark 1", "Dark 2", "Transparent", "Light 1", "Light 2", "Light 3",
+ "Unused 1", "Unused 2", "Unused 3", "Unused 4"}
+ )
+ public int backgroundStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Button Background Style",
+ desc = "Change the style of the foreground elements in skyblock menus"
+ )
+ @ConfigEditorDropdown(
+ values = {"Dark 1", "Dark 2", "Transparent", "Light 1", "Light 2", "Light 3",
+ "Unused 1", "Unused 2", "Unused 3", "Unused 4"}
+ )
+ public int buttonStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Hide Empty Tooltips",
+ desc = "Hide the tooltips of glass panes with no text"
+ )
+ @ConfigEditorBoolean
+ public boolean hideEmptyPanes = true;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java
new file mode 100644
index 00000000..a4b0616b
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/InventoryButtons.java
@@ -0,0 +1,35 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorButton;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorDropdown;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class InventoryButtons {
+ @Expose
+ @ConfigOption(
+ name = "Open Button Editor",
+ desc = "Open button editor GUI (/neubuttons)"
+ )
+ @ConfigEditorButton(runnableId = 7, buttonText = "Open")
+ public boolean openEditorButton = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Always Hide \"Crafting\" Text",
+ desc = "Hide crafting text in inventory, even when no button is there"
+ )
+ @ConfigEditorBoolean
+ public boolean hideCrafting = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Button Click Type",
+ desc = "Change the click type needed to trigger commands"
+ )
+ @ConfigEditorDropdown(
+ values = {"Mouse Down", "Mouse Up"}
+ )
+ public int clickType = 0;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java
new file mode 100644
index 00000000..ea3ee04b
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/ItemOverlays.java
@@ -0,0 +1,196 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+public class ItemOverlays {
+ @ConfigOption(
+ name = "Treecapitator Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean treecapAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Treecap Overlay",
+ desc = "Show which blocks will be broken when using a Jungle Axe or Treecapitator"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean enableTreecapOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Overlay Colour",
+ desc = "Change the colour of the overlay"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 0)
+ public String treecapOverlayColour = "00:50:64:224:208";
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Monkey Pet Check",
+ desc = "Will check use the API to check what pet you're using\nto determine the cooldown based off of if you have monkey pet."
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean enableMonkeyCheck = true;
+
+ @ConfigOption(
+ name = "Builder's Wand Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 1)
+ public boolean wandAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Wand Overlay",
+ desc = "Show which blocks will be placed when using the Builder's Wand"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean enableWandOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Wand Block Count",
+ desc = "Shows the total count of a block in your inventory"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean wandBlockCount = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Overlay Colour",
+ desc = "Change the colour of the ghost block outline"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 1)
+ public String wandOverlayColour = "00:50:64:224:208";
+
+ @ConfigOption(
+ name = "Block Zapper Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 6)
+ public boolean zapperAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Zapper Overlay",
+ desc = "Show which blocks will be destroyed when using the Block Zapper"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 6)
+ public boolean enableZapperOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Overlay Colour",
+ desc = "Change the colour of the ghost block outline"
+ )
+ @ConfigEditorColour
+ @ConfigAccordionId(id = 6)
+ public String zapperOverlayColour = "0:102:171:5:0";
+
+ @ConfigOption(
+ name = "Smooth AOTE",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 2)
+ public boolean aoteAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Smooth AOTE",
+ desc = "Teleport smoothly to your destination when using AOTE"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean enableSmoothAOTE = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Smooth Hyperion",
+ desc = "Teleport smoothly to your destination when using Hyperion"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean enableSmoothHyperion = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Smooth TP Time",
+ desc = "Change the amount of time (milliseconds) taken to teleport"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 500,
+ minStep = 25
+ )
+ @ConfigAccordionId(id = 2)
+ public int smoothTpMillis = 175;
+
+ @Expose
+ @ConfigOption(
+ name = "Disable Hyperion Particles",
+ desc = "Remove the explosion effect when using a hyperion"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean disableHyperionParticles = true;
+
+ @ConfigOption(
+ name = "Bonemerang Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 3)
+ public boolean bonemerangAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Highlight Targeted Entities",
+ desc = "Highlight entities that will be hit by your bonemerang"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean highlightTargeted = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Break Warning",
+ desc = "Show a warning below your crosshair if the bonemerang will break on a block"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 3)
+ public boolean showBreak = true;
+
+ @ConfigOption(
+ name = "Minion Crystal Radius Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 5)
+ public boolean crystalAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Crystal Overlay",
+ desc = "Show a block overlay for the effective radius of minion crystals (farming, mining, etc)"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 5)
+ public boolean enableCrystalOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Always Show Crystal Overlay",
+ desc = "Show the crystal overlay, even when a minion crystal is not being held"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 5)
+ public boolean alwaysShowCrystal = false;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java
new file mode 100644
index 00000000..db078353
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Itemlist.java
@@ -0,0 +1,110 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+public class Itemlist {
+ @Expose
+ @ConfigOption(
+ name = "Show Vanilla Items",
+ desc = "Vanilla items are included in the item list"
+ )
+ @ConfigEditorBoolean
+ public boolean showVanillaItems = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Open Itemlist Arrow",
+ desc = "Creates an arrow on the right-side to open the item list when hovered"
+ )
+ @ConfigEditorBoolean
+ public boolean tabOpen = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Keep Open",
+ desc = "Keeps the Itemlist open after the inventory is closed"
+ )
+ @ConfigEditorBoolean
+ public boolean keepopen = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Item Style",
+ desc = "Sets the style of the background behind items"
+ )
+ @ConfigEditorDropdown(
+ values = {"Round", "Square"}
+ )
+ public int itemStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Pane Gui Scale",
+ desc = "Change the gui scale of the Itemlist"
+ )
+ @ConfigEditorDropdown(
+ values = {"Default", "Small", "Medium", "Large", "Auto"}
+ )
+ public int paneGuiScale = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Background Blur",
+ desc = "Change the blur amount behind the Itemlist. 0 = off"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 20,
+ minStep = 1
+ )
+ public int bgBlurFactor = 5;
+
+ @Expose
+ @ConfigOption(
+ name = "Pane Width Multiplier",
+ desc = "Change the width of the Itemlist"
+ )
+ @ConfigEditorSlider(
+ minValue = 0.5f,
+ maxValue = 1.5f,
+ minStep = 0.1f
+ )
+ public float paneWidthMult = 1.0f;
+
+ @Expose
+ @ConfigOption(
+ name = "Pane Padding",
+ desc = "Change the padding around the Itemlist"
+ )
+ @ConfigEditorSlider(
+ minValue = 0f,
+ maxValue = 20f,
+ minStep = 1f
+ )
+ public int panePadding = 10;
+
+ @Expose
+ @ConfigOption(
+ name = "Foreground Colour",
+ desc = "Change the colour of foreground elements in the Itemlist"
+ )
+ @ConfigEditorColour
+ public String foregroundColour = "00:255:100:100:100";
+
+ @Expose
+ @ConfigOption(
+ name = "Favourite Colour",
+ desc = "Change the colour of favourited elements in the Itemlist"
+ )
+ @ConfigEditorColour
+ public String favouriteColour = "00:255:200:150:50";
+
+ @Expose
+ @ConfigOption(
+ name = "Pane Background Colour",
+ desc = "Change the colour of the Itemlist background"
+ )
+ @ConfigEditorColour
+ public String backgroundColour = "15:6:0:0:255";
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java
new file mode 100644
index 00000000..b7326ee3
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Mining.java
@@ -0,0 +1,181 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Mining {
+ @ConfigOption(
+ name = "Waypoints",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean waypointsAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Mines Waypoints",
+ desc = "Show waypoints in the Dwarven mines to the various locations\n" +
+ "Use \"Commissions Only\" to only show active commission locations"
+ )
+ @ConfigEditorDropdown(
+ values = {"Hide", "Commissions Only", "Always"},
+ initialIndex = 1
+ )
+ @ConfigAccordionId(id = 0)
+ public int locWaypoints = 1;
+
+ @Expose
+ @ConfigOption(
+ name = "Emissary Waypoints",
+ desc = "Show waypoints in the Dwarven mines to emissaries\n" +
+ "Use \"Commission End\" to only show after finishing commissions"
+ )
+ @ConfigEditorDropdown(
+ values = {"Hide", "Commission End", "Always"},
+ initialIndex = 1
+ )
+ @ConfigAccordionId(id = 0)
+ public int emissaryWaypoints = 1;
+
+ @ConfigOption(
+ name = "Drill Fuel Bar",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 1)
+ public boolean drillAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Drill Fuel Bar",
+ desc = "Show a fancy drill fuel bar when holding a drill in mining areas"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean drillFuelBar = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Fuel Bar Width",
+ desc = "Change the width of the drill fuel bar"
+ )
+ @ConfigEditorSlider(
+ minValue = 50,
+ maxValue = 400,
+ minStep = 10
+ )
+ @ConfigAccordionId(id = 1)
+ public int drillFuelBarWidth = 200;
+
+ @Expose
+ @ConfigOption(
+ name = "Fuel Bar Position",
+ desc = "Set the position of the drill fuel bar"
+ )
+ @ConfigEditorButton(
+ runnableId = 2,
+ buttonText = "Edit"
+ )
+ @ConfigAccordionId(id = 1)
+ public Position drillFuelBarPosition = new Position(0, -100, true, false);
+
+ @ConfigOption(
+ name = "Dwarven Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 2)
+ public boolean overlayAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Dwarven Overlay",
+ desc = "Show an overlay with useful information on the screen while in Dwarven Mines"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 2)
+ public boolean dwarvenOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Dwarven Text",
+ desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
+ "\u00a7rGo to the Dwarven Mines to show this overlay with useful information"
+ )
+ @ConfigEditorDraggableList(
+ exampleText = {"\u00a73Goblin Slayer: \u00a7626.5%\n\u00a73Lucky Raffle: \u00a7c0.0%",
+ "\u00a73Mithril Powder: \u00a726,243",
+ "\u00a73Forge 1) \u00a79Diamonite\u00a77: \u00a7aReady!",
+ "\u00a73Forge 2) \u00a77EMPTY\n\u00a73Forge 3) \u00a77EMPTY\n\u00a73Forge 4) \u00a77EMPTY",
+ "\u00a73Pickaxe CD: \u00a7a78s"}
+ )
+ @ConfigAccordionId(id = 2)
+ public List<Integer> dwarvenText = new ArrayList<>(Arrays.asList(0, 1, 4, 2, 3));
+
+ @Expose
+ @ConfigOption(
+ name = "Overlay Position",
+ desc = "Change the position of the Dwarven Mines information overlay (commisions, powder & forge statuses)"
+ )
+ @ConfigEditorButton(
+ runnableId = 1,
+ buttonText = "Edit"
+ )
+ @ConfigAccordionId(id = 2)
+ public Position overlayPosition = new Position(10, 100);
+
+ @Expose
+ @ConfigOption(
+ name = "Overlay Style",
+ desc = "Change the style of the Dwarven Mines information overlay"
+ )
+ @ConfigEditorDropdown(
+ values = {"Background", "No Shadow", "Shadow", "Full Shadow"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int overlayStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Puzzler Solver",
+ desc = "Show the correct block to mine for the puzzler puzzle in Dwarven Mines"
+ )
+ @ConfigEditorBoolean
+ public boolean puzzlerSolver = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Titanium Alert",
+ desc = "Show an alert whenever titanium appears nearby"
+ )
+ @ConfigEditorBoolean
+ public boolean titaniumAlert = true;
+
+
+ @Expose
+ @ConfigOption(
+ name = "Dwarven Mines Textures",
+ desc = "Allows texture packs to retexture blocks in the Dwarven Mines. If you don't have a texturepack that does this, you should leave this off"
+ )
+ @ConfigEditorBoolean
+ public boolean dwarvenTextures = false;
+
+ /*@Expose
+ @ConfigOption(
+ name = "Don't Mine Stone",
+ desc = "Prevent mining stone blocks in mining areas"
+ )
+ @ConfigEditorBoolean
+ public boolean dontMineStone = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Reveal Mist Creepers",
+ desc = "Make the creepers in the Dwarven Mines mist visible"
+ )
+ @ConfigEditorBoolean
+ public boolean revealMistCreepers = true;*/
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java
new file mode 100644
index 00000000..37c75d28
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java
@@ -0,0 +1,70 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+public class Misc {
+ @Expose
+ @ConfigOption(
+ name = "Only Show on Skyblock",
+ desc = "The item list and some other GUI elements will only show on skyblock"
+ )
+ @ConfigEditorBoolean
+ public boolean onlyShowOnSkyblock = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Hide Potion Effects",
+ desc = "Hide the potion effects inside your inventory while on skyblock"
+ )
+ @ConfigEditorBoolean
+ public boolean hidePotionEffect = true;
+
+
+
+ @Expose
+ @ConfigOption(
+ name = "Streamer Mode",
+ desc = "Randomize lobby names in the scoreboard and chat messages to help prevent stream sniping"
+ )
+ @ConfigEditorBoolean
+ public boolean streamerMode = false;
+
+ @Expose
+ @ConfigOption(
+ name = "GUI Click Sounds",
+ desc = "Play click sounds in various NEU-related GUIs when pressing buttons"
+ )
+ @ConfigEditorBoolean
+ public boolean guiButtonClicks = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Damage Indicator Style",
+ desc = "Change the style of Skyblock damage indicators to be easier to read"
+ )
+ @ConfigEditorDropdown(
+ values = {"Off", "Commas", "Shortened"}
+ )
+ public int damageIndicatorStyle = 1;
+
+ @Expose
+ @ConfigOption(
+ name = "Edit Enchant Colours",
+ desc = "Change the colours of certain skyblock enchants"
+ )
+ @ConfigEditorButton(runnableId = 8, buttonText = "Open")
+ public boolean editEnchantColoursButton = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Chroma Text Speed",
+ desc = "Change the speed of chroma text for items names (/neucustomize) and enchant colours (/neuec) with the chroma colour code (&z)"
+ )
+ @ConfigEditorSlider(
+ minValue = 10,
+ maxValue = 500,
+ minStep = 10
+ )
+ public int chromaSpeed = 100;
+} \ No newline at end of file
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java
new file mode 100644
index 00000000..d31370b7
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/MiscOverlays.java
@@ -0,0 +1,256 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class MiscOverlays {
+ @ConfigOption(
+ name = "Todo Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean todoAccordion = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Todo Overlay",
+ desc = "Show an overlay that reminds you to do important tasks"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean todoOverlay = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Todo Text",
+ desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
+ "\u00a7rIf you want to see the time until something is available, click \"Add\" and then the respective timer"
+ )
+ @ConfigEditorDraggableList(
+ exampleText = {
+ "\u00a73Cakes: \u00a7e1d21h",
+ "\u00a73Cookie Buff: \u00a7e2d23h",
+ "\u00a73Godpot: \u00a7e19h",
+ "\u00a73Puzzler: \u00a7e13h",
+ "\u00a73Fetchur: \u00a7e3h38m",
+ "\u00a73Commissions: \u00a7e3h38m",
+ "\u00a73Experiments: \u00a7e3h38m"}
+ )
+ @ConfigAccordionId(id = 0)
+ public List<Integer> todoText = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 6));
+
+ @ConfigOption(
+ name = "Show Only If Soon",
+ desc = ""
+ )
+ @ConfigAccordionId(id = 0)
+ @ConfigEditorAccordion(id = 1)
+ public boolean TodoAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Experimentation Display",
+ desc = "Change the way the experimentation timer displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int experimentationDisplay = 0;
+
+
+ @Expose
+ @ConfigOption(
+ name = "Puzzler Reset Display",
+ desc = "Change the way the puzzler reset timer displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int puzzlerDisplay = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Fetchur Reset Display",
+ desc = "Change the way the fetchur reset timer displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int fetchurDisplay = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Commission timer Display",
+ desc = "Change the way the Commission timer displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int commissionDisplay = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Cake Buff Display",
+ desc = "Change the way the cake buff timer displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int cakesDisplay = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Cookie Buff Display",
+ desc = "Change the way the cookie buff displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int cookieBuffDisplay = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "God Pot Display",
+ desc = "Change the way the god pot displays\n" +
+ "Only when ready, When very Soon, When soon, When kinda soon or always."
+ )
+ @ConfigAccordionId(id =1)
+ @ConfigEditorDropdown(
+ values = {"Only when ready", "When very Soon", "When soon", "When Kinda Soon", "Always"}
+ )
+ public int godpotDisplay = 0;
+
+ @ConfigOption(
+ name = "Colours",
+ desc = ""
+ )
+
+ @ConfigEditorAccordion(id = 2)
+ @ConfigAccordionId(id = 0)
+ public boolean TodoColourAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Ready colour",
+ desc = "Change the colour of when the timer is ready"
+
+ )
+ @ConfigEditorDropdown(
+ values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int readyColour = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Gone colour",
+ desc = "Change the colour of when the timer is gone"
+
+ )
+ @ConfigEditorDropdown(
+ values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int goneColour = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Very soon colour",
+ desc = "Change the colour of when the timer is almost ready/gone"
+
+ )
+ @ConfigEditorDropdown(
+ values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int verySoonColour = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Soon Colour",
+ desc = "Change the colour of when the timer is soon ready/gone"
+
+ )
+ @ConfigEditorDropdown(
+ values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int soonColour = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Kinda Soon Colour",
+ desc = "Change the colour of when the timer is kinda soon ready/gone"
+
+ )
+ @ConfigEditorDropdown(
+ values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int kindaSoonColour = 0;
+
+
+ @Expose
+ @ConfigOption(
+ name = "Default Colour",
+ desc = "Change the default colour of the timers"
+
+ )
+
+ @ConfigEditorDropdown(
+ values = {"Black", "Dark Blue", "Dark Green", "Dark Aqua", "Dark Red", "Dark Purple", "Gold", "Gray", "Dark Gray", "Blue", "Green", "Aqua", "Red", "Light Purple", "Yellow", "White"}
+ )
+ @ConfigAccordionId(id = 2)
+ public int defaultColour = 0;
+
+
+ @Expose
+ @ConfigOption(
+ name = "Todo Position",
+ desc = "Change the position of the Todo overlay"
+ )
+ @ConfigEditorButton(
+ runnableId = 5,
+ buttonText = "Edit"
+ )
+ @ConfigAccordionId(id = 0)
+ public Position todoPosition = new Position(100, 0);
+
+
+ @Expose
+ @ConfigOption(
+ name = "Todo Style",
+ desc = "Change the style of the todo overlay"
+ )
+ @ConfigEditorDropdown(
+ values = {"Background", "No Shadow", "Shadow", "Full Shadow"}
+ )
+ @ConfigAccordionId(id = 0)
+ public int todoStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Todo Icons",
+ desc = "Add little item icons next to the lines in the todo overlay"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean todoIcons = true;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java
new file mode 100644
index 00000000..2833c085
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/NeuAuctionHouse.java
@@ -0,0 +1,45 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public static class NeuAuctionHouse {
+ @Expose
+ @ConfigOption(
+ name = "Enable NeuAH",
+ desc = "Turn on the NEU Auction House. \u00A7cWARNING: May negatively impact performance on low-end machines"
+ )
+ @ConfigEditorBoolean
+ public boolean enableNeuAuctionHouse = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Disable AH Scroll",
+ desc = "Disable scrolling using the scroll wheel inside NeuAH.\n" +
+ "This should be used if you want to be able to scroll through tooltips"
+ )
+ @ConfigEditorBoolean
+ public boolean disableAhScroll = false;
+
+ @Expose
+ @ConfigOption(
+ name = "AH Notification (Mins)",
+ desc = "Change the amount of time (in minutes) before the \"Ending Soon\" notification for an auction you have bid on"
+ )
+ @ConfigEditorSlider(
+ minValue = 1f,
+ maxValue = 10f,
+ minStep = 1f
+ )
+ public int ahNotification = 5;
+
+ @Expose
+ @ConfigOption(
+ name = "Price Filtering in NEU AH",
+ desc = "The ability to filter the price of items and their respective average BIN values"
+ )
+ @ConfigEditorBoolean
+ public boolean priceFiltering = false;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java
new file mode 100644
index 00000000..b6c12077
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Notifications.java
@@ -0,0 +1,32 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class Notifications {
+ @Expose
+ @ConfigOption(
+ name = "Update Messages",
+ desc = "Give a notification in chat whenever a new version of NEU is released"
+ )
+ @ConfigEditorBoolean
+ public boolean showUpdateMsg = true;
+
+ @Expose
+ @ConfigOption(
+ name = "RAM Warning",
+ desc = "Warning when game starts with lots of RAM allocated\n"+
+ "\u00a7cBefore disabling this, please seriously read the message. If you complain about FPS issues without listening to the warning, that's your fault."
+ )
+ @ConfigEditorBoolean
+ public boolean doRamNotif = true;
+
+ /*@Expose
+ @ConfigOption(
+ name = "Wrong Pet",
+ desc = "Gives a notification in chat whenever you're using a pet that doesnt match the same xp you're gathering."
+ )
+ @ConfigEditorBoolean
+ public boolean showWrongPetMsg = false;*/
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java
new file mode 100644
index 00000000..f37280fa
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/PetOverlay.java
@@ -0,0 +1,74 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PetOverlay {
+ @Expose
+ @ConfigOption(
+ name = "Enable Pet Info Overlay",
+ desc = "Shows current active pet and pet exp on screen."
+ )
+ @ConfigEditorBoolean
+ public boolean enablePetInfo = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Pet Info Position",
+ desc = "The position of the pet info."
+ )
+ @ConfigEditorButton(
+ runnableId = 4,
+ buttonText = "Edit"
+ )
+ public Position petInfoPosition = new Position(-1, -1);
+
+ @Expose
+ @ConfigOption(
+ name = "Pet Overlay Text",
+ desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
+ "\u00a7rEquip a pet to show the overlay"
+ )
+ @ConfigEditorDraggableList(
+ exampleText = {"\u00a7a[Lvl 37] \u00a7fRock",
+ "\u00a7b2,312.9/2,700\u00a7e (85.7%)",
+ "\u00a7b2.3k/2.7k\u00a7e (85.7%)",
+ "\u00a7bXP/h: \u00a7e27,209",
+ "\u00a7bTotal XP: \u00a7e30,597.9",
+ "\u00a7bHeld Item: \u00a7fMining Exp Boost",
+ "\u00a7bUntil L38: \u00a7e5m13s",
+ "\u00a7bUntil L100: \u00a7e2d13h"}
+ )
+ public List<Integer> petOverlayText = new ArrayList<>(Arrays.asList(0, 2, 3, 6, 4));
+
+ @Expose
+ @ConfigOption(
+ name = "Pet Overlay Icon",
+ desc = "Show the icon of the pet you have equiped in the overlay"
+ )
+ @ConfigEditorBoolean
+ public boolean petOverlayIcon = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Pet Info Overlay Style",
+ desc = "Change the style of the Pet Info overlay"
+ )
+ @ConfigEditorDropdown(
+ values = {"Background", "No Shadow", "Shadow Only", "Full Shadow"}
+ )
+ public int petInfoOverlayStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Show Last Pet",
+ desc = "Show 2 pets on the overlay\nUseful if training two pets at once with autopet"
+ )
+ @ConfigEditorBoolean
+ public boolean dualPets = false;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java
new file mode 100644
index 00000000..ba83fc0c
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SkillOverlays.java
@@ -0,0 +1,58 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class SkillOverlays {
+ @Expose
+ @ConfigOption(
+ name = "Enable Farming Overlay",
+ desc = "Show an overlay while farming with useful information"
+ )
+ @ConfigEditorBoolean
+ public boolean farmingOverlay = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Farming Text",
+ desc = "\u00a7eDrag text to change the appearance of the overlay\n" +
+ "\u00a7rHold a mathematical hoe or use an axe while gaining farming xp to show the overlay"
+ )
+ @ConfigEditorDraggableList(
+ exampleText = {"\u00a7bCounter: \u00a7e37,547,860",
+ "\u00a7bCrops/m: \u00a7e38.29",
+ "\u00a7bFarm: \u00a7e12\u00a77 [\u00a7e|||||||||||||||||\u00a78||||||||\u00a77] \u00a7e67%",
+ "\u00a7bCurrent XP: \u00a7e6,734",
+ "\u00a7bRemaining XP: \u00a7e3,265",
+ "\u00a7bXP/h: \u00a7e238,129",
+ "\u00a7bYaw: \u00a7e68.25\u00a7l\u1D52",
+ "\u00a7bETA: 13h12m"}
+ )
+ public List<Integer> farmingText = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4, 5, 7, 6));
+
+ @Expose
+ @ConfigOption(
+ name = "Farming Position",
+ desc = "Change the position of the Farming overlay"
+ )
+ @ConfigEditorButton(
+ runnableId = 3,
+ buttonText = "Edit"
+ )
+ public Position farmingPosition = new Position(10, 200);
+
+ @Expose
+ @ConfigOption(
+ name = "Farming Style",
+ desc = "Change the style of the Farming overlay"
+ )
+ @ConfigEditorDropdown(
+ values = {"Background", "No Shadow", "Shadow", "Full Shadow"}
+ )
+ public int farmingStyle = 0;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java
new file mode 100644
index 00000000..3da885a0
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/SlotLocking.java
@@ -0,0 +1,71 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorKeybind;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorSlider;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+import org.lwjgl.input.Keyboard;
+
+public class SlotLocking {
+ @Expose
+ @ConfigOption(
+ name = "Enable Slot Locking",
+ desc = "Allows you to lock slots and create slot bindings"
+ )
+ @ConfigEditorBoolean
+ public boolean enableSlotLocking = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Slot Binding",
+ desc = "Allows you to create slot bindings\nNote: \"Enable Slot Locking\" must be on"
+ )
+ @ConfigEditorBoolean
+ public boolean enableSlotBinding = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Don't Drop Bound Slots",
+ desc = "Slot bindings also act as locked slots (prevents dropping / moving in inventory)"
+ )
+ @ConfigEditorBoolean
+ public boolean bindingAlsoLocks = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Slot Lock Key",
+ desc = "Click this key to LOCK a slot\n" +
+ "Hold this key and drag to BIND a slot"
+ )
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_L)
+ public int slotLockKey = Keyboard.KEY_L;
+
+ @Expose
+ @ConfigOption(
+ name = "Lock Slots in Trade",
+ desc = "Prevents trading locked items in the custom trade windows"
+ )
+ @ConfigEditorBoolean
+ public boolean lockSlotsInTrade = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Slot Lock Sound",
+ desc = "Play a ding when locking/unlocking slots"
+ )
+ @ConfigEditorBoolean
+ public boolean slotLockSound = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Slot Lock Sound Vol.",
+ desc = "Set the volume of the ding sound"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 100,
+ minStep = 1
+ )
+ public float slotLockSoundVol = 20;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java
new file mode 100644
index 00000000..e54bd2f3
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/StorageGUI.java
@@ -0,0 +1,188 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+import org.lwjgl.input.Keyboard;
+
+public class StorageGUI {
+ @ConfigOption(
+ name = "Storage Overlay",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 1)
+ public boolean storageOverlayAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Enable Storage GUI",
+ desc = "Show a custom storage overlay when accessing /storage." +
+ "Makes switching between pages much easier and also allows for searching through all storages"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean enableStorageGUI = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Storage Height",
+ desc = "Change the height of the storage preview section. Increasing this allows more storages to be seen at once"
+ )
+ @ConfigEditorSlider(
+ minValue = 104,
+ maxValue = 312,
+ minStep = 26
+ )
+ @ConfigAccordionId(id = 1)
+ public int storageHeight = 208;
+
+ @Expose
+ @ConfigOption(
+ name = "Storage Style",
+ desc = "Change the visual style of the overlay"
+ )
+ @ConfigEditorDropdown(
+ values = {"Transparent", "Minecraft", "Dark", "Custom"}
+ )
+ @ConfigAccordionId(id = 1)
+ public int displayStyle = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Enderchest Preview",
+ desc = "Preview Enderchest pages when hovering over the selector on the left side"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean enderchestPreview = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Preview",
+ desc = "Preview Backpacks when hovering over the selector on the left side"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean backpackPreview = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Compact Vertically",
+ desc = "Remove the space between backpacks when there is a size discrepancy"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 1)
+ public boolean masonryMode = false;
+
+ @ConfigOption(
+ name = "Inventory Backpacks",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean inventorySlotAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Inventory Backpacks",
+ desc = "Add a \"10th slot\" to your inventory which allows you to quickly access your backpacks"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean showInvBackpack = false;
+
+ //public boolean showInvBackpack = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Side",
+ desc = "Set which side of the hotbar the backpack slot shows"
+ )
+ @ConfigEditorDropdown(
+ values = {"Left", "Right"}
+ )
+ @ConfigAccordionId(id = 0)
+ public int backpackHotbarSide = 0;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Peeking",
+ desc = "When the backpack is selected, show it's contents on your screen"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean showInvBackpackPreview = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Opacity%",
+ desc = "Change the opacity of the backpack preview background"
+ )
+ @ConfigEditorSlider(
+ minValue = 0,
+ maxValue = 100,
+ minStep = 5
+ )
+ @ConfigAccordionId(id = 0)
+ public int backpackOpacity = 50;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Scroll Key",
+ desc = "Change the key which needs to be pressed in order to allow backpacks to be scrolled between"
+ )
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_LSHIFT)
+ @ConfigAccordionId(id = 0)
+ public int backpackScrollKey = Keyboard.KEY_LSHIFT;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Hotkey",
+ desc = "Hotkey to quickly switch to the backpack slot"
+ )
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_GRAVE)
+ @ConfigAccordionId(id = 0)
+ public int backpackHotkey = Keyboard.KEY_GRAVE;
+
+ @Expose
+ @ConfigOption(
+ name = "Arrow Key Backpacks",
+ desc = "Use arrow keys [LEFT],[RIGHT] to move between backpacks and [DOWN] to navigate backpack even when the slot is not selected. Keys are customizable below"
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean arrowKeyBackpacks = false;
+
+ @ConfigOption(
+ name = "Arrow Key Backpack Keybinds",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 2)
+ @ConfigAccordionId(id = 0)
+ public boolean backpackArrowAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Left",
+ desc = "Select the backpack to the left"
+ )
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_LEFT)
+ @ConfigAccordionId(id = 2)
+ public int arrowLeftKey = Keyboard.KEY_LEFT;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Right",
+ desc = "Select the backpack to the right"
+ )
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_RIGHT)
+ @ConfigAccordionId(id = 2)
+ public int arrowRightKey = Keyboard.KEY_RIGHT;
+
+ @Expose
+ @ConfigOption(
+ name = "Backpack Open",
+ desc = "Open the selected backpack"
+ )
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_DOWN)
+ @ConfigAccordionId(id = 2)
+ public int arrowDownKey = Keyboard.KEY_DOWN;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java
new file mode 100644
index 00000000..2cdbc0ab
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Toolbar.java
@@ -0,0 +1,64 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+public class Toolbar {
+ @Expose
+ @ConfigOption(
+ name = "Edit Toolbar Positions",
+ desc = "Edit the position of the QuickCommands / Search Bar"
+ )
+ @ConfigEditorButton(runnableId = 6, buttonText = "Edit")
+ public boolean positionButton = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Show Quick Commands",
+ desc = "Show QuickCommands\u2122 in the NEU toolbar"
+ )
+ @ConfigEditorBoolean
+ public boolean quickCommands = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Show Search Bar",
+ desc = "Show Itemlist search bar in the NEU toolbar"
+ )
+ @ConfigEditorBoolean
+ public boolean searchBar = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Search Bar Width",
+ desc = "Change the width of the search bar"
+ )
+ @ConfigEditorSlider(
+ minValue = 50f,
+ maxValue = 300f,
+ minStep = 10f
+ )
+ public int searchBarWidth = 200;
+
+ @Expose
+ @ConfigOption(
+ name = "Search Bar Height",
+ desc = "Change the height of the search bar"
+ )
+ @ConfigEditorSlider(
+ minValue = 15f,
+ maxValue = 50f,
+ minStep = 1f
+ )
+ public int searchBarHeight = 40;
+
+ @Expose
+ @ConfigOption(
+ name = "Quick Commands Click Type",
+ desc = "Change the click type needed to trigger quick commands"
+ )
+ @ConfigEditorDropdown(
+ values = {"Mouse Up", "Mouse Down"}
+ )
+ public int quickCommandsClickType = 0;
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java
new file mode 100644
index 00000000..e1b9780a
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TooltipTweaks.java
@@ -0,0 +1,90 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class TooltipTweaks {
+ @ConfigOption(
+ name = "Tooltip Price Information",
+ desc = ""
+ )
+ @ConfigEditorAccordion(id = 0)
+ public boolean priceInfoAccordion = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Price Info (Auc)",
+ desc = "\u00a7rSelect what price information you would like to see on auctionable item tooltips\n" +
+ "\u00a7eDrag text to rearrange"
+ )
+ @ConfigEditorDraggableList(
+ exampleText = {"\u00a7eLowest BIN",
+ "\u00a7eAH Price",
+ "\u00a7eAH Sales",
+ "\u00a7eRaw Craft Cost",
+ "\u00a7eAVG Lowest BIN",
+ "\u00a7eDungeon Costs"}
+ )
+ @ConfigAccordionId(id = 0)
+ public List<Integer> priceInfoAuc = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 5));
+
+ @Expose
+ @ConfigOption(
+ name = "Price Info (Baz)",
+ desc = "\u00a7rSelect what price information you would like to see on bazaar item tooltips\n" +
+ "\u00a7eDrag text to rearrange"
+ )
+ @ConfigEditorDraggableList(
+ exampleText = {"\u00a7eBuy", "\u00a7eSell", "\u00a7eBuy (Insta)", "\u00a7eSell (Insta)", "\u00a7eRaw Craft Cost"}
+ )
+ @ConfigAccordionId(id = 0)
+ public List<Integer> priceInfoBaz = new ArrayList<>(Arrays.asList(0, 1, 2, 3, 4));
+
+ @Expose
+ @ConfigOption(
+ name = "Price Info (Inv)",
+ desc = "Show price information for items in your inventory"
+ )
+ @ConfigEditorBoolean
+ public boolean showPriceInfoInvItem = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Price Info (AH)",
+ desc = "Show price information for auctioned items"
+ )
+ @ConfigEditorBoolean
+ public boolean showPriceInfoAucItem = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Missing Enchant List",
+ desc = "Show which enchants are missing on an item when pressing LSHIFT"
+ )
+ @ConfigEditorBoolean
+ public boolean missingEnchantList = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Tooltip Border Colours",
+ desc = "Make the borders of tooltips match the rarity of the item (NEU Tooltips Only)"
+ )
+ @ConfigEditorBoolean
+ public boolean tooltipBorderColours = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Tooltip Border Opacity",
+ desc = "Change the opacity of the rarity highlight (NEU Tooltips Only)"
+ )
+ @ConfigEditorSlider(
+ minValue = 0f,
+ maxValue = 255f,
+ minStep = 1f
+ )
+ public int tooltipBorderOpacity = 200;
+} \ No newline at end of file
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java
new file mode 100644
index 00000000..930316be
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/TradeMenu.java
@@ -0,0 +1,27 @@
+package io.github.moulberry.notenoughupdates.options.seperateSections;
+
+import com.google.gson.annotations.Expose;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigEditorBoolean;
+import io.github.moulberry.notenoughupdates.core.config.annotations.ConfigOption;
+
+public class TradeMenu {
+ @Expose
+ @ConfigOption(
+ name = "Enable Custom Trade Menu",
+ desc = "When trading with other players in skyblock, display a special GUI designed to prevent scamming"
+ )
+ @ConfigEditorBoolean
+ public boolean enableCustomTrade = true;
+
+
+ @Expose
+ @ConfigOption(
+ name = "Price Information",
+ desc = "Show the price of items in the trade window on both sides"
+ )
+ @ConfigEditorBoolean
+ public boolean customTradePrices = true;
+
+ @Expose
+ public boolean customTradePriceStyle = true;
+}