From 7e4eb4d5c83f6ef2d0dc86834870c55ce7774f12 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Thu, 8 Sep 2022 18:11:29 +0200 Subject: updated config structure from neu --- CHANGELOG.md | 1 + .../java/at/hannibal2/skyhanni/SkyHanniMod.java | 4 +- .../at/hannibal2/skyhanni/config/ConfigEditor.java | 883 +++++++++++++++++++++ .../at/hannibal2/skyhanni/config/ConfigManager.kt | 2 +- .../at/hannibal2/skyhanni/config/Features.java | 19 +- .../at/hannibal2/skyhanni/config/GuiTextures.java | 106 +++ .../skyhanni/config/commands/Commands.java | 112 +++ .../skyhanni/config/commands/SimpleCommand.java | 61 ++ .../skyhanni/config/core/BackgroundBlur.java | 289 +++++++ .../skyhanni/config/core/ChromaColour.java | 111 +++ .../skyhanni/config/core/GlScissorStack.java | 104 +++ .../hannibal2/skyhanni/config/core/GuiElement.java | 30 + .../skyhanni/config/core/GuiElementBoolean.java | 147 ++++ .../skyhanni/config/core/GuiElementColour.java | 449 +++++++++++ .../skyhanni/config/core/GuiElementTextField.java | 685 ++++++++++++++++ .../config/core/GuiScreenElementWrapper.java | 53 ++ .../skyhanni/config/core/config/Config.java | 24 + .../config/core/config/GuiPositionEditor.java | 139 ++++ .../skyhanni/config/core/config/KeybindHelper.java | 67 ++ .../skyhanni/config/core/config/Position.java | 208 +++++ .../skyhanni/config/core/config/PositionNew.java | 211 +++++ .../config/core/config/annotations/Category.java | 33 + .../core/config/annotations/ConfigAccordionId.java | 31 + .../config/annotations/ConfigEditorAccordion.java | 31 + .../config/annotations/ConfigEditorBoolean.java | 31 + .../config/annotations/ConfigEditorButton.java | 33 + .../config/annotations/ConfigEditorColour.java | 29 + .../annotations/ConfigEditorDraggableList.java | 33 + .../config/annotations/ConfigEditorDropdown.java | 33 + .../core/config/annotations/ConfigEditorFSR.java | 33 + .../config/annotations/ConfigEditorKeybind.java | 31 + .../config/annotations/ConfigEditorSlider.java | 35 + .../core/config/annotations/ConfigEditorText.java | 29 + .../core/config/annotations/ConfigOption.java | 35 + .../config/core/config/gui/GuiOptionEditor.java | 82 ++ .../core/config/gui/GuiOptionEditorAccordion.java | 101 +++ .../core/config/gui/GuiOptionEditorBoolean.java | 71 ++ .../core/config/gui/GuiOptionEditorButton.java | 87 ++ .../core/config/gui/GuiOptionEditorColour.java | 88 ++ .../config/gui/GuiOptionEditorDraggableList.java | 342 ++++++++ .../core/config/gui/GuiOptionEditorDropdown.java | 202 +++++ .../config/core/config/gui/GuiOptionEditorFSR.java | 82 ++ .../core/config/gui/GuiOptionEditorKeybind.java | 113 +++ .../core/config/gui/GuiOptionEditorSlider.java | 152 ++++ .../core/config/gui/GuiOptionEditorText.java | 103 +++ .../config/core/config/gui/GuiPositionEditor.java | 198 +++++ .../config/core/config/struct/ConfigProcessor.java | 219 +++++ .../config/core/util/GuiElementSlider.java | 124 +++ .../hannibal2/skyhanni/config/core/util/Line.java | 115 +++ .../skyhanni/config/core/util/MiscUtils.java | 127 +++ .../skyhanni/config/core/util/Splitters.java | 26 + .../skyhanni/config/core/util/StringUtils.java | 77 ++ .../skyhanni/config/core/util/Vec3Comparable.java | 148 ++++ .../skyhanni/config/core/util/lerp/LerpUtils.java | 43 + .../config/core/util/lerp/LerpingFloat.java | 86 ++ .../config/core/util/lerp/LerpingInteger.java | 94 +++ .../config/core/util/render/GuiRenderUtils.java | 391 +++++++++ .../config/core/util/render/TextRenderUtils.java | 345 ++++++++ .../skyhanni/config/features/Abilities.java | 4 +- .../skyhanni/config/features/Ashfang.java | 10 +- .../hannibal2/skyhanni/config/features/Bazaar.java | 8 +- .../hannibal2/skyhanni/config/features/Chat.java | 2 +- .../skyhanni/config/features/CommandsFeatures.java | 4 +- .../skyhanni/config/features/DamageIndicator.java | 8 +- .../skyhanni/config/features/DevData.java | 4 +- .../skyhanni/config/features/Dungeon.java | 4 +- .../skyhanni/config/features/Fishing.java | 4 +- .../skyhanni/config/features/Inventory.java | 2 +- .../skyhanni/config/features/Minions.java | 4 +- .../hannibal2/skyhanni/config/features/Misc.java | 8 +- .../hannibal2/skyhanni/config/gui/GuiTextures.java | 32 - .../skyhanni/config/gui/commands/Commands.java | 112 --- .../config/gui/commands/SimpleCommand.java | 60 -- .../skyhanni/config/gui/config/ConfigEditor.java | 601 -------------- .../skyhanni/config/gui/core/BackgroundBlur.java | 249 ------ .../skyhanni/config/gui/core/ChromaColour.java | 93 --- .../skyhanni/config/gui/core/GlScissorStack.java | 86 -- .../skyhanni/config/gui/core/GuiElement.java | 12 - .../config/gui/core/GuiElementBoolean.java | 118 --- .../skyhanni/config/gui/core/GuiElementColour.java | 370 --------- .../config/gui/core/GuiElementTextField.java | 549 ------------- .../config/gui/core/GuiScreenElementWrapper.java | 34 - .../skyhanni/config/gui/core/config/Config.java | 5 - .../config/gui/core/config/KeybindHelper.java | 49 -- .../skyhanni/config/gui/core/config/Position.java | 197 ----- .../gui/core/config/annotations/Category.java | 14 - .../core/config/annotations/ConfigAccordionId.java | 12 - .../config/annotations/ConfigEditorAccordion.java | 12 - .../config/annotations/ConfigEditorBoolean.java | 11 - .../config/annotations/ConfigEditorButton.java | 14 - .../config/annotations/ConfigEditorColour.java | 11 - .../annotations/ConfigEditorDraggableList.java | 12 - .../config/annotations/ConfigEditorDropdown.java | 14 - .../config/annotations/ConfigEditorKeybind.java | 12 - .../config/annotations/ConfigEditorSlider.java | 16 - .../core/config/annotations/ConfigEditorStyle.java | 11 - .../core/config/annotations/ConfigEditorText.java | 11 - .../gui/core/config/annotations/ConfigOption.java | 16 - .../gui/core/config/gui/GuiOptionEditor.java | 62 -- .../core/config/gui/GuiOptionEditorAccordion.java | 80 -- .../core/config/gui/GuiOptionEditorBoolean.java | 37 - .../gui/core/config/gui/GuiOptionEditorButton.java | 60 -- .../gui/core/config/gui/GuiOptionEditorColour.java | 74 -- .../config/gui/GuiOptionEditorDraggableList.java | 269 ------- .../core/config/gui/GuiOptionEditorDropdown.java | 145 ---- .../core/config/gui/GuiOptionEditorKeybind.java | 88 -- .../gui/core/config/gui/GuiOptionEditorSlider.java | 136 ---- .../gui/core/config/gui/GuiOptionEditorStyle.java | 42 - .../gui/core/config/gui/GuiOptionEditorText.java | 78 -- .../gui/core/config/gui/GuiPositionEditor.java | 172 ---- .../gui/core/config/struct/ConfigProcessor.java | 166 ---- .../config/gui/core/util/GuiElementSlider.java | 121 --- .../skyhanni/config/gui/core/util/StringUtils.java | 8 - .../config/gui/core/util/lerp/LerpUtils.java | 25 - .../config/gui/core/util/lerp/LerpingFloat.java | 68 -- .../config/gui/core/util/lerp/LerpingInteger.java | 76 -- .../config/gui/core/util/render/RenderUtils.java | 155 ---- .../gui/core/util/render/TextRenderUtils.java | 155 ---- .../config/gui/textures/TextureObject.java | 37 - .../skyhanni/config/gui/textures/Textures.java | 54 -- .../skyhanni/config/gui/utils/ConfigUtils.java | 314 -------- .../hannibal2/skyhanni/features/ButtonOnPause.kt | 4 +- .../at/hannibal2/skyhanni/utils/ChromaUtils.kt | 61 ++ .../at/hannibal2/skyhanni/utils/RenderUtils.kt | 46 +- .../at/hannibal2/skyhanni/utils/StringUtils.kt | 18 + .../resources/assets/notenoughupdates/button.png | Bin 0 -> 2664 bytes .../assets/notenoughupdates/button_white.png | Bin 0 -> 6570 bytes .../resources/assets/notenoughupdates/core/bar.png | Bin 0 -> 2095 bytes .../assets/notenoughupdates/core/bar_1.png | Bin 0 -> 2095 bytes .../assets/notenoughupdates/core/bar_2.png | Bin 0 -> 2095 bytes .../assets/notenoughupdates/core/bar_3.png | Bin 0 -> 2095 bytes .../assets/notenoughupdates/core/bar_on.png | Bin 0 -> 2095 bytes .../notenoughupdates/core/colour_selector_bar.png | Bin 0 -> 245 bytes .../core/colour_selector_bar_alpha.png | Bin 0 -> 240 bytes .../core/colour_selector_chroma.png | Bin 0 -> 211 bytes .../notenoughupdates/core/colour_selector_dot.png | Bin 0 -> 3677 bytes .../assets/notenoughupdates/core/delete.png | Bin 0 -> 5700 bytes .../assets/notenoughupdates/core/search.png | Bin 0 -> 401 bytes .../notenoughupdates/core/slider/slider_button.png | Bin 0 -> 1439 bytes .../core/slider/slider_off_cap.png | Bin 0 -> 1462 bytes .../core/slider/slider_off_notch.png | Bin 0 -> 1380 bytes .../core/slider/slider_off_segment.png | Bin 0 -> 1439 bytes .../notenoughupdates/core/slider/slider_on_cap.png | Bin 0 -> 1467 bytes .../core/slider/slider_on_notch.png | Bin 0 -> 1376 bytes .../core/slider/slider_on_segment.png | Bin 0 -> 1434 bytes .../assets/notenoughupdates/core/toggle_1.png | Bin 0 -> 592 bytes .../assets/notenoughupdates/core/toggle_2.png | Bin 0 -> 590 bytes .../assets/notenoughupdates/core/toggle_3.png | Bin 0 -> 592 bytes .../assets/notenoughupdates/core/toggle_off.png | Bin 0 -> 594 bytes .../assets/notenoughupdates/core/toggle_on.png | Bin 0 -> 593 bytes .../assets/notenoughupdates/social/discord.png | Bin 0 -> 6690 bytes src/main/resources/assets/skyhanni/bars.png | Bin 4298 -> 0 bytes src/main/resources/assets/skyhanni/button.png | Bin 2664 -> 0 bytes .../resources/assets/skyhanni/button_white.png | Bin 6570 -> 0 bytes src/main/resources/assets/skyhanni/core/bar.png | Bin 2095 -> 0 bytes .../assets/skyhanni/core/colour_selector_bar.png | Bin 245 -> 0 bytes .../skyhanni/core/colour_selector_bar_alpha.png | Bin 240 -> 0 bytes .../skyhanni/core/colour_selector_chroma.png | Bin 211 -> 0 bytes .../assets/skyhanni/core/colour_selector_dot.png | Bin 3677 -> 0 bytes src/main/resources/assets/skyhanni/core/delete.png | Bin 5700 -> 0 bytes .../assets/skyhanni/core/slider/slider_button.png | Bin 1439 -> 0 bytes .../assets/skyhanni/core/slider/slider_off_cap.png | Bin 1462 -> 0 bytes .../skyhanni/core/slider/slider_off_notch.png | Bin 1380 -> 0 bytes .../skyhanni/core/slider/slider_off_segment.png | Bin 1439 -> 0 bytes .../assets/skyhanni/core/slider/slider_on_cap.png | Bin 1467 -> 0 bytes .../skyhanni/core/slider/slider_on_notch.png | Bin 1376 -> 0 bytes .../skyhanni/core/slider/slider_on_segment.png | Bin 1434 -> 0 bytes .../resources/assets/skyhanni/core/toggle_1.png | Bin 592 -> 0 bytes .../resources/assets/skyhanni/core/toggle_2.png | Bin 590 -> 0 bytes .../resources/assets/skyhanni/core/toggle_3.png | Bin 592 -> 0 bytes .../resources/assets/skyhanni/core/toggle_off.png | Bin 594 -> 0 bytes .../resources/assets/skyhanni/core/toggle_on.png | Bin 593 -> 0 bytes src/main/resources/assets/skyhanni/dialogue.png | Bin 1537 -> 0 bytes src/main/resources/assets/skyhanni/discord.png | Bin 6690 -> 0 bytes src/main/resources/assets/skyhanni/dungeon.png | Bin 3683 -> 0 bytes src/main/resources/assets/skyhanni/maps/barn.png | Bin 18328 -> 0 bytes .../resources/assets/skyhanni/maps/crystal.png | Bin 190625 -> 0 bytes .../resources/assets/skyhanni/maps/dwarven.png | Bin 168793 -> 0 bytes src/main/resources/assets/skyhanni/maps/fort.png | Bin 50347 -> 0 bytes src/main/resources/assets/skyhanni/maps/hub.png | Bin 193702 -> 0 bytes .../assets/skyhanni/maps/icons/adventurer.png | Bin 390 -> 0 bytes .../resources/assets/skyhanni/maps/icons/ah.png | Bin 294 -> 0 bytes .../resources/assets/skyhanni/maps/icons/armor.png | Bin 362 -> 0 bytes .../assets/skyhanni/maps/icons/balloon.png | Bin 347 -> 0 bytes .../resources/assets/skyhanni/maps/icons/bank.png | Bin 434 -> 0 bytes .../assets/skyhanni/maps/icons/bank_upgrader.png | Bin 445 -> 0 bytes .../resources/assets/skyhanni/maps/icons/bar.png | Bin 395 -> 0 bytes .../assets/skyhanni/maps/icons/bazaar.png | Bin 306 -> 0 bytes .../assets/skyhanni/maps/icons/blacksmith.png | Bin 280 -> 0 bytes .../assets/skyhanni/maps/icons/building.png | Bin 278 -> 0 bytes .../assets/skyhanni/maps/icons/community.png | Bin 333 -> 0 bytes .../resources/assets/skyhanni/maps/icons/crown.png | Bin 386 -> 0 bytes .../assets/skyhanni/maps/icons/dark_ah.png | Bin 293 -> 0 bytes .../assets/skyhanni/maps/icons/dark_bar.png | Bin 380 -> 0 bytes .../assets/skyhanni/maps/icons/dungeon_portal.png | Bin 296 -> 0 bytes .../resources/assets/skyhanni/maps/icons/enter.png | Bin 347 -> 0 bytes .../resources/assets/skyhanni/maps/icons/exit.png | Bin 319 -> 0 bytes .../resources/assets/skyhanni/maps/icons/fairy.png | Bin 380 -> 0 bytes .../assets/skyhanni/maps/icons/fishing.png | Bin 280 -> 0 bytes .../skyhanni/maps/icons/fishing_merchant.png | Bin 362 -> 0 bytes .../assets/skyhanni/maps/icons/lumber.png | Bin 336 -> 0 bytes .../assets/skyhanni/maps/icons/maddox.png | Bin 318 -> 0 bytes .../assets/skyhanni/maps/icons/metal_merchants.png | Bin 506 -> 0 bytes .../resources/assets/skyhanni/maps/icons/mine.png | Bin 337 -> 0 bytes .../assets/skyhanni/maps/icons/painter.png | Bin 267 -> 0 bytes .../assets/skyhanni/maps/icons/pointer.png | Bin 265 -> 0 bytes .../assets/skyhanni/maps/icons/portal.png | Bin 296 -> 0 bytes .../assets/skyhanni/maps/icons/puzzle.png | Bin 305 -> 0 bytes .../assets/skyhanni/maps/icons/redstone.png | Bin 288 -> 0 bytes .../assets/skyhanni/maps/icons/reforge.png | Bin 392 -> 0 bytes .../resources/assets/skyhanni/maps/icons/runes.png | Bin 318 -> 0 bytes .../assets/skyhanni/maps/icons/scroll.png | Bin 282 -> 0 bytes .../assets/skyhanni/maps/icons/special.png | Bin 367 -> 0 bytes .../resources/assets/skyhanni/maps/icons/tux.png | Bin 306 -> 0 bytes .../resources/assets/skyhanni/maps/icons/vet.png | Bin 526 -> 0 bytes .../resources/assets/skyhanni/maps/icons/warp.png | Bin 270 -> 0 bytes .../assets/skyhanni/maps/icons/weapon.png | Bin 306 -> 0 bytes .../resources/assets/skyhanni/maps/icons/witch.png | Bin 340 -> 0 bytes .../assets/skyhanni/maps/icons/wizard.png | Bin 375 -> 0 bytes .../resources/assets/skyhanni/maps/icons/wool.png | Bin 258 -> 0 bytes .../resources/assets/skyhanni/maps/map_overlay.png | Bin 1992 -> 0 bytes .../resources/assets/skyhanni/maps/mushroom.png | Bin 82957 -> 0 bytes src/main/resources/assets/skyhanni/maps/park.png | Bin 49589 -> 0 bytes src/main/resources/assets/skyhanni/maps/readme.txt | 4 - .../resources/assets/skyhanni/maps/spidersden.png | Bin 47744 -> 0 bytes src/main/resources/assets/skyhanni/mines.png | Bin 3211 -> 0 bytes src/main/resources/assets/skyhanni/playerstats.png | Bin 4816 -> 0 bytes src/main/resources/assets/skyhanni/stats.png | Bin 7870 -> 0 bytes src/main/resources/assets/skyhanni/twitter.png | Bin 5816 -> 0 bytes src/main/resources/pack.mcmeta | 6 - 230 files changed, 7679 insertions(+), 5215 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/GuiTextures.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/commands/Commands.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/commands/SimpleCommand.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/BackgroundBlur.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/ChromaColour.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/GlScissorStack.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/GuiElement.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/GuiElementBoolean.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/GuiElementColour.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/GuiElementTextField.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/GuiScreenElementWrapper.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/Config.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/GuiPositionEditor.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/KeybindHelper.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/PositionNew.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/Category.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigAccordionId.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorAccordion.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorBoolean.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorButton.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorColour.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDraggableList.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorDropdown.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorFSR.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorKeybind.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorSlider.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigEditorText.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/annotations/ConfigOption.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditor.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorAccordion.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorBoolean.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorButton.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorColour.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDraggableList.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorDropdown.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorFSR.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorKeybind.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorSlider.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiOptionEditorText.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiPositionEditor.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/struct/ConfigProcessor.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/GuiElementSlider.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/Line.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/MiscUtils.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/Splitters.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/StringUtils.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/Vec3Comparable.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpUtils.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingFloat.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/lerp/LerpingInteger.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/render/GuiRenderUtils.java create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/util/render/TextRenderUtils.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/GuiTextures.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/commands/Commands.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/commands/SimpleCommand.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/config/ConfigEditor.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/BackgroundBlur.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/ChromaColour.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/GlScissorStack.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElement.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElementBoolean.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElementColour.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiElementTextField.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/GuiScreenElementWrapper.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/Config.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/KeybindHelper.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/Position.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/Category.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigAccordionId.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorAccordion.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorBoolean.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorButton.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorColour.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorDraggableList.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorDropdown.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorKeybind.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorSlider.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorStyle.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigEditorText.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/annotations/ConfigOption.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditor.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorAccordion.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorBoolean.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorButton.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorColour.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorDraggableList.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorDropdown.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorKeybind.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorSlider.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorStyle.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiOptionEditorText.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/gui/GuiPositionEditor.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/config/struct/ConfigProcessor.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/GuiElementSlider.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/StringUtils.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/lerp/LerpUtils.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/lerp/LerpingFloat.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/lerp/LerpingInteger.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/render/RenderUtils.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/core/util/render/TextRenderUtils.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/textures/TextureObject.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/textures/Textures.java delete mode 100644 src/main/java/at/hannibal2/skyhanni/config/gui/utils/ConfigUtils.java create mode 100644 src/main/java/at/hannibal2/skyhanni/utils/ChromaUtils.kt create mode 100644 src/main/resources/assets/notenoughupdates/button.png create mode 100644 src/main/resources/assets/notenoughupdates/button_white.png create mode 100644 src/main/resources/assets/notenoughupdates/core/bar.png create mode 100644 src/main/resources/assets/notenoughupdates/core/bar_1.png create mode 100644 src/main/resources/assets/notenoughupdates/core/bar_2.png create mode 100644 src/main/resources/assets/notenoughupdates/core/bar_3.png create mode 100644 src/main/resources/assets/notenoughupdates/core/bar_on.png create mode 100644 src/main/resources/assets/notenoughupdates/core/colour_selector_bar.png create mode 100644 src/main/resources/assets/notenoughupdates/core/colour_selector_bar_alpha.png create mode 100644 src/main/resources/assets/notenoughupdates/core/colour_selector_chroma.png create mode 100644 src/main/resources/assets/notenoughupdates/core/colour_selector_dot.png create mode 100644 src/main/resources/assets/notenoughupdates/core/delete.png create mode 100644 src/main/resources/assets/notenoughupdates/core/search.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_button.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_off_cap.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_off_notch.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_off_segment.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_on_cap.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_on_notch.png create mode 100644 src/main/resources/assets/notenoughupdates/core/slider/slider_on_segment.png create mode 100644 src/main/resources/assets/notenoughupdates/core/toggle_1.png create mode 100644 src/main/resources/assets/notenoughupdates/core/toggle_2.png create mode 100644 src/main/resources/assets/notenoughupdates/core/toggle_3.png create mode 100644 src/main/resources/assets/notenoughupdates/core/toggle_off.png create mode 100644 src/main/resources/assets/notenoughupdates/core/toggle_on.png create mode 100644 src/main/resources/assets/notenoughupdates/social/discord.png delete mode 100644 src/main/resources/assets/skyhanni/bars.png delete mode 100644 src/main/resources/assets/skyhanni/button.png delete mode 100644 src/main/resources/assets/skyhanni/button_white.png delete mode 100644 src/main/resources/assets/skyhanni/core/bar.png delete mode 100644 src/main/resources/assets/skyhanni/core/colour_selector_bar.png delete mode 100644 src/main/resources/assets/skyhanni/core/colour_selector_bar_alpha.png delete mode 100644 src/main/resources/assets/skyhanni/core/colour_selector_chroma.png delete mode 100644 src/main/resources/assets/skyhanni/core/colour_selector_dot.png delete mode 100644 src/main/resources/assets/skyhanni/core/delete.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_button.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_off_cap.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_off_notch.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_off_segment.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_on_cap.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_on_notch.png delete mode 100644 src/main/resources/assets/skyhanni/core/slider/slider_on_segment.png delete mode 100644 src/main/resources/assets/skyhanni/core/toggle_1.png delete mode 100644 src/main/resources/assets/skyhanni/core/toggle_2.png delete mode 100644 src/main/resources/assets/skyhanni/core/toggle_3.png delete mode 100644 src/main/resources/assets/skyhanni/core/toggle_off.png delete mode 100644 src/main/resources/assets/skyhanni/core/toggle_on.png delete mode 100644 src/main/resources/assets/skyhanni/dialogue.png delete mode 100644 src/main/resources/assets/skyhanni/discord.png delete mode 100644 src/main/resources/assets/skyhanni/dungeon.png delete mode 100644 src/main/resources/assets/skyhanni/maps/barn.png delete mode 100644 src/main/resources/assets/skyhanni/maps/crystal.png delete mode 100644 src/main/resources/assets/skyhanni/maps/dwarven.png delete mode 100644 src/main/resources/assets/skyhanni/maps/fort.png delete mode 100644 src/main/resources/assets/skyhanni/maps/hub.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/adventurer.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/ah.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/armor.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/balloon.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/bank.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/bank_upgrader.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/bar.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/bazaar.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/blacksmith.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/building.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/community.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/crown.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/dark_ah.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/dark_bar.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/dungeon_portal.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/enter.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/exit.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/fairy.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/fishing.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/fishing_merchant.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/lumber.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/maddox.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/metal_merchants.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/mine.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/painter.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/pointer.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/portal.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/puzzle.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/redstone.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/reforge.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/runes.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/scroll.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/special.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/tux.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/vet.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/warp.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/weapon.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/witch.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/wizard.png delete mode 100644 src/main/resources/assets/skyhanni/maps/icons/wool.png delete mode 100644 src/main/resources/assets/skyhanni/maps/map_overlay.png delete mode 100644 src/main/resources/assets/skyhanni/maps/mushroom.png delete mode 100644 src/main/resources/assets/skyhanni/maps/park.png delete mode 100644 src/main/resources/assets/skyhanni/maps/readme.txt delete mode 100644 src/main/resources/assets/skyhanni/maps/spidersden.png delete mode 100644 src/main/resources/assets/skyhanni/mines.png delete mode 100644 src/main/resources/assets/skyhanni/playerstats.png delete mode 100644 src/main/resources/assets/skyhanni/stats.png delete mode 100644 src/main/resources/assets/skyhanni/twitter.png delete mode 100644 src/main/resources/pack.mcmeta diff --git a/CHANGELOG.md b/CHANGELOG.md index bc96db169..8e692180e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Misc - Added hiding the flame particles when using the Fire Veil Wand ability - Added circle around the player when having the Fire Veil Wand ability is active +- The config GUI how has a search function (top right corner) ### Small Changes - Changed the ashfang gravity orb highlight from square to cylinder diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java index 9d62cf4e5..f44020e4b 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java @@ -2,7 +2,7 @@ package at.hannibal2.skyhanni; import at.hannibal2.skyhanni.config.ConfigManager; import at.hannibal2.skyhanni.config.Features; -import at.hannibal2.skyhanni.config.gui.commands.Commands; +import at.hannibal2.skyhanni.config.commands.Commands; import at.hannibal2.skyhanni.data.*; import at.hannibal2.skyhanni.data.repo.RepoManager; import at.hannibal2.skyhanni.features.*; @@ -122,7 +122,7 @@ public class SkyHanniMod { registerEvent(new LorenzTest()); registerEvent(new ButtonOnPause()); - configManager = new ConfigManager(this); + configManager = new ConfigManager(); configManager.firstLoad(); MinecraftConsoleFilter.initLogging(); diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java b/src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java new file mode 100644 index 000000000..407a0bf82 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigEditor.java @@ -0,0 +1,883 @@ +/* + * Copyright (C) 2022 NotEnoughUpdates contributors + * + * This file is part of NotEnoughUpdates. + * + * NotEnoughUpdates is free software: you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 3 of the License, or (at your option) any later version. + * + * NotEnoughUpdates is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with NotEnoughUpdates. If not, see . + */ + +package at.hannibal2.skyhanni.config; + +import at.hannibal2.skyhanni.SkyHanniMod; +import at.hannibal2.skyhanni.config.core.GlScissorStack; +import at.hannibal2.skyhanni.config.core.GuiElement; +import at.hannibal2.skyhanni.config.core.GuiElementTextField; +import at.hannibal2.skyhanni.config.core.config.gui.GuiOptionEditor; +import at.hannibal2.skyhanni.config.core.config.gui.GuiOptionEditorAccordion; +import at.hannibal2.skyhanni.config.core.config.struct.ConfigProcessor; +import at.hannibal2.skyhanni.config.core.util.lerp.LerpUtils; +import at.hannibal2.skyhanni.config.core.util.lerp.LerpingInteger; +import at.hannibal2.skyhanni.config.core.util.render.GuiRenderUtils; +import at.hannibal2.skyhanni.config.core.util.render.TextRenderUtils; +import at.hannibal2.skyhanni.utils.StringUtils; +import com.google.common.collect.Lists; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.net.URI; +import java.util.List; +import java.util.*; + +import static at.hannibal2.skyhanni.config.GuiTextures.DISCORD; +import static at.hannibal2.skyhanni.config.GuiTextures.GITHUB; + +public class ConfigEditor extends GuiElement { + private static final ResourceLocation[] socialsIco = new ResourceLocation[]{ + DISCORD, GITHUB + }; + private static final String[] socialsLink = new String[]{ + "https://discord.gg/8DXVN4BJz3", + "https://github.com/hannibal00212/SkyHanni" + }; + private static final ResourceLocation SEARCH_ICON = new ResourceLocation("notenoughupdates:core/search.png"); + public static ConfigEditor editor = new ConfigEditor(SkyHanniMod.feature); + private final long openedMillis; + private final LerpingInteger optionsScroll = new LerpingInteger(0, 150); + private final LerpingInteger categoryScroll = new LerpingInteger(0, 150); + private final LinkedHashMap processedConfig; + private final TreeMap> searchOptionMap = new TreeMap<>(); + private final HashMap categoryForOption = + new HashMap<>(); + private final LerpingInteger minimumSearchSize = new LerpingInteger(0, 150); + private final GuiElementTextField searchField = new GuiElementTextField("", 0, 20, 0); + private String selectedCategory = null; + private Set searchedCategories = null; + private Map> searchedAccordions = null; + private Set searchedOptions = null; + private float optionsBarStart; + private float optionsBarend; + private int lastMouseX = 0; + private int keyboardScrollXCutoff = 0; + + public ConfigEditor(Features config) { + this(config, null); + } + + public ConfigEditor(Features config, String categoryOpen) { + this.openedMillis = System.currentTimeMillis(); + this.processedConfig = ConfigProcessor.create(config); + + for (ConfigProcessor.ProcessedCategory category : processedConfig.values()) { + for (ConfigProcessor.ProcessedOption option : category.options.values()) { + categoryForOption.put(option, category); + + String combined = category.name + " " + category.desc + " " + option.name + " " + option.desc; + combined = combined.replaceAll("[^a-zA-Z_ ]", "").toLowerCase(); + for (String word : combined.split("[ _]")) { + searchOptionMap.computeIfAbsent(word, k -> new HashSet<>()).add(option); + } + } + } + + if (categoryOpen != null) { + for (Map.Entry category : processedConfig.entrySet()) { + if (category.getValue().name.equalsIgnoreCase(categoryOpen)) { + selectedCategory = category.getKey(); + break; + } + } + if (selectedCategory == null) { + for (Map.Entry category : processedConfig.entrySet()) { + if (category.getValue().name.toLowerCase().startsWith(categoryOpen.toLowerCase())) { + selectedCategory = category.getKey(); + break; + } + } + } + if (selectedCategory == null) { + for (Map.Entry category : processedConfig.entrySet()) { + if (category.getValue().name.toLowerCase().contains(categoryOpen.toLowerCase())) { + selectedCategory = category.getKey(); + break; + } + } + } + } + + editor = this; + } + + private LinkedHashMap getCurrentConfigEditing() { + LinkedHashMap newMap = new LinkedHashMap<>(processedConfig); + if (searchedCategories != null) newMap.values().retainAll(searchedCategories); + return newMap; + } + + private LinkedHashMap getOptionsInCategory(ConfigProcessor.ProcessedCategory cat) { + LinkedHashMap newMap = new LinkedHashMap<>(cat.options); + + if (searchedOptions != null) { + Set retain = new HashSet<>(); + retain.addAll(searchedOptions); + + if (searchedAccordions != null) { + Set visibleAccordions = searchedAccordions.get(cat); + + if (visibleAccordions != null && !visibleAccordions.isEmpty()) { + for (ConfigProcessor.ProcessedOption option : newMap.values()) { + if (option.editor instanceof GuiOptionEditorAccordion) { + int accordionId = ((GuiOptionEditorAccordion) option.editor).getAccordionId(); + + if (visibleAccordions.contains(accordionId)) { + retain.add(option); + } + } + } + } + + } + + newMap.values().retainAll(retain); + } + return newMap; + } + + public String getSelectedCategory() { + return selectedCategory; + } + + private void setSelectedCategory(String category) { + selectedCategory = category; + optionsScroll.setValue(0); + } + + public String getSelectedCategoryName() { + return processedConfig.get(selectedCategory).name; + } + + public void search() { + String search = searchField.getText().trim().replaceAll("[^a-zA-Z_ ]", "").toLowerCase(); + searchedCategories = null; + searchedOptions = null; + searchedAccordions = null; + + if (!search.isEmpty()) { + searchedCategories = new HashSet<>(); + searchedAccordions = new HashMap<>(); + + for (String word : search.split(" ")) { + if (word.trim().isEmpty()) continue; + + Set options = new HashSet<>(); + + Map> map = StringUtils.INSTANCE.subMapWithKeysThatAreSuffixes(word, searchOptionMap); + + map.values().forEach(options::addAll); + + if (!options.isEmpty()) { + if (searchedOptions == null) { + searchedOptions = new HashSet<>(options); + } else { + searchedOptions.retainAll(options); + } + } + } + + if (searchedOptions == null) { + searchedOptions = new HashSet<>(); + } else { + for (ConfigProcessor.ProcessedOption option : searchedOptions) { + ConfigProcessor.ProcessedCategory cat = categoryForOption.get(option); + if (cat == null) continue; + + searchedCategories.add(cat); + searchedAccordions.computeIfAbsent(cat, k -> new HashSet<>()).add(option.accordionId); + } + } + } + } + + public void render() { + optionsScroll.tick(); + categoryScroll.tick(); + handleKeyboardPresses(); + + List tooltipToDisplay = null; + + long currentTime = System.currentTimeMillis(); + long delta = currentTime - openedMillis; + + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + int mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1; + + float opacityFactor = LerpUtils.sigmoidZeroOne(delta / 500f); + GuiRenderUtils.drawGradientRect(0, 0, 0, width, height, + (int) (0x80 * opacityFactor) << 24 | 0x101010, + (int) (0x90 * opacityFactor) << 24 | 0x101010 + ); + + int xSize = Math.min(scaledResolution.getScaledWidth() - 100 / scaledResolution.getScaleFactor(), 500); + int ySize = Math.min(scaledResolution.getScaledHeight() - 100 / scaledResolution.getScaleFactor(), 400); + + int x = (scaledResolution.getScaledWidth() - xSize) / 2; + int y = (scaledResolution.getScaledHeight() - ySize) / 2; + + int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); + + int openingXSize = xSize; + int openingYSize = ySize; + if (delta < 150) { + openingXSize = (int) (delta * xSize / 150); + openingYSize = 5; + } else if (delta < 300) { + openingYSize = 5 + (int) (delta - 150) * (ySize - 5) / 150; + } + GuiRenderUtils.drawFloatingRectDark( + (scaledResolution.getScaledWidth() - openingXSize) / 2, + (scaledResolution.getScaledHeight() - openingYSize) / 2, + openingXSize, openingYSize + ); + GlScissorStack.clear(); + GlScissorStack.push((scaledResolution.getScaledWidth() - openingXSize) / 2, + (scaledResolution.getScaledHeight() - openingYSize) / 2, + (scaledResolution.getScaledWidth() + openingXSize) / 2, + (scaledResolution.getScaledHeight() + openingYSize) / 2, scaledResolution + ); + + GuiRenderUtils.drawFloatingRectDark(x + 5, y + 5, xSize - 10, 20, false); + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + TextRenderUtils.drawStringCenteredScaledMaxWidth("SkyHanni " + SkyHanniMod.VERSION + " by " + EnumChatFormatting.RED + "hannibal2" + EnumChatFormatting.RESET + ", config by " + EnumChatFormatting.DARK_PURPLE + "Moulberry", fr, x + xSize / 2f, y + 15, false, 200, 0xa0a0a0); + GuiRenderUtils.drawFloatingRectDark(x + 4, y + 49 - 20, + 140, ySize - 54 + 20, false + ); + + int innerPadding = 20 / adjScaleFactor; + int innerLeft = x + 4 + innerPadding; + int innerRight = x + 144 - innerPadding; + int innerTop = y + 49 + innerPadding; + int innerBottom = y + ySize - 5 - innerPadding; + Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left + Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top + Gui.drawRect(innerRight - 1, innerTop + 1, innerRight, innerBottom, 0xff28282E); //Right + Gui.drawRect(innerLeft + 1, innerBottom - 1, innerRight - 1, innerBottom, 0xff28282E); //Bottom + Gui.drawRect(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, 0x6008080E); //Middle + + GlScissorStack.push(0, innerTop + 1, scaledResolution.getScaledWidth(), + innerBottom - 1, scaledResolution + ); + + float catBarSize = 1; + int catY = -categoryScroll.getValue(); + + LinkedHashMap currentConfigEditing = getCurrentConfigEditing(); + for (Map.Entry entry : currentConfigEditing.entrySet()) { + String selectedCategory = getSelectedCategory(); + if (selectedCategory == null || !currentConfigEditing.containsKey(selectedCategory)) { + setSelectedCategory(entry.getKey()); + } + String catName = entry.getValue().name; + if (entry.getKey().equals(getSelectedCategory())) { + catName = EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.UNDERLINE + catName; + } else { + catName = EnumChatFormatting.GRAY + catName; + } + TextRenderUtils.drawStringCenteredScaledMaxWidth(catName, + fr, x + 75, y + 70 + catY, false, 100, -1 + ); + catY += 15; + if (catY > 0) { + catBarSize = + LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (catY + 5 + categoryScroll.getValue())); + } + } + + float catBarStart = categoryScroll.getValue() / (float) (catY + categoryScroll.getValue()); + float catBarEnd = catBarStart + catBarSize; + if (catBarEnd > 1) { + catBarEnd = 1; + if (categoryScroll.getTarget() / (float) (catY + categoryScroll.getValue()) + catBarSize < 1) { + int target = optionsScroll.getTarget(); + categoryScroll.setValue((int) Math.ceil( + (catY + 5 + categoryScroll.getValue()) - catBarSize * (catY + 5 + categoryScroll.getValue()))); + categoryScroll.setTarget(target); + } else { + categoryScroll.setValue((int) Math.ceil( + (catY + 5 + categoryScroll.getValue()) - catBarSize * (catY + 5 + categoryScroll.getValue()))); + } + } + int catDist = innerBottom - innerTop - 12; + Gui.drawRect(innerLeft + 2, innerTop + 5, innerLeft + 7, innerBottom - 5, 0xff101010); + Gui.drawRect(innerLeft + 3, innerTop + 6 + (int) (catDist * catBarStart), innerLeft + 6, + innerTop + 6 + (int) (catDist * catBarEnd), 0xff303030 + ); + + GlScissorStack.pop(scaledResolution); + + TextRenderUtils.drawStringCenteredScaledMaxWidth("Categories", + fr, x + 75, y + 44, false, 120, 0xa368ef + ); + + GuiRenderUtils.drawFloatingRectDark(x + 149, y + 29, xSize - 154, ySize - 34, false); + + innerLeft = x + 149 + innerPadding; + innerRight = x + xSize - 5 - innerPadding; + innerBottom = y + ySize - 5 - innerPadding; + + Minecraft.getMinecraft().getTextureManager().bindTexture(SEARCH_ICON); + GlStateManager.color(1, 1, 1, 1); + GuiRenderUtils.drawTexturedRect(innerRight - 20, innerTop - (20 + innerPadding) / 2 - 9, 18, 18, GL11.GL_NEAREST); + + minimumSearchSize.tick(); + boolean shouldShow = !searchField.getText().trim().isEmpty() || searchField.getFocus(); + if (shouldShow && minimumSearchSize.getTarget() < 30) { + minimumSearchSize.setTarget(30); + minimumSearchSize.resetTimer(); + } else if (!shouldShow && minimumSearchSize.getTarget() > 0) { + minimumSearchSize.setTarget(0); + minimumSearchSize.resetTimer(); + } + + int rightStuffLen = 20; + if (minimumSearchSize.getValue() > 1) { + int strLen = Minecraft.getMinecraft().fontRendererObj.getStringWidth(searchField.getText()) + 10; + if (!shouldShow) strLen = 0; + + int len = Math.max(strLen, minimumSearchSize.getValue()); + searchField.setSize(len, 18); + searchField.render(innerRight - 25 - len, innerTop - (20 + innerPadding) / 2 - 9); + + rightStuffLen += 5 + len; + } + + if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) { + ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory()); + + TextRenderUtils.drawStringScaledMaxWidth(cat.desc, + fr, innerLeft + 5, y + 40, true, innerRight - innerLeft - rightStuffLen - 10, 0xb0b0b0 + ); + } + + Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left + Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top + Gui.drawRect(innerRight - 1, innerTop + 1, innerRight, innerBottom, 0xff303036); //Right + Gui.drawRect(innerLeft + 1, innerBottom - 1, innerRight - 1, innerBottom, 0xff303036); //Bottom + Gui.drawRect(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, 0x6008080E); //Middle + + GlScissorStack.push(innerLeft + 1, innerTop + 1, innerRight - 1, innerBottom - 1, scaledResolution); + float barSize = 1; + int optionY = -optionsScroll.getValue(); + if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) { + ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory()); + int optionWidthDefault = innerRight - innerLeft - 20; + GlStateManager.enableDepth(); + HashMap activeAccordions = new HashMap<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { + int optionWidth = optionWidthDefault; + if (option.accordionId >= 0) { + if (!activeAccordions.containsKey(option.accordionId)) { + continue; + } + int accordionDepth = activeAccordions.get(option.accordionId); + optionWidth = optionWidthDefault - (2 * innerPadding) * (accordionDepth + 1); + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + int accordionDepth = 0; + if (option.accordionId >= 0) { + accordionDepth = activeAccordions.get(option.accordionId) + 1; + } + activeAccordions.put(accordion.getAccordionId(), accordionDepth); + } + } + int optionHeight = editor.getHeight(); + if (innerTop + 5 + optionY + optionHeight > innerTop + 1 && innerTop + 5 + optionY < innerBottom - 1) { + editor.render((innerLeft + innerRight - optionWidth) / 2 - 5, innerTop + 5 + optionY, optionWidth); + } + optionY += optionHeight + 5; + } + GlStateManager.disableDepth(); + if (optionY > 0) { + barSize = + LerpUtils.clampZeroOne((float) (innerBottom - innerTop - 2) / (optionY + 5 + optionsScroll.getValue())); + } + } + + GlScissorStack.pop(scaledResolution); + + GL11.glDisable(GL11.GL_SCISSOR_TEST); + if (getSelectedCategory() != null && currentConfigEditing.containsKey(getSelectedCategory())) { + int optionYOverlay = -optionsScroll.getValue(); + ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get(getSelectedCategory()); + int optionWidthDefault = innerRight - innerLeft - 20; + + GlStateManager.translate(0, 0, 10); + GlStateManager.enableDepth(); + HashMap activeAccordions = new HashMap<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat).values()) { + int optionWidth = optionWidthDefault; + if (option.accordionId >= 0) { + if (!activeAccordions.containsKey(option.accordionId)) { + continue; + } + int accordionDepth = activeAccordions.get(option.accordionId); + optionWidth = optionWidthDefault - (2 * innerPadding) * (accordionDepth + 1); + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + int accordionDepth = 0; + if (option.accordionId >= 0) { + accordionDepth = activeAccordions.get(option.accordionId) + 1; + } + activeAccordions.put(accordion.getAccordionId(), accordionDepth); + } + } + int optionHeight = editor.getHeight(); + if (innerTop + 5 + optionYOverlay + optionHeight > innerTop + 1 && + innerTop + 5 + optionYOverlay < innerBottom - 1) { + editor.renderOverlay( + (innerLeft + innerRight - optionWidth) / 2 - 5, + innerTop + 5 + optionYOverlay, + optionWidth + ); + } + optionYOverlay += optionHeight + 5; + } + GlStateManager.disableDepth(); + GlStateManager.translate(0, 0, -10); + } + GL11.glEnable(GL11.GL_SCISSOR_TEST); + + optionsBarStart = optionsScroll.getValue() / (float) (optionY + optionsScroll.getValue()); + optionsBarend = optionsBarStart + barSize; + if (optionsBarend > 1) { + optionsBarend = 1; + if (optionsScroll.getTarget() / (float) (optionY + optionsScroll.getValue()) + barSize < 1) { + int target = optionsScroll.getTarget(); + optionsScroll.setValue((int) Math.ceil( + (optionY + 5 + optionsScroll.getValue()) - barSize * (optionY + 5 + optionsScroll.getValue()))); + optionsScroll.setTarget(target); + } else { + optionsScroll.setValue((int) Math.ceil( + (optionY + 5 + optionsScroll.getValue()) - barSize * (optionY + 5 + optionsScroll.getValue()))); + } + } + int dist = innerBottom - innerTop - 12; + Gui.drawRect(innerRight - 10, innerTop + 5, innerRight - 5, innerBottom - 5, 0xff101010); + Gui.drawRect( + innerRight - 9, + innerTop + 6 + (int) (dist * optionsBarStart), + innerRight - 6, + innerTop + 6 + (int) (dist * optionsBarend), + 0xff303030 + ); + + for (int socialIndex = 0; socialIndex < socialsIco.length; socialIndex++) { + Minecraft.getMinecraft().getTextureManager().bindTexture(socialsIco[socialIndex]); + GlStateManager.color(1, 1, 1, 1); + int socialLeft = x + xSize - 23 - 18 * socialIndex; + GuiRenderUtils.drawTexturedRect(socialLeft, y + 7, 16, 16, GL11.GL_LINEAR); + + if (mouseX >= socialLeft && mouseX <= socialLeft + 16 && + mouseY >= y + 6 && mouseY <= y + 23) { + tooltipToDisplay = Lists.newArrayList( + EnumChatFormatting.YELLOW + "Go to: " + EnumChatFormatting.RESET + socialsLink[socialIndex]); + } + } + + GlScissorStack.clear(); + + if (tooltipToDisplay != null) { + TextRenderUtils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, -1, fr); + } + + GlStateManager.translate(0, 0, -2); + } + + public boolean mouseInput(int mouseX, int mouseY) { + lastMouseX = mouseX; + ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + + int xSize = Math.min(width - 100 / scaledResolution.getScaleFactor(), 500); + int ySize = Math.min(height - 100 / scaledResolution.getScaleFactor(), 400); + + int x = (scaledResolution.getScaledWidth() - xSize) / 2; + int y = (scaledResolution.getScaledHeight() - ySize) / 2; + + int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); + + int innerPadding = 20 / adjScaleFactor; + int innerTop = y + 49 + innerPadding; + int innerBottom = y + ySize - 5 - innerPadding; + int innerLeft = x + 149 + innerPadding; + int innerRight = x + xSize - 5 - innerPadding; + + int dist = innerBottom - innerTop - 12; + int optionsBarStartY = innerTop + 6 + (int) (dist * optionsBarStart); + int optionsBarEndY = innerTop + 6 + (int) (dist * optionsBarend); + int optionsBarStartX = innerRight - 12; + int optionsBarEndX = innerRight - 3; + + int categoryY = -categoryScroll.getValue(); + categoryY += 15 * getCurrentConfigEditing().size(); + int catDist = innerBottom - innerTop - 12; + float catBarStart = categoryScroll.getValue() / (float) (categoryY + categoryScroll.getValue()); + float categoryBarSize = LerpUtils.clampZeroOne( + (float) (innerBottom - innerTop - 2) / (categoryY + 5 + categoryScroll.getValue())); + float catBarEnd = catBarStart + categoryBarSize; + int categoryBarStartY = innerTop + 6 + (int) (catDist * catBarStart); + int categoryBarEndY = innerTop + 6 + (int) (catDist * catBarEnd); + int categoryBarStartX = x + innerPadding + 7; + int categoryBarEndX = x + innerPadding + 12; + keyboardScrollXCutoff = innerLeft - 10; + if (Mouse.getEventButtonState()) { + if ((mouseY < optionsBarStartY || mouseY > optionsBarEndY) && + (mouseX >= optionsBarStartX && mouseX <= optionsBarEndX) && mouseY > innerTop + 6 && mouseY < innerBottom - 6) { + optionsScroll.setTimeToReachTarget(200); + optionsScroll.resetTimer(); + optionsScroll.setTarget(mouseY - innerTop); + return true; + } else if ((mouseY < categoryBarStartY || mouseY > categoryBarEndY) && + (mouseX >= categoryBarStartX && mouseX <= categoryBarEndX) && mouseY > innerTop + 6 && + mouseY < innerBottom - 6) { + categoryScroll.setTimeToReachTarget(200); + categoryScroll.resetTimer(); + categoryScroll.setTarget(mouseY - innerTop); + return true; + } + + searchField.setFocus(mouseX >= innerRight - 20 && mouseX <= innerRight - 2 && + mouseY >= innerTop - (20 + innerPadding) / 2 - 9 && mouseY <= innerTop - (20 + innerPadding) / 2 + 9); + + if (minimumSearchSize.getVa