From 6d8e1e5659f64a4f9ba86d6ab5bbc8e688faf22a Mon Sep 17 00:00:00 2001 From: ThatGravyBoat Date: Tue, 6 Jul 2021 15:10:29 -0230 Subject: Initial Commit --- .../skyblockhud/ComponentBuilder.java | 55 ++ .../skyblockhud/ComponentHandler.java | 124 +++++ .../com/thatgravyboat/skyblockhud/GuiTextures.java | 37 ++ .../com/thatgravyboat/skyblockhud/SkyblockHud.java | 195 +++++++ .../thatgravyboat/skyblockhud/SpecialColour.java | 95 ++++ .../java/com/thatgravyboat/skyblockhud/Utils.java | 247 +++++++++ .../skyblockhud/api/LeaderboardGetter.java | 65 +++ .../api/events/ProfileSwitchedEvent.java | 7 + .../api/events/SidebarLineUpdateEvent.java | 22 + .../skyblockhud/api/events/SidebarPostEvent.java | 22 + .../skyblockhud/api/events/SidebarPreGetEvent.java | 18 + .../skyblockhud/commands/Commands.java | 42 ++ .../skyblockhud/commands/SimpleCommand.java | 58 ++ .../skyblockhud/config/KeyBindings.java | 9 + .../skyblockhud/config/SBHConfig.java | 486 +++++++++++++++++ .../skyblockhud/config/SBHConfigEditor.java | 597 +++++++++++++++++++++ .../skyblockhud/core/BackgroundBlur.java | 231 ++++++++ .../skyblockhud/core/ChromaColour.java | 95 ++++ .../skyblockhud/core/GlScissorStack.java | 87 +++ .../thatgravyboat/skyblockhud/core/GuiElement.java | 8 + .../skyblockhud/core/GuiElementBoolean.java | 121 +++++ .../skyblockhud/core/GuiElementColour.java | 368 +++++++++++++ .../skyblockhud/core/GuiElementTextField.java | 534 ++++++++++++++++++ .../skyblockhud/core/GuiScreenElementWrapper.java | 35 ++ .../skyblockhud/core/config/Config.java | 8 + .../skyblockhud/core/config/Position.java | 196 +++++++ .../core/config/annotations/Category.java | 15 + .../core/config/annotations/ConfigAccordionId.java | 14 + .../config/annotations/ConfigEditorAccordion.java | 14 + .../config/annotations/ConfigEditorBoolean.java | 12 + .../config/annotations/ConfigEditorButton.java | 15 + .../config/annotations/ConfigEditorColour.java | 13 + .../annotations/ConfigEditorDraggableList.java | 14 + .../config/annotations/ConfigEditorDropdown.java | 16 + .../config/annotations/ConfigEditorSlider.java | 18 + .../core/config/annotations/ConfigEditorText.java | 13 + .../core/config/annotations/ConfigOption.java | 17 + .../core/config/gui/GuiOptionEditor.java | 62 +++ .../core/config/gui/GuiOptionEditorAccordion.java | 82 +++ .../core/config/gui/GuiOptionEditorBoolean.java | 38 ++ .../core/config/gui/GuiOptionEditorButton.java | 64 +++ .../core/config/gui/GuiOptionEditorColour.java | 71 +++ .../config/gui/GuiOptionEditorDraggableList.java | 284 ++++++++++ .../core/config/gui/GuiOptionEditorDropdown.java | 152 ++++++ .../core/config/gui/GuiOptionEditorSlider.java | 132 +++++ .../core/config/gui/GuiOptionEditorText.java | 84 +++ .../core/config/gui/GuiPositionEditor.java | 179 ++++++ .../core/config/struct/ConfigProcessor.java | 176 ++++++ .../skyblockhud/core/util/GuiElementSlider.java | 123 +++++ .../skyblockhud/core/util/MiscUtils.java | 104 ++++ .../skyblockhud/core/util/Splitters.java | 10 + .../skyblockhud/core/util/StringUtils.java | 39 ++ .../skyblockhud/core/util/lerp/LerpUtils.java | 26 + .../skyblockhud/core/util/lerp/LerpingFloat.java | 68 +++ .../skyblockhud/core/util/lerp/LerpingInteger.java | 76 +++ .../skyblockhud/core/util/render/RenderUtils.java | 165 ++++++ .../core/util/render/TextRenderUtils.java | 215 ++++++++ .../skyblockhud/dungeons/Classes.java | 50 ++ .../skyblockhud/dungeons/DungeonHandler.java | 167 ++++++ .../skyblockhud/dungeons/DungeonPlayer.java | 31 ++ .../skyblockhud/handlers/BossbarHandler.java | 37 ++ .../skyblockhud/handlers/CurrencyHandler.java | 81 +++ .../skyblockhud/handlers/HeldItemHandler.java | 58 ++ .../skyblockhud/handlers/MapHandler.java | 219 ++++++++ .../skyblockhud/handlers/SlayerHandler.java | 121 +++++ .../skyblockhud/handlers/TimeHandler.java | 29 + .../handlers/mapicons/DwarvenIcons.java | 96 ++++ .../skyblockhud/handlers/mapicons/HubIcons.java | 308 +++++++++++ .../handlers/sbentities/EntityTypeHelper.java | 21 + .../handlers/sbentities/EntityTypeRegistry.java | 25 + .../handlers/sbentities/SkyBlockEntity.java | 26 + .../skyblockhud/location/DwarvenMineHandler.java | 97 ++++ .../skyblockhud/location/EndIslandHandler.java | 46 ++ .../skyblockhud/location/FarmingIslandHandler.java | 29 + .../skyblockhud/location/IslandHandler.java | 62 +++ .../skyblockhud/location/LocationCategory.java | 46 ++ .../skyblockhud/location/LocationHandler.java | 54 ++ .../skyblockhud/location/Locations.java | 157 ++++++ .../skyblockhud/location/ParkIslandHandler.java | 31 ++ .../skyblockhud/mixins/MixinEndermanRenderer.java | 25 + .../skyblockhud/mixins/MixinEntityArrow.java | 25 + .../skyblockhud/mixins/MixinGuiIngameForge.java | 92 ++++ .../mixins/MixinNetHandlerPlayClient.java | 53 ++ .../skyblockhud/overlay/DungeonOverlay.java | 150 ++++++ .../skyblockhud/overlay/GenericOverlays.java | 44 ++ .../skyblockhud/overlay/OverlayHud.java | 286 ++++++++++ .../thatgravyboat/skyblockhud/overlay/RPGHud.java | 102 ++++ .../skyblockhud/playerstats/ActionBarParsing.java | 131 +++++ .../thatgravyboat/skyblockhud/seasons/Season.java | 50 ++ .../skyblockhud/seasons/SeasonDateHandler.java | 57 ++ .../skyblockhud/tracker/KillTrackerHandler.java | 76 +++ .../skyblockhud/tracker/TrackerFileLoader.java | 171 ++++++ .../skyblockhud/tracker/TrackerHandler.java | 124 +++++ src/main/resources/assets/skyblockhud/bars.png | Bin 0 -> 4298 bytes src/main/resources/assets/skyblockhud/button.png | Bin 0 -> 2664 bytes .../resources/assets/skyblockhud/button_white.png | Bin 0 -> 6570 bytes src/main/resources/assets/skyblockhud/core/bar.png | Bin 0 -> 2095 bytes .../skyblockhud/core/colour_selector_bar.png | Bin 0 -> 245 bytes .../skyblockhud/core/colour_selector_bar_alpha.png | Bin 0 -> 240 bytes .../skyblockhud/core/colour_selector_chroma.png | Bin 0 -> 211 bytes .../skyblockhud/core/colour_selector_dot.png | Bin 0 -> 3677 bytes .../resources/assets/skyblockhud/core/delete.png | Bin 0 -> 5700 bytes .../skyblockhud/core/slider/slider_button.png | Bin 0 -> 1439 bytes .../skyblockhud/core/slider/slider_off_cap.png | Bin 0 -> 1462 bytes .../skyblockhud/core/slider/slider_off_notch.png | Bin 0 -> 1380 bytes .../skyblockhud/core/slider/slider_off_segment.png | Bin 0 -> 1439 bytes .../skyblockhud/core/slider/slider_on_cap.png | Bin 0 -> 1467 bytes .../skyblockhud/core/slider/slider_on_notch.png | Bin 0 -> 1376 bytes .../skyblockhud/core/slider/slider_on_segment.png | Bin 0 -> 1434 bytes .../resources/assets/skyblockhud/core/toggle_1.png | Bin 0 -> 592 bytes .../resources/assets/skyblockhud/core/toggle_2.png | Bin 0 -> 590 bytes .../resources/assets/skyblockhud/core/toggle_3.png | Bin 0 -> 592 bytes .../assets/skyblockhud/core/toggle_off.png | Bin 0 -> 594 bytes .../assets/skyblockhud/core/toggle_on.png | Bin 0 -> 593 bytes .../assets/skyblockhud/data/trackers.json | 352 ++++++++++++ src/main/resources/assets/skyblockhud/discord.png | Bin 0 -> 6690 bytes src/main/resources/assets/skyblockhud/dungeon.png | Bin 0 -> 3683 bytes .../resources/assets/skyblockhud/maps/barn.png | Bin 0 -> 18328 bytes .../resources/assets/skyblockhud/maps/dwarven.png | Bin 0 -> 197319 bytes .../resources/assets/skyblockhud/maps/fort.png | Bin 0 -> 50347 bytes src/main/resources/assets/skyblockhud/maps/hub.png | Bin 0 -> 193702 bytes .../assets/skyblockhud/maps/icons/adventurer.png | Bin 0 -> 390 bytes .../resources/assets/skyblockhud/maps/icons/ah.png | Bin 0 -> 294 bytes .../assets/skyblockhud/maps/icons/armor.png | Bin 0 -> 362 bytes .../assets/skyblockhud/maps/icons/balloon.png | Bin 0 -> 347 bytes .../assets/skyblockhud/maps/icons/bank.png | Bin 0 -> 434 bytes .../skyblockhud/maps/icons/bank_upgrader.png | Bin 0 -> 445 bytes .../assets/skyblockhud/maps/icons/bar.png | Bin 0 -> 395 bytes .../assets/skyblockhud/maps/icons/bazaar.png | Bin 0 -> 306 bytes .../assets/skyblockhud/maps/icons/blacksmith.png | Bin 0 -> 280 bytes .../assets/skyblockhud/maps/icons/building.png | Bin 0 -> 278 bytes .../assets/skyblockhud/maps/icons/community.png | Bin 0 -> 333 bytes .../assets/skyblockhud/maps/icons/crown.png | Bin 0 -> 386 bytes .../assets/skyblockhud/maps/icons/dark_ah.png | Bin 0 -> 293 bytes .../assets/skyblockhud/maps/icons/dark_bar.png | Bin 0 -> 380 bytes .../skyblockhud/maps/icons/dungeon_portal.png | Bin 0 -> 296 bytes .../assets/skyblockhud/maps/icons/enter.png | Bin 0 -> 347 bytes .../assets/skyblockhud/maps/icons/exit.png | Bin 0 -> 319 bytes .../assets/skyblockhud/maps/icons/fairy.png | Bin 0 -> 380 bytes .../assets/skyblockhud/maps/icons/fishing.png | Bin 0 -> 280 bytes .../skyblockhud/maps/icons/fishing_merchant.png | Bin 0 -> 362 bytes .../assets/skyblockhud/maps/icons/lumber.png | Bin 0 -> 336 bytes .../assets/skyblockhud/maps/icons/maddox.png | Bin 0 -> 318 bytes .../skyblockhud/maps/icons/metal_merchants.png | Bin 0 -> 506 bytes .../assets/skyblockhud/maps/icons/mine.png | Bin 0 -> 337 bytes .../assets/skyblockhud/maps/icons/painter.png | Bin 0 -> 267 bytes .../assets/skyblockhud/maps/icons/pointer.png | Bin 0 -> 265 bytes .../assets/skyblockhud/maps/icons/portal.png | Bin 0 -> 296 bytes .../assets/skyblockhud/maps/icons/puzzle.png | Bin 0 -> 305 bytes .../assets/skyblockhud/maps/icons/redstone.png | Bin 0 -> 288 bytes .../assets/skyblockhud/maps/icons/reforge.png | Bin 0 -> 392 bytes .../assets/skyblockhud/maps/icons/runes.png | Bin 0 -> 318 bytes .../assets/skyblockhud/maps/icons/scroll.png | Bin 0 -> 282 bytes .../assets/skyblockhud/maps/icons/special.png | Bin 0 -> 367 bytes .../assets/skyblockhud/maps/icons/tux.png | Bin 0 -> 306 bytes .../assets/skyblockhud/maps/icons/vet.png | Bin 0 -> 526 bytes .../assets/skyblockhud/maps/icons/warp.png | Bin 0 -> 270 bytes .../assets/skyblockhud/maps/icons/weapon.png | Bin 0 -> 306 bytes .../assets/skyblockhud/maps/icons/witch.png | Bin 0 -> 340 bytes .../assets/skyblockhud/maps/icons/wizard.png | Bin 0 -> 375 bytes .../assets/skyblockhud/maps/icons/wool.png | Bin 0 -> 258 bytes .../assets/skyblockhud/maps/map_overlay.png | Bin 0 -> 1992 bytes .../resources/assets/skyblockhud/maps/mushroom.png | Bin 0 -> 82957 bytes .../resources/assets/skyblockhud/maps/park.png | Bin 0 -> 49589 bytes .../resources/assets/skyblockhud/maps/readme.txt | 4 + .../assets/skyblockhud/maps/spidersden.png | Bin 0 -> 47744 bytes .../resources/assets/skyblockhud/playerstats.png | Bin 0 -> 4616 bytes src/main/resources/assets/skyblockhud/stats.png | Bin 0 -> 7074 bytes src/main/resources/assets/skyblockhud/twitter.png | Bin 0 -> 5816 bytes src/main/resources/mcmod.info | 16 + src/main/resources/mixins.skyblockhud.json | 10 + src/main/resources/pack.mcmeta | 6 + 172 files changed, 9638 insertions(+) create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/Utils.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileSwitchedEvent.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/config/KeyBindings.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfig.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfigEditor.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/BackgroundBlur.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/ChromaColour.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/GlScissorStack.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/GuiElement.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementBoolean.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementColour.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementTextField.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/GuiScreenElementWrapper.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/Config.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/Position.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/Category.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigAccordionId.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorAccordion.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorBoolean.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorButton.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorColour.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDraggableList.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDropdown.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorSlider.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorText.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigOption.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditor.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorAccordion.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorBoolean.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorButton.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorColour.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDraggableList.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDropdown.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorSlider.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorText.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiPositionEditor.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/config/struct/ConfigProcessor.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/GuiElementSlider.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/MiscUtils.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/Splitters.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/StringUtils.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpUtils.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingFloat.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingInteger.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/render/RenderUtils.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/core/util/render/TextRenderUtils.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/dungeons/Classes.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonPlayer.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/BossbarHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/CurrencyHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/HeldItemHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/MapHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/TimeHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/DwarvenIcons.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/HubIcons.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeHelper.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeRegistry.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/SkyBlockEntity.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/DwarvenMineHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/EndIslandHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/FarmingIslandHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/IslandHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/LocationCategory.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/LocationHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/Locations.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/ParkIslandHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEndermanRenderer.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEntityArrow.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinGuiIngameForge.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinNetHandlerPlayClient.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/overlay/GenericOverlays.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/overlay/OverlayHud.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/overlay/RPGHud.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/playerstats/ActionBarParsing.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/seasons/Season.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/seasons/SeasonDateHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/tracker/KillTrackerHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java create mode 100644 src/main/resources/assets/skyblockhud/bars.png create mode 100644 src/main/resources/assets/skyblockhud/button.png create mode 100644 src/main/resources/assets/skyblockhud/button_white.png create mode 100644 src/main/resources/assets/skyblockhud/core/bar.png create mode 100644 src/main/resources/assets/skyblockhud/core/colour_selector_bar.png create mode 100644 src/main/resources/assets/skyblockhud/core/colour_selector_bar_alpha.png create mode 100644 src/main/resources/assets/skyblockhud/core/colour_selector_chroma.png create mode 100644 src/main/resources/assets/skyblockhud/core/colour_selector_dot.png create mode 100644 src/main/resources/assets/skyblockhud/core/delete.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_button.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_off_cap.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_off_notch.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_off_segment.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_on_cap.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_on_notch.png create mode 100644 src/main/resources/assets/skyblockhud/core/slider/slider_on_segment.png create mode 100644 src/main/resources/assets/skyblockhud/core/toggle_1.png create mode 100644 src/main/resources/assets/skyblockhud/core/toggle_2.png create mode 100644 src/main/resources/assets/skyblockhud/core/toggle_3.png create mode 100644 src/main/resources/assets/skyblockhud/core/toggle_off.png create mode 100644 src/main/resources/assets/skyblockhud/core/toggle_on.png create mode 100644 src/main/resources/assets/skyblockhud/data/trackers.json create mode 100644 src/main/resources/assets/skyblockhud/discord.png create mode 100644 src/main/resources/assets/skyblockhud/dungeon.png create mode 100644 src/main/resources/assets/skyblockhud/maps/barn.png create mode 100644 src/main/resources/assets/skyblockhud/maps/dwarven.png create mode 100644 src/main/resources/assets/skyblockhud/maps/fort.png create mode 100644 src/main/resources/assets/skyblockhud/maps/hub.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/adventurer.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/ah.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/armor.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/balloon.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/bank.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/bank_upgrader.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/bar.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/bazaar.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/blacksmith.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/building.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/community.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/crown.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/dark_ah.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/dark_bar.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/dungeon_portal.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/enter.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/exit.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/fairy.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/fishing.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/fishing_merchant.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/lumber.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/maddox.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/metal_merchants.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/mine.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/painter.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/pointer.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/portal.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/puzzle.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/redstone.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/reforge.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/runes.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/scroll.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/special.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/tux.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/vet.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/warp.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/weapon.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/witch.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/wizard.png create mode 100644 src/main/resources/assets/skyblockhud/maps/icons/wool.png create mode 100644 src/main/resources/assets/skyblockhud/maps/map_overlay.png create mode 100644 src/main/resources/assets/skyblockhud/maps/mushroom.png create mode 100644 src/main/resources/assets/skyblockhud/maps/park.png create mode 100644 src/main/resources/assets/skyblockhud/maps/readme.txt create mode 100644 src/main/resources/assets/skyblockhud/maps/spidersden.png create mode 100644 src/main/resources/assets/skyblockhud/playerstats.png create mode 100644 src/main/resources/assets/skyblockhud/stats.png create mode 100644 src/main/resources/assets/skyblockhud/twitter.png create mode 100644 src/main/resources/mcmod.info create mode 100644 src/main/resources/mixins.skyblockhud.json create mode 100644 src/main/resources/pack.mcmeta (limited to 'src') diff --git a/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java b/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java new file mode 100644 index 000000000..e5299d522 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java @@ -0,0 +1,55 @@ +package com.thatgravyboat.skyblockhud; + +public class ComponentBuilder { + + public StringBuilder builder; + + public ComponentBuilder(){ + this.builder = new StringBuilder(); + } + + public ComponentBuilder apd(String text) { + return apd(text, '7'); + } + + public ComponentBuilder apd(String text, char[] colors) { + for (char color: colors) { + builder.append("\u00A7").append(color); + } + builder.append(text).append("\u00A7").append('r'); + return this; + } + + public ComponentBuilder apd(String text, char color) { + builder.append("\u00A7").append(color).append(text).append("\u00A7").append('r'); + return this; + } + + public ComponentBuilder nl(){ + builder.append("\n"); + return this; + } + + public ComponentBuilder nl(String text, char color){ + apd(text, color); + builder.append("\n"); + return this; + } + + public ComponentBuilder nl(String text, char[] colors){ + apd(text, colors); + builder.append("\n"); + return this; + } + + public ComponentBuilder nl(String text){ + apd(text); + builder.append("\n"); + return this; + } + + public String build() { + return builder.toString(); + } + +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java new file mode 100644 index 000000000..3c671f00a --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java @@ -0,0 +1,124 @@ +package com.thatgravyboat.skyblockhud; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import com.thatgravyboat.skyblockhud.dungeons.DungeonHandler; +import com.thatgravyboat.skyblockhud.location.*; +import com.thatgravyboat.skyblockhud.seasons.SeasonDateHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.world.WorldSettings; +import net.minecraftforge.client.GuiIngameForge; +import net.minecraftforge.client.event.ClientChatReceivedEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +import java.util.Comparator; +import java.util.List; +import java.util.regex.Pattern; + +public class ComponentHandler { + public static final Pattern SCOREBOARD_CHARACTERS = Pattern.compile("[^]\\[a-z A-Z:0-9/'.()+\\d-ยง?]"); + private static final Ordering sortingList = Ordering.from(new PlayerComparator()); + private static int ticksExisted = 0; + + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event){ + Minecraft mc = Minecraft.getMinecraft(); + ticksExisted++; + boolean eventPass = false; + if (mc.theWorld != null) { + List players = sortingList.sortedCopy(mc.thePlayer.sendQueue.getPlayerInfoMap()); + GuiIngameForge.renderObjective = !SkyblockHud.hasSkyblockScoreboard() || !SkyblockHud.config.misc.hideScoreboard; + if (players != null && SkyblockHud.hasSkyblockScoreboard()){ + + if (ticksExisted % 60 == 0) { + for (NetworkPlayerInfo player : players) { + if (player.getDisplayName() != null) { + String formattedTabListPlayer = SCOREBOARD_CHARACTERS.matcher(Utils.removeColor(player.getDisplayName().getFormattedText())).replaceAll(""); + if (LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS)) { + if (formattedTabListPlayer.toLowerCase().contains("secrets found:")) + DungeonHandler.parseTotalSecrets(formattedTabListPlayer); + if (formattedTabListPlayer.toLowerCase().contains("deaths:")) + DungeonHandler.parseDeaths(formattedTabListPlayer); + if (formattedTabListPlayer.toLowerCase().contains("crypts:")) + DungeonHandler.parseCrypts(formattedTabListPlayer); + }else if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.DWARVENMINES)){ + if (formattedTabListPlayer.toLowerCase().contains("mithril powder:")){ + DwarvenMineHandler.parseMithril(formattedTabListPlayer); + } + }else if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.MUSHROOMDESERT)){ + if (formattedTabListPlayer.toLowerCase().contains("pelts:")){ + try { + FarmingIslandHandler.pelts = Integer.parseInt(formattedTabListPlayer.toLowerCase().replace("pelts:","").trim()); + }catch (Exception ignored){} + } + } + } + } + if (players.size() > 80) { + for (int i = 61; i <= 80; i++) { + if (players.get(i).getDisplayName() != null) { + String formattedTabListPlayer = SCOREBOARD_CHARACTERS.matcher(Utils.removeColor(players.get(i).getDisplayName().getFormattedText())).replaceAll(""); + if (formattedTabListPlayer.toLowerCase().contains("event:")) { + if (i < 80) { + if (players.get(i + 1).getDisplayName() != null) { + String secondLine = SCOREBOARD_CHARACTERS.matcher(Utils.removeColor(players.get(i + 1).getDisplayName().getFormattedText())).replaceAll(""); + SeasonDateHandler.setCurrentEvent(formattedTabListPlayer.replace("Event:", ""), secondLine); + eventPass = true; + } + } + } + } + if (i == 80 && !eventPass) { + SeasonDateHandler.setCurrentEvent("", ""); + } + } + } + } + if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.PARK)) { + if (players.size() >= 80) { + for (int i = 41; i <= 60; i++) { + if (players.get(i).getDisplayName() != null) { + String formattedTabListPlayer = SCOREBOARD_CHARACTERS.matcher(Utils.removeColor(players.get(i).getDisplayName().getFormattedText())).replaceAll(""); + if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.PARK)) { + if (formattedTabListPlayer.toLowerCase().contains("rain:")) { + ParkIslandHandler.parseRain(formattedTabListPlayer.toLowerCase()); + } + } + } + } + } + }else if (ParkIslandHandler.isRaining()) { + ParkIslandHandler.parseRain(null); + } + } + } + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onStatusBar(ClientChatReceivedEvent event){ + if (event.type == 2){ + if (LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS)) DungeonHandler.parseSecrets(event.message.getFormattedText()); + } + } + + @SideOnly(Side.CLIENT) + static class PlayerComparator implements Comparator + { + private PlayerComparator() + { + } + + public int compare(NetworkPlayerInfo p_compare_1_, NetworkPlayerInfo p_compare_2_) + { + ScorePlayerTeam scoreplayerteam = p_compare_1_.getPlayerTeam(); + ScorePlayerTeam scoreplayerteam1 = p_compare_2_.getPlayerTeam(); + return ComparisonChain.start().compareTrueFirst(p_compare_1_.getGameType() != WorldSettings.GameType.SPECTATOR, p_compare_2_.getGameType() != WorldSettings.GameType.SPECTATOR).compare(scoreplayerteam != null ? scoreplayerteam.getRegisteredName() : "", scoreplayerteam1 != null ? scoreplayerteam1.getRegisteredName() : "").compare(p_compare_1_.getGameProfile().getName(), p_compare_2_.getGameProfile().getName()).result(); + } + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java b/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java new file mode 100644 index 000000000..435c2a5ac --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java @@ -0,0 +1,37 @@ +package com.thatgravyboat.skyblockhud; + +import net.minecraft.util.ResourceLocation; + +public class GuiTextures { + + private GuiTextures() {} + + public static final ResourceLocation DISCORD = new ResourceLocation("skyblockhud:discord.png"); + public static final ResourceLocation TWITTER = new ResourceLocation("skyblockhud:twitter.png"); + + public static final ResourceLocation button_tex = new ResourceLocation("skyblockhud:button.png"); + + public static final ResourceLocation button_white = new ResourceLocation("skyblockhud:button_white.png"); + + public static final ResourceLocation BAR = new ResourceLocation("skyblockhud:core/bar.png"); + public static final ResourceLocation OFF = new ResourceLocation("skyblockhud:core/toggle_off.png"); + public static final ResourceLocation ONE = new ResourceLocation("skyblockhud:core/toggle_1.png"); + public static final ResourceLocation TWO = new ResourceLocation("skyblockhud:core/toggle_2.png"); + public static final ResourceLocation THREE = new ResourceLocation("skyblockhud:core/toggle_3.png"); + public static final ResourceLocation ON = new ResourceLocation("skyblockhud:core/toggle_on.png"); + + public static final ResourceLocation slider_off_cap = new ResourceLocation("skyblockhud:core/slider/slider_off_cap.png"); + public static final ResourceLocation slider_off_notch = new ResourceLocation("skyblockhud:core/slider/slider_off_notch.png"); + public static final ResourceLocation slider_off_segment = new ResourceLocation("skyblockhud:core/slider/slider_off_segment.png"); + public static final ResourceLocation slider_on_cap = new ResourceLocation("skyblockhud:core/slider/slider_on_cap.png"); + public static final ResourceLocation slider_on_notch = new ResourceLocation("skyblockhud:core/slider/slider_on_notch.png"); + public static final ResourceLocation slider_on_segment = new ResourceLocation("skyblockhud:core/slider/slider_on_segment.png"); + public static final ResourceLocation slider_button_new = new ResourceLocation("skyblockhud:core/slider/slider_button.png"); + + public static final ResourceLocation overlay = new ResourceLocation("skyblockhud","stats.png"); + public static final ResourceLocation dungeon = new ResourceLocation("skyblockhud","dungeon.png"); + public static final ResourceLocation playerStat = new ResourceLocation("skyblockhud","playerstats.png"); + public static final ResourceLocation bars = new ResourceLocation("skyblockhud","bars.png"); + public static final ResourceLocation mapOverlay = new ResourceLocation("skyblockhud","maps/map_overlay.png"); + +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java b/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java new file mode 100644 index 000000000..a31889efb --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java @@ -0,0 +1,195 @@ +package com.thatgravyboat.skyblockhud; + +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.thatgravyboat.skyblockhud.api.LeaderboardGetter; +import com.thatgravyboat.skyblockhud.api.events.ProfileSwitchedEvent; +import com.thatgravyboat.skyblockhud.commands.Commands; +import com.thatgravyboat.skyblockhud.config.KeyBindings; +import com.thatgravyboat.skyblockhud.config.SBHConfig; +import com.thatgravyboat.skyblockhud.dungeons.DungeonHandler; +import com.thatgravyboat.skyblockhud.handlers.*; +import com.thatgravyboat.skyblockhud.location.DwarvenMineHandler; +import com.thatgravyboat.skyblockhud.location.FarmingIslandHandler; +import com.thatgravyboat.skyblockhud.location.IslandHandler; +import com.thatgravyboat.skyblockhud.location.LocationHandler; +import com.thatgravyboat.skyblockhud.overlay.DungeonOverlay; +import com.thatgravyboat.skyblockhud.overlay.OverlayHud; +import com.thatgravyboat.skyblockhud.overlay.RPGHud; +import com.thatgravyboat.skyblockhud.playerstats.ActionBarParsing; +import com.thatgravyboat.skyblockhud.seasons.SeasonDateHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraftforge.client.event.ClientChatReceivedEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; +import org.lwjgl.input.Keyboard; + +import java.awt.*; +import java.awt.datatransfer.StringSelection; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Set; + +@Mod(modid = SkyblockHud.MODID, version = SkyblockHud.VERSION) +public class SkyblockHud +{ + public static final String MODID = "skyblockhud"; + public static final String VERSION = "1.12"; + + public static SBHConfig config; + + private File configFile; + + private static final Set SKYBLOCK_IN_ALL_LANGUAGES = Sets.newHashSet("SKYBLOCK","\u7A7A\u5C9B\u751F\u5B58"); + + private final Gson gson = new GsonBuilder().setPrettyPrinting().excludeFieldsWithoutExposeAnnotation().create(); + + private static File configDirectory; + + @EventHandler + public void preInit(FMLPreInitializationEvent event){ + MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.EVENT_BUS.register(new LeaderboardGetter()); + MinecraftForge.EVENT_BUS.register(new SeasonDateHandler()); + MinecraftForge.EVENT_BUS.register(new LocationHandler()); + MinecraftForge.EVENT_BUS.register(new IslandHandler()); + MinecraftForge.EVENT_BUS.register(new TimeHandler()); + MinecraftForge.EVENT_BUS.register(new CurrencyHandler()); + MinecraftForge.EVENT_BUS.register(new SlayerHandler()); + MinecraftForge.EVENT_BUS.register(new DungeonHandler()); + MinecraftForge.EVENT_BUS.register(new DwarvenMineHandler()); + MinecraftForge.EVENT_BUS.register(new FarmingIslandHandler()); + + /* DISABLE UNTIL NEW SYSTEM + MinecraftForge.EVENT_BUS.register(new TrackerHandler()); + MinecraftForge.EVENT_BUS.register(new KillTrackerHandler()); + */ + MinecraftForge.EVENT_BUS.register(new HeldItemHandler()); + + ClientRegistry.registerKeyBinding(KeyBindings.map); + + MinecraftForge.EVENT_BUS.register(new ComponentHandler()); + MinecraftForge.EVENT_BUS.register(new ActionBarParsing()); + Commands.init(); + + configFile = new File(event.getModConfigurationDirectory(), "sbh-config.json"); + + if(configFile.exists()) { + try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8))) { + config = gson.fromJson(reader, SBHConfig.class); + } catch(Exception ignored) { } + } + + + if(config == null) { + config = new SBHConfig(); + saveConfig(); + } + + configDirectory = event.getModConfigurationDirectory(); + + Runtime.getRuntime().addShutdownHook(new Thread(this::saveConfig)); + //Runtime.getRuntime().addShutdownHook(new Thread(() -> TrackerFileLoader.saveTrackerStatsFile(event.getModConfigurationDirectory()))); + } + + public void saveConfig() { + try { + configFile.createNewFile(); + + try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(configFile), StandardCharsets.UTF_8))) { + writer.write(gson.toJson(config)); + } + } catch(IOException ignored) {} + } + + @EventHandler + public void postInit(FMLPostInitializationEvent event){ + MinecraftForge.EVENT_BUS.register(new OverlayHud()); + MinecraftForge.EVENT_BUS.register(new RPGHud()); + MinecraftForge.EVENT_BUS.register(new DungeonOverlay()); + MinecraftForge.EVENT_BUS.register(new BossbarHandler()); + MinecraftForge.EVENT_BUS.register(new MapHandler()); + } + + /* DISABLE UNTIL NEW SYSTEM + + @EventHandler + public void loadComplete(FMLLoadCompleteEvent event){ + TrackerFileLoader.loadTrackersFile(); + + if (TrackerFileLoader.loadTrackerStatsFile(configDirectory)){ + TrackerFileLoader.saveTrackerStatsFile(configDirectory); + } + } + + @SubscribeEvent + public void onLeaveServer(FMLNetworkEvent.ClientDisconnectionFromServerEvent event){ + TrackerFileLoader.saveTrackerStatsFile(configDirectory); + } + + */ + + public static boolean hasSkyblockScoreboard() { + Minecraft mc = Minecraft.getMinecraft(); + + if (mc != null && mc.theWorld != null) { + Scoreboard scoreboard = mc.theWorld.getScoreboard(); + ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1); + if (sidebarObjective != null) { + String objectiveName = sidebarObjective.getDisplayName().replaceAll("(?i)\\u00A7.", ""); + for (String skyblock : SKYBLOCK_IN_ALL_LANGUAGES) { + if (objectiveName.startsWith(skyblock)) { + return true; + } + } + } + } + + return false; + } + + @SubscribeEvent + public void onTooltip(ItemTooltipEvent event){ + if (event.itemStack != null && Keyboard.isKeyDown(Keyboard.KEY_BACKSLASH)) { + try { + StringSelection clipboard = new StringSelection(event.itemStack.serializeNBT().toString()); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(clipboard, clipboard); + } catch (Exception ignored) { + } + } + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onStatusBar(ClientChatReceivedEvent event){ + if (Utils.removeColor(event.message.getUnformattedText()).toLowerCase().trim().startsWith("your profile was changed to:")){ + MinecraftForge.EVENT_BUS.post(new ProfileSwitchedEvent()); + } + } + + public static GuiScreen screenToOpen = null; + private static int screenTicks = 0; + + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event){ + if (screenToOpen != null){ + screenTicks++; + if (screenTicks == 5){ + Minecraft.getMinecraft().displayGuiScreen(screenToOpen); + screenTicks = 0; + screenToOpen = null; + } + } + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java b/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java new file mode 100644 index 000000000..8501c9da3 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java @@ -0,0 +1,95 @@ +package com.thatgravyboat.skyblockhud; + +import java.awt.*; + +public class SpecialColour { + + public static String special(int chromaSpeed, int alpha, int rgb) { + return special(chromaSpeed, alpha, (rgb & 0xFF0000) >> 16, (rgb & 0x00FF00) >> 8, (rgb & 0x0000FF)); + } + + private static final int RADIX = 10; + + public static String special(int chromaSpeed, int alpha, int r, int g, int b) { + StringBuilder sb = new StringBuilder(); + sb.append(Integer.toString(chromaSpeed, RADIX)).append(":"); + sb.append(Integer.toString(alpha, RADIX)).append(":"); + sb.append(Integer.toString(r, RADIX)).append(":"); + sb.append(Integer.toString(g, RADIX)).append(":"); + sb.append(Integer.toString(b, RADIX)); + return sb.toString(); + } + + private static int[] decompose(String csv) { + String[] split = csv.split(":"); + + int[] arr = new int[split.length]; + + + for(int i=0; i 0) { + float seconds = getSecondsForSpeed(chr); + hsv[0] += (System.currentTimeMillis()-startTime)/1000f/seconds; + hsv[0] %= 1; + if(hsv[0] < 0) hsv[0] += 1; + } + + return (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF); + } + + public static int rotateHue(int argb, int degrees) { + int a = (argb >> 24) & 0xFF; + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = (argb) & 0xFF; + + float[] hsv = Color.RGBtoHSB(r, g, b, null); + + hsv[0] += degrees/360f; + hsv[0] %= 1; + + return (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF); + } + + +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/Utils.java b/src/main/java/com/thatgravyboat/skyblockhud/Utils.java new file mode 100644 index 000000000..31f6aa83c --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/Utils.java @@ -0,0 +1,247 @@ +package com.thatgravyboat.skyblockhud; + + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.fml.common.Loader; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL14; + +import java.nio.FloatBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; + +public class Utils { + + private static LinkedList guiScales = new LinkedList<>(); + private static ScaledResolution lastScale = new ScaledResolution(Minecraft.getMinecraft()); + //Labymod compatibility + private static FloatBuffer projectionMatrixOld = BufferUtils.createFloatBuffer(16); + private static FloatBuffer modelviewMatrixOld = BufferUtils.createFloatBuffer(16); + + + public static String removeColor(String input) { + return input.replaceAll("(?i)\\u00A7.", ""); + } + + public static String removeWhiteSpaceAndRemoveWord(String input, String replace) {return input.toLowerCase().replace( " ", "").replace(replace, ""); } + + public static boolean isPlayerHoldingRedstone(EntityPlayerSP player) { + if (!SkyblockHud.config.main.requireRedstone) return true; + ArrayList redstoneItems = new ArrayList<>(Arrays.asList(Items.redstone, Items.repeater, Items.comparator, Item.getByNameOrId("minecraft:redstone_torch"))); + if (player.getHeldItem()!=null) + return redstoneItems.contains(player.getHeldItem().getItem()); + return false; + } + + public static boolean inRangeInclusive(int value, int min, int max) { + return value <= max && value >= min; + } + + public static int whatRomanNumeral(String roman){ + switch (roman.toLowerCase()) { + case "i": return 1; + case "ii": return 2; + case "iii": return 3; + case "iv": return 4; + case "v": return 5; + case "vi": return 6; + case "vii": return 7; + case "viii": return 8; + case "ix": return 9; + case "x": return 10; + default: return 0; + } + } + + public static String intToRomanNumeral(int i){ + switch (i) { + case 1: return "I"; + case 2: return "II"; + case 3: return "III"; + case 4: return "IV"; + case 5: return "V"; + case 6: return "VI"; + case 7: return "VII"; + case 8: return "VIII"; + case 9: return "IX"; + case 10: return "X"; + default: return ""; + } + } + + public static boolean overlayShouldRender(RenderGameOverlayEvent.ElementType type, boolean... booleans){ + return overlayShouldRender(false, type, RenderGameOverlayEvent.ElementType.HOTBAR, booleans); + } + + public static boolean overlayShouldRender(boolean hideOnf3, RenderGameOverlayEvent.ElementType type, RenderGameOverlayEvent.ElementType checkType, boolean... booleans){ + Minecraft mc = Minecraft.getMinecraft(); + boolean shouldRender; + if (booleans.length > 1){ + for (boolean aBoolean : booleans) if (!aBoolean) return false; + shouldRender = true; + }else shouldRender = booleans.length != 1 || booleans[0]; + if (hideOnf3) { + if (mc.gameSettings.showDebugInfo || (mc.gameSettings.keyBindPlayerList.isKeyDown() && (!mc.isIntegratedServerRunning() || mc.thePlayer.sendQueue.getPlayerInfoMap().size() > 1))) { + return false; + } + } + return shouldRender && ((type == null && Loader.isModLoaded("labymod")) || type == checkType); + } + + public static void drawStringScaledMaxWidth(String str, FontRenderer fr, float x, float y, boolean shadow, int len, int colour) { + int strLen = fr.getStringWidth(str); + float factor = len/(float)strLen; + factor = Math.min(1, factor); + + drawStringScaled(str, fr, x, y, shadow, colour, factor); + } + + public static void drawStringScaled(String str, FontRenderer fr, float x, float y, boolean shadow, int colour, float factor) { + GlStateManager.scale(factor, factor, 1); + fr.drawString(str, x/factor, y/factor, colour, shadow); + GlStateManager.scale(1/factor, 1/factor, 1); + } + + public static void drawStringCenteredScaled(String str, FontRenderer fr, float x, float y, boolean shadow, int len, int colour) { + int strLen = fr.getStringWidth(str); + float factor = len/(float)strLen; + float fontHeight = 8*factor; + + drawStringScaled(str, fr, x-len/2f, y-fontHeight/2f, shadow, colour, factor); + } + + public static void drawTexturedRect(float x, float y, float width, float height, float uMin, float uMax, float vMin, float vMax, int filter) { + GlStateManager.enableTexture2D(); + GlStateManager.enableBlend(); + GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); + + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, filter); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, filter); + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer + .pos(x, y+height, 0.0D) + .tex(uMin, vMax).endVertex(); + worldrenderer + .pos(x+width, y+height, 0.0D) + .tex(uMax, vMax).endVertex(); + worldrenderer + .pos(x+width, y, 0.0D) + .tex(uMax, vMin).endVertex(); + worldrenderer + .pos(x, y, 0.0D) + .tex(uMin, vMin).endVertex(); + tessellator.draw(); + + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + + GlStateManager.disableBlend(); + } + + public static void drawTexturedRect(float x, float y, float width, float height) { + drawTexturedRect(x, y, width, height, 0, 1, 0 , 1); + } + + public static void drawTexturedRect(float x, float y, float width, float height, int filter) { + drawTexturedRect(x, y, width, height, 0, 1, 0 , 1, filter); + } + + public static void drawTexturedRect(float x, float y, float width, float height, float uMin, float uMax, float vMin, float vMax) { + drawTexturedRect(x, y, width, height, uMin, uMax, vMin , vMax, GL11.GL_LINEAR); + } + + public static void resetGuiScale() { + guiScales.clear(); + } + + public static ScaledResolution peekGuiScale() { + return lastScale; + } + + public static ScaledResolution pushGuiScale(int scale) { + if(guiScales.size() == 0) { + if(Loader.isModLoaded("labymod")) { + GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projectionMatrixOld); + GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelviewMatrixOld); + } + } + + if(scale < 0) { + if(guiScales.size() > 0) { + guiScales.pop(); + } + } else { + if(scale == 0) { + guiScales.push(Minecraft.getMinecraft().gameSettings.guiScale); + } else { + guiScales.push(scale); + } + } + + int newScale = guiScales.size() > 0 ? Math.max(0, Math.min(4, guiScales.peek())) : Minecraft.getMinecraft().gameSettings.guiScale; + if(newScale == 0) newScale = Minecraft.getMinecraft().gameSettings.guiScale; + + int oldScale = Minecraft.getMinecraft().gameSettings.guiScale; + Minecraft.getMinecraft().gameSettings.guiScale = newScale; + ScaledResolution scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); + Minecraft.getMinecraft().gameSettings.guiScale = oldScale; + + if(guiScales.size() > 0) { + GlStateManager.viewport(0, 0, Minecraft.getMinecraft().displayWidth, Minecraft.getMinecraft().displayHeight); + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, + scaledresolution.getScaledWidth_double(), + scaledresolution.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + } else { + if(Loader.isModLoaded("labymod") && projectionMatrixOld.limit() > 0 && modelviewMatrixOld.limit() > 0) { + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GL11.glLoadMatrix(projectionMatrixOld); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GL11.glLoadMatrix(modelviewMatrixOld); + } else { + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, + scaledresolution.getScaledWidth_double(), + scaledresolution.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + } + } + + lastScale = scaledresolution; + return scaledresolution; + } + + public static void drawStringCentered(String str, FontRenderer fr, float x, float y, boolean shadow, int colour) { + int strLen = fr.getStringWidth(str); + + float x2 = x - strLen/2f; + float y2 = y - fr.FONT_HEIGHT/2f; + + GL11.glTranslatef(x2, y2, 0); + fr.drawString(str, 0, 0, colour, shadow); + GL11.glTranslatef(-x2, -y2, 0); + } + +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java b/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java new file mode 100644 index 000000000..58cede86e --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java @@ -0,0 +1,65 @@ +package com.thatgravyboat.skyblockhud.api; + +import com.thatgravyboat.skyblockhud.Utils; +import com.thatgravyboat.skyblockhud.api.events.SidebarLineUpdateEvent; +import com.thatgravyboat.skyblockhud.api.events.SidebarPostEvent; +import com.thatgravyboat.skyblockhud.api.events.SidebarPreGetEvent; +import net.minecraft.client.Minecraft; +import net.minecraft.scoreboard.Score; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.thatgravyboat.skyblockhud.ComponentHandler.SCOREBOARD_CHARACTERS; + +public class LeaderboardGetter { + + private static Map cachedScores = new HashMap<>(); + private static List cachedScoresList = new ArrayList<>(); + + private static int ticks = 0; + + //This is really bad and should use the packet instead. + + @SubscribeEvent + public void onClientUpdate(TickEvent.ClientTickEvent event){ + if (event.phase.equals(TickEvent.Phase.START)) return; + ticks++; + if (ticks % 5 != 0) return; + + Minecraft mc = Minecraft.getMinecraft(); + if (mc.theWorld != null) { + Scoreboard scoreboard = mc.theWorld.getScoreboard(); + ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1); + + if (sidebarObjective != null && !MinecraftForge.EVENT_BUS.post(new SidebarPreGetEvent(scoreboard, sidebarObjective))) { + Collection scoreList = sidebarObjective.getScoreboard().getSortedScores(sidebarObjective); + Map scores = scoreList.stream().collect(Collectors.toMap(Score::getScorePoints, this::getLine)); + + if (!cachedScores.equals(scores)) { + scores.forEach((score, name) -> { + if (cachedScores.get(score) == null || !cachedScores.get(score).equals(name)) { + MinecraftForge.EVENT_BUS.post(new SidebarLineUpdateEvent(name, SCOREBOARD_CHARACTERS.matcher(name).replaceAll("").trim(), score, scores.size(), scoreboard, sidebarObjective)); + } + }); + cachedScores = scores; + cachedScoresList = scores.values().stream().map(name -> SCOREBOARD_CHARACTERS.matcher(name).replaceAll("").trim()).collect(Collectors.toList()); + } + MinecraftForge.EVENT_BUS.post(new SidebarPostEvent(scoreboard, sidebarObjective, cachedScoresList)); + } + } + } + + public String getLine(Score score) { + ScorePlayerTeam scorePlayerTeam = score.getScoreScoreboard().getPlayersTeam(score.getPlayerName()); + return Utils.removeColor(ScorePlayerTeam.formatPlayerName(scorePlayerTeam, score.getPlayerName())); + } + + +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileSwitchedEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileSwitchedEvent.java new file mode 100644 index 000000000..015388aeb --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileSwitchedEvent.java @@ -0,0 +1,7 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class ProfileSwitchedEvent extends Event { + +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java new file mode 100644 index 000000000..2737ee911 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java @@ -0,0 +1,22 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class SidebarLineUpdateEvent extends Event { + + public String rawLine; + public String formattedLine; + public int position; + public Scoreboard scoreboard; + public ScoreObjective objective; + + public SidebarLineUpdateEvent(String rawLin