From 6d8e1e5659f64a4f9ba86d6ab5bbc8e688faf22a Mon Sep 17 00:00:00 2001 From: ThatGravyBoat Date: Tue, 6 Jul 2021 15:10:29 -0230 Subject: Initial Commit --- .gitignore | 23 + build.gradle | 106 ++++ gradle.properties | 1 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54417 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 172 ++++++ gradlew.bat | 84 +++ .../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 + trackers.json | 262 +++++++++ 180 files changed, 10291 insertions(+) create mode 100644 .gitignore create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat 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 create mode 100644 trackers.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..56c1bb7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +# eclipse +bin +*.launch +.settings +.metadata +.classpath +.project + +# idea +out +*.ipr +*.iws +*.iml +.idea + +# gradle +build +.gradle +deps + +# other +eclipse +run diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..5c773c5 --- /dev/null +++ b/build.gradle @@ -0,0 +1,106 @@ +buildscript { + repositories { + jcenter() + maven { + name = "jitpack" + url = "https://jitpack.io/" + } + maven { url = "https://maven.minecraftforge.net/" } + maven { url = "https://repo.spongepowered.org/maven" } + } + dependencies { + classpath "com.github.asbyth:ForgeGradle:6f53277" + classpath 'com.github.LxGaming:MixinGradle:d75e32e' + classpath 'com.github.jengelman.gradle.plugins:shadow:6.1.0' + } +} + +apply plugin: 'java' +apply plugin: 'net.minecraftforge.gradle.forge' +apply plugin: 'org.spongepowered.mixin' +apply plugin: 'com.github.johnrengelman.shadow' + +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + +version = "1.13" +group= "com.thatgravyboat.skyblockhud" +archivesBaseName = "SkyBlockHud" +String mixinClassifier = "dep" + +minecraft { + version = "1.8.9-11.15.1.2318-1.8.9" + runDir = "run" + mappings = "stable_22" +} + +repositories { + jcenter() + maven { url 'https://repo.spongepowered.org/maven/' } + flatDir { + dirs 'deps' + } +} + +dependencies { + compile('org.spongepowered:mixin:0.7.11-SNAPSHOT') + annotationProcessor('org.spongepowered:mixin:0.7.11-SNAPSHOT') +} + +mixin { + add sourceSets.main, "mixins.skyblockhud.refmap.json" +} + +jar { + manifest.attributes( + 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', + 'MixinConfigs': "mixins.skyblockhud.json", + 'FMLCorePluginContainsFMLMod': true, + "ForceLoadAsMod": true + ) +} + +shadowJar { + dependencies { + include(dependency('org.spongepowered:mixin:0.7.11-SNAPSHOT')) + } + exclude 'module-info.class' + exclude 'dummyThing' + exclude 'LICENSE.txt' + + classifier = mixinClassifier +} + +reobf { + shadowJar { + mappingType = 'SEARGE' + } +} + +build.dependsOn(shadowJar) +runClient.dependsOn(build) + +processResources + { + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version + + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' + expand 'version':project.version, 'mcversion':project.minecraft.version + } + + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' + } + + rename '(.+_at.cfg)', 'META-INF/$1' + } +task moveResources { + doLast { + ant.move file: "${buildDir}/resources/main", + todir: "${buildDir}/classes/java" + } +} +moveResources.dependsOn processResources +classes.dependsOn moveResources \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..bf86fb7 --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx2G \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..758de96 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..71a1ffc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega 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 0000000..e5299d5 --- /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 0000000..3c671f0 --- /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 0000000..435c2a5 --- /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 0000000..a31889e --- /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 0000000..8501c9d --- /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 0000000..31f6aa8 --- /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; +