From 99773d6a593c444151503de315f127bea6f74d49 Mon Sep 17 00:00:00 2001 From: Lorenz Date: Thu, 7 Jul 2022 00:31:50 +0200 Subject: init lorenz mod --- .../skyblockhud/ComponentHandler.java | 123 +++++ .../skyblockhud/DevModeConstants.java | 6 + .../com/thatgravyboat/skyblockhud/GuiTextures.java | 33 ++ .../com/thatgravyboat/skyblockhud/SkyblockHud.java | 195 +++++++ .../skyblockhud/api/KillTracking.java | 61 +++ .../skyblockhud/api/LeaderboardGetter.java | 65 +++ .../api/events/LocationChangeEvent.java | 15 + .../skyblockhud/api/events/ProfileJoinedEvent.java | 12 + .../api/events/ProfileSwitchedEvent.java | 12 + .../api/events/SidebarLineUpdateEvent.java | 22 + .../skyblockhud/api/events/SidebarPostEvent.java | 21 + .../skyblockhud/api/events/SidebarPreGetEvent.java | 18 + .../api/events/SkyBlockEntityKilled.java | 18 + .../skyblockhud/api/item/IAbility.java | 7 + .../api/sbentities/EntityTypeHelper.java | 36 ++ .../api/sbentities/EntityTypeRegistry.java | 27 + .../skyblockhud/api/sbentities/SkyBlockEntity.java | 27 + .../skyblockhud/commands/Commands.java | 105 ++++ .../skyblockhud/commands/SimpleCommand.java | 60 ++ .../skyblockhud/commands/SimpleSubCommand.java | 61 +++ .../skyblockhud/config/KeyBindings.java | 8 + .../skyblockhud/config/SBHConfig.java | 436 +++++++++++++++ .../skyblockhud/config/SBHConfigEditor.java | 602 +++++++++++++++++++++ .../skyblockhud/core/BackgroundBlur.java | 249 +++++++++ .../skyblockhud/core/ChromaColour.java | 93 ++++ .../skyblockhud/core/GlScissorStack.java | 86 +++ .../thatgravyboat/skyblockhud/core/GuiElement.java | 12 + .../skyblockhud/core/GuiElementBoolean.java | 118 ++++ .../skyblockhud/core/GuiElementColour.java | 370 +++++++++++++ .../skyblockhud/core/GuiElementTextField.java | 549 +++++++++++++++++++ .../skyblockhud/core/GuiScreenElementWrapper.java | 34 ++ .../skyblockhud/core/config/Config.java | 6 + .../skyblockhud/core/config/KeybindHelper.java | 49 ++ .../skyblockhud/core/config/Position.java | 197 +++++++ .../core/config/annotations/Category.java | 14 + .../core/config/annotations/ConfigAccordionId.java | 12 + .../config/annotations/ConfigEditorAccordion.java | 12 + .../config/annotations/ConfigEditorBoolean.java | 11 + .../config/annotations/ConfigEditorButton.java | 14 + .../config/annotations/ConfigEditorColour.java | 11 + .../annotations/ConfigEditorDraggableList.java | 12 + .../config/annotations/ConfigEditorDropdown.java | 14 + .../config/annotations/ConfigEditorKeybind.java | 12 + .../config/annotations/ConfigEditorSlider.java | 16 + .../core/config/annotations/ConfigEditorStyle.java | 11 + .../core/config/annotations/ConfigEditorText.java | 11 + .../core/config/annotations/ConfigOption.java | 16 + .../core/config/gui/GuiOptionEditor.java | 62 +++ .../core/config/gui/GuiOptionEditorAccordion.java | 80 +++ .../core/config/gui/GuiOptionEditorBoolean.java | 37 ++ .../core/config/gui/GuiOptionEditorButton.java | 60 ++ .../core/config/gui/GuiOptionEditorColour.java | 81 +++ .../config/gui/GuiOptionEditorDraggableList.java | 268 +++++++++ .../core/config/gui/GuiOptionEditorDropdown.java | 145 +++++ .../core/config/gui/GuiOptionEditorKeybind.java | 88 +++ .../core/config/gui/GuiOptionEditorSlider.java | 136 +++++ .../core/config/gui/GuiOptionEditorStyle.java | 42 ++ .../core/config/gui/GuiOptionEditorText.java | 78 +++ .../core/config/gui/GuiPositionEditor.java | 171 ++++++ .../core/config/struct/ConfigProcessor.java | 166 ++++++ .../skyblockhud/core/util/GuiElementSlider.java | 120 ++++ .../skyblockhud/core/util/StringUtils.java | 8 + .../skyblockhud/core/util/lerp/LerpUtils.java | 25 + .../skyblockhud/core/util/lerp/LerpingFloat.java | 68 +++ .../skyblockhud/core/util/lerp/LerpingInteger.java | 76 +++ .../skyblockhud/core/util/render/RenderUtils.java | 155 ++++++ .../core/util/render/TextRenderUtils.java | 155 ++++++ .../skyblockhud/dungeons/Classes.java | 48 ++ .../skyblockhud/dungeons/DungeonHandler.java | 195 +++++++ .../skyblockhud/dungeons/DungeonPlayer.java | 32 ++ .../skyblockhud/handlers/BossbarHandler.java | 36 ++ .../skyblockhud/handlers/CooldownHandler.java | 121 +++++ .../skyblockhud/handlers/CrystalWaypoints.java | 196 +++++++ .../skyblockhud/handlers/CurrencyHandler.java | 86 +++ .../skyblockhud/handlers/HeldItemHandler.java | 31 ++ .../skyblockhud/handlers/MapHandler.java | 206 +++++++ .../skyblockhud/handlers/NpcDialogue.java | 131 +++++ .../skyblockhud/handlers/SlayerHandler.java | 130 +++++ .../skyblockhud/handlers/TimeHandler.java | 28 + .../skyblockhud/handlers/WarpHandler.java | 179 ++++++ .../handlers/mapicons/DwarvenIcons.java | 39 ++ .../skyblockhud/handlers/mapicons/HubIcons.java | 55 ++ .../skyblockhud/location/EndIslandHandler.java | 53 ++ .../skyblockhud/location/FarmHouseHandler.java | 41 ++ .../skyblockhud/location/FarmingIslandHandler.java | 28 + .../skyblockhud/location/IslandHandler.java | 67 +++ .../skyblockhud/location/LocationCategory.java | 54 ++ .../skyblockhud/location/LocationHandler.java | 44 ++ .../skyblockhud/location/Locations.java | 161 ++++++ .../skyblockhud/location/MinesHandler.java | 192 +++++++ .../skyblockhud/location/ParkIslandHandler.java | 29 + .../skyblockhud/mixins/GuiChestAccessor.java | 12 + .../skyblockhud/mixins/MixinEntityArrow.java | 26 + .../skyblockhud/mixins/MixinGuiIngameForge.java | 113 ++++ .../skyblockhud/mixins/MixinItemStack.java | 42 ++ .../mixins/MixinNetHandlerPlayClient.java | 67 +++ .../skyblockhud/mixins/MixinRenderItem.java | 63 +++ .../skyblockhud/overlay/DungeonOverlay.java | 149 +++++ .../skyblockhud/overlay/GenericOverlays.java | 42 ++ .../skyblockhud/overlay/MiningHud.java | 76 +++ .../skyblockhud/overlay/OverlayHud.java | 331 +++++++++++ .../thatgravyboat/skyblockhud/overlay/RPGHud.java | 112 ++++ .../skyblockhud/playerstats/ActionBarParsing.java | 152 ++++++ .../thatgravyboat/skyblockhud/seasons/Season.java | 53 ++ .../skyblockhud/seasons/SeasonDateHandler.java | 73 +++ .../skyblockhud/textures/TextureObject.java | 37 ++ .../skyblockhud/textures/Textures.java | 58 ++ .../skyblockhud/tracker/TrackerFileLoader.java | 136 +++++ .../skyblockhud/tracker/TrackerHandler.java | 111 ++++ .../skyblockhud/tracker/TrackerObject.java | 97 ++++ .../skyblockhud/utils/ComponentBuilder.java | 54 ++ .../skyblockhud/utils/SpecialColour.java | 93 ++++ .../com/thatgravyboat/skyblockhud/utils/Utils.java | 380 +++++++++++++ 113 files changed, 10379 insertions(+) create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/DevModeConstants.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/api/KillTracking.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/events/LocationChangeEvent.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileJoinedEvent.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/api/events/SkyBlockEntityKilled.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/item/IAbility.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeHelper.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeRegistry.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/SkyBlockEntity.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/commands/SimpleSubCommand.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/KeybindHelper.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/ConfigEditorKeybind.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/ConfigEditorStyle.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/GuiOptionEditorKeybind.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/GuiOptionEditorStyle.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/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/CooldownHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/handlers/CrystalWaypoints.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/NpcDialogue.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/WarpHandler.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/location/EndIslandHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/FarmHouseHandler.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/MinesHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/location/ParkIslandHandler.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/GuiChestAccessor.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/MixinItemStack.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinNetHandlerPlayClient.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinRenderItem.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/MiningHud.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/textures/TextureObject.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/textures/Textures.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/java/com/thatgravyboat/skyblockhud/tracker/TrackerObject.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/utils/ComponentBuilder.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/utils/SpecialColour.java create mode 100644 src/main/java/com/thatgravyboat/skyblockhud/utils/Utils.java (limited to 'src/main/java/com') 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..83b2c0973 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java @@ -0,0 +1,123 @@ +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 com.thatgravyboat.skyblockhud.utils.Utils; +import java.util.Comparator; +import java.util.List; +import java.util.regex.Pattern; +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; + +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().isMiningCategory()) { + if (formattedTabListPlayer.toLowerCase().contains("mithril powder:")) { + MinesHandler.parseMithril(formattedTabListPlayer); + } + if (formattedTabListPlayer.toLowerCase().contains("gemstone powder:")) { + MinesHandler.parseGemstone(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(""); + if (!formattedTabListPlayer.contains("N/A")) { + 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/DevModeConstants.java b/src/main/java/com/thatgravyboat/skyblockhud/DevModeConstants.java new file mode 100644 index 000000000..89df438d7 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/DevModeConstants.java @@ -0,0 +1,6 @@ +package com.thatgravyboat.skyblockhud; + +public class DevModeConstants { + + public static boolean mobDeathLogging = false; +} 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..bb49c9c9e --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java @@ -0,0 +1,33 @@ +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 DELETE = new ResourceLocation("skyblockhud:core/delete.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 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..fa55cf3ad --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java @@ -0,0 +1,195 @@ +package com.thatgravyboat.skyblockhud; + +import at.lorenz.mod.bazaar.BazaarApi; +import at.lorenz.mod.HideNotClickableItems; +import at.lorenz.mod.bazaar.BazaarOrderHelper; +import at.lorenz.mod.chat.ChatFilter; +import at.lorenz.mod.chat.ChatManager; +import at.lorenz.mod.dungeon.DungeonChatFilter; +import com.thatgravyboat.skyblockhud.config.SBHConfig; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventHandler; +import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; + +import java.io.File; + +@Mod(modid = SkyblockHud.MODID, version = SkyblockHud.VERSION) +public class SkyblockHud { + + public static final String MODID = "lorenzmod"; + public static final String VERSION = "0.1"; + + 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(); + + public static File configDirectory; + + @EventHandler + public void preInit(FMLPreInitializationEvent event) { + + new BazaarApi(); + + MinecraftForge.EVENT_BUS.register(new BazaarOrderHelper()); + MinecraftForge.EVENT_BUS.register(new ChatManager()); + MinecraftForge.EVENT_BUS.register(new ChatFilter()); + MinecraftForge.EVENT_BUS.register(new DungeonChatFilter()); + MinecraftForge.EVENT_BUS.register(new HideNotClickableItems()); + + +// 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 MinesHandler()); +// MinecraftForge.EVENT_BUS.register(new FarmingIslandHandler()); +// +// MinecraftForge.EVENT_BUS.register(new TrackerHandler()); +// MinecraftForge.EVENT_BUS.register(new KillTracking()); +// +// MinecraftForge.EVENT_BUS.register(new HeldItemHandler()); +// +// ClientRegistry.registerKeyBinding(KeyBindings.map); +// +// MinecraftForge.EVENT_BUS.register(new ComponentHandler()); +// MinecraftForge.EVENT_BUS.register(new ActionBarParsing()); +// MinecraftForge.EVENT_BUS.register(new CrystalWaypoints()); +// MinecraftForge.EVENT_BUS.register(new FarmHouseHandler()); +// MinecraftForge.EVENT_BUS.register(new WarpHandler()); +// MinecraftForge.EVENT_BUS.register(new CooldownHandler()); +// Commands.init(); +// +// ((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new NpcDialogue()); +// ((IReloadableResourceManager) Minecraft.getMinecraft().getResourceManager()).registerReloadListener(new Textures()); +// +// configDirectory = new File(event.getModConfigurationDirectory(), "skyblockhud"); +// try { +// configDirectory.mkdir(); +// } catch (Exception ignored) {} +// +// configFile = new File(configDirectory, "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(); +// } +// +// Textures.setTexture(config.misc.style); +// +// if (WarpHandler.load()) { +// WarpHandler.save(); +// } +// +// Runtime.getRuntime().addShutdownHook(new Thread(this::saveConfig)); +// Runtime.getRuntime().addShutdownHook(new Thread(TrackerFileLoader::saveTrackerStatsFile)); + } + +// 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()); +// MinecraftForge.EVENT_BUS.register(new MiningHud()); +// MinecraftForge.EVENT_BUS.register(new NpcDialogue()); +// } + +// @EventHandler +// public void loadComplete(FMLLoadCompleteEvent event) { +// TrackerFileLoader.loadTrackersFile(); +// +// if (TrackerFileLoader.loadTrackerStatsFile()) { +// TrackerFileLoader.saveTrackerStatsFile(); +// } +// } + +// @SubscribeEvent +// public void onLeaveServer(FMLNetworkEvent.ClientDisconnectionFromServerEvent event) { +// TrackerFileLoader.saveTrackerStatsFile(); +// } + + 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) { +// String message = Utils.removeColor(event.message.getUnformattedText()).toLowerCase().trim(); +// +// if (message.startsWith("your profile was changed to:")) { +// String stripped = message.replace("your profile was changed to:", "").replace("(co-op)", "").trim(); +// MinecraftForge.EVENT_BUS.post(new ProfileSwitchedEvent(stripped)); +// } +// if (message.startsWith("you are playing on profile:")) { +// String stripped = message.replace("you are playing on profile:", "").replace("(co-op)", "").trim(); +// MinecraftForge.EVENT_BUS.post(new ProfileJoinedEvent(stripped)); +// } +// } + + 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/api/KillTracking.java b/src/main/java/com/thatgravyboat/skyblockhud/api/KillTracking.java new file mode 100644 index 000000000..bc98672d8 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/KillTracking.java @@ -0,0 +1,61 @@ +package com.thatgravyboat.skyblockhud.api; + +import com.thatgravyboat.skyblockhud.DevModeConstants; +import com.thatgravyboat.skyblockhud.api.events.SkyBlockEntityKilled; +import com.thatgravyboat.skyblockhud.api.sbentities.EntityTypeRegistry; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import net.minecraft.client.Minecraft; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.LivingDeathEvent; +import net.minecraftforge.event.entity.player.AttackEntityEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class KillTracking { + + public static final Set attackedEntities = new HashSet<>(); + + @SubscribeEvent + public void onAttack(AttackEntityEvent event) { + if (event.target != null) { + attackedEntities.add(event.target.getUniqueID()); + } + } + + @SubscribeEvent + public void onDeath(LivingDeathEvent event) { + if (DevModeConstants.mobDeathLogging) { + //Used for testing + System.out.println("----------------------------------------------------------------------------------------------------------------"); + System.out.println("Name : " + event.entity.getName()); + System.out.println("UUID : " + event.entity.getUniqueID()); + NBTTagCompound compound = new NBTTagCompound(); + event.entity.writeToNBT(compound); + System.out.println("Tag : " + compound); + System.out.println("Damage : " + getDamageSourceString(event.source)); + System.out.println("SBH Entity ID: " + EntityTypeRegistry.getEntityId(event.entity)); + System.out.println("----------------------------------------------------------------------------------------------------------------"); + } + if (attackedEntities.contains(event.entity.getUniqueID())) { + if (EntityTypeRegistry.getEntityId(event.entity) != null) { + MinecraftForge.EVENT_BUS.post(new SkyBlockEntityKilled(EntityTypeRegistry.getEntityId(event.entity), event.entity)); + } + attackedEntities.remove(event.entity.getUniqueID()); + } + } + + public static String getDamageSourceString(DamageSource source) { + return ("{ " + source.getDamageType() + ", " + source.isDamageAbsolute() + ", " + source.isDifficultyScaled() + ", " + source.isFireDamage() + ", " + source.isProjectile() + ", " + source.isUnblockable() + ", " + source.isExplosion() + ", " + source.isMagicDamage() + ", " + source.isCreativePlayer() + ", " + source.getSourceOfDamage() + " }"); + } + + @SubscribeEvent + public void onWorldChange(EntityJoinWorldEvent event) { + if (event.entity == Minecraft.getMinecraft().thePlayer) { + attackedEntities.clear(); + } + } +} 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..3c5936057 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java @@ -0,0 +1,65 @@ +package com.thatgravyboat.skyblockhud.api; + +import static com.thatgravyboat.skyblockhud.ComponentHandler.SCOREBOARD_CHARACTERS; + +import com.thatgravyboat.skyblockhud.SkyblockHud; +import com.thatgravyboat.skyblockhud.api.events.SidebarLineUpdateEvent; +import com.thatgravyboat.skyblockhud.api.events.SidebarPostEvent; +import com.thatgravyboat.skyblockhud.api.events.SidebarPreGetEvent; +import com.thatgravyboat.skyblockhud.utils.Utils; +import java.util.*; +import java.util.stream.Collectors; +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; + +public class LeaderboardGetter { + + private static Map cachedScores = new HashMap<>(); + private static List cachedScoresList = new ArrayList<>(); + + private static int ticks = 0; + + public static List getCachedScores() { + return cachedScoresList; + } + + @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 && SkyblockHud.hasSkyblockScoreboard()) { + 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, (s1, s2) -> s1)); + + 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/LocationChangeEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/LocationChangeEvent.java new file mode 100644 index 000000000..384e76d2e --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/LocationChangeEvent.java @@ -0,0 +1,15 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import com.thatgravyboat.skyblockhud.location.Locations; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class LocationChangeEvent extends Event { + + public Locations oldLocation; + public Locations newLocation; + + public LocationChangeEvent(Locations oldLocation, Locations newLocation) { + this.oldLocation = oldLocation; + this.newLocation = newLocation; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileJoinedEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileJoinedEvent.java new file mode 100644 index 000000000..f1d4d38b8 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileJoinedEvent.java @@ -0,0 +1,12 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class ProfileJoinedEvent extends Event { + + public String profile; + + public ProfileJoinedEvent(String profile) { + this.profile = profile; + } +} 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..408ac8ade --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/ProfileSwitchedEvent.java @@ -0,0 +1,12 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class ProfileSwitchedEvent extends Event { + + public String profile; + + public ProfileSwitchedEvent(String profile) { + this.profile = profile; + } +} 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 rawLine, String formattedLine, int score, int max, Scoreboard scoreboard, ScoreObjective objective) { + this.rawLine = rawLine; + this.formattedLine = formattedLine; + this.position = max - score; + this.scoreboard = scoreboard; + this.objective = objective; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java new file mode 100644 index 000000000..34d27e6bc --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java @@ -0,0 +1,21 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import java.util.List; +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class SidebarPostEvent extends Event { + + public Scoreboard scoreboard; + public ScoreObjective objective; + public List scores; + public String[] arrayScores; + + public SidebarPostEvent(Scoreboard scoreboard, ScoreObjective objective, List scores) { + this.scoreboard = scoreboard; + this.objective = objective; + this.scores = scores; + this.arrayScores = scores.toArray(new String[] {}); + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java new file mode 100644 index 000000000..0db1895c6 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java @@ -0,0 +1,18 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import net.minecraft.scoreboard.ScoreObjective; +import net.minecraft.scoreboard.Scoreboard; +import net.minecraftforge.fml.common.eventhandler.Cancelable; +import net.minecraftforge.fml.common.eventhandler.Event; + +@Cancelable +public class SidebarPreGetEvent extends Event { + + public Scoreboard scoreboard; + public ScoreObjective objective; + + public SidebarPreGetEvent(Scoreboard scoreboard, ScoreObjective objective) { + this.scoreboard = scoreboard; + this.objective = objective; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SkyBlockEntityKilled.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SkyBlockEntityKilled.java new file mode 100644 index 000000000..61f8d824f --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SkyBlockEntityKilled.java @@ -0,0 +1,18 @@ +package com.thatgravyboat.skyblockhud.api.events; + +import javax.annotation.Nullable; +import net.minecraft.entity.Entity; +import net.minecraftforge.fml.common.eventhandler.Event; + +public class SkyBlockEntityKilled extends Event { + + public String id; + + @Nullable + public Entity entity; + + public SkyBlockEntityKilled(String id, @Nullable Entity entity) { + this.id = id; + this.entity = entity; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/item/IAbility.java b/src/main/java/com/thatgravyboat/skyblockhud/api/item/IAbility.java new file mode 100644 index 000000000..4f330d9a3 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/item/IAbility.java @@ -0,0 +1,7 @@ +package com.thatgravyboat.skyblockhud.api.item; + +public interface IAbility { + String getAbility(); + + int getAbilityTime(); +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeHelper.java b/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeHelper.java new file mode 100644 index 000000000..bb14e5d21 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeHelper.java @@ -0,0 +1,36 @@ +package com.thatgravyboat.skyblockhud.api.sbentities; + +import com.thatgravyboat.skyblockhud.location.LocationHandler; +import com.thatgravyboat.skyblockhud.location.Locations; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; + +public class EntityTypeHelper { + + public static boolean isZealot(Entity entity) { + if (entity instanceof EntityEnderman) { + EntityEnderman enderman = ((EntityEnderman) entity); + double maxHealthBase = enderman.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getBaseValue(); + if (maxHealthBase == 13000 || (maxHealthBase == 2000d && enderman.getHeldBlockState().getBlock().equals(Blocks.end_portal_frame))) { + return LocationHandler.getCurrentLocation().equals(Locations.DRAGONSNEST); + } + } + return false; + } + + public static boolean isCrypt(Entity entity) { + if (entity instanceof EntityZombie) { + EntityZombie zombie = ((EntityZombie) entity); + double maxHealthBase = zombie.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getBaseValue(); + if (maxHealthBase != 2000d) return false; + if (zombie.getEquipmentInSlot(0) == null || !zombie.getEquipmentInSlot(0).getItem().equals(Items.iron_sword)) return false; + if (zombie.getEquipmentInSlot(1) == null || !zombie.getEquipmentInSlot(1).getItem().equals(Items.chainmail_boots)) return false; + if (zombie.getEquipmentInSlot(2) == null || !zombie.getEquipmentInSlot(2).getItem().equals(Items.chainmail_leggings)) return false; + return zombie.getEquipmentInSlot(3) != null && zombie.getEquipmentInSlot(3).getItem().equals(Items.chainmail_chestplate); + } + return false; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeRegistry.java b/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeRegistry.java new file mode 100644 index 000000000..6ff88fafb --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/EntityTypeRegistry.java @@ -0,0 +1,27 @@ +package com.thatgravyboat.skyblockhud.api.sbentities; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; +import java.util.List; +import java.util.Map; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntityZombie; + +public class EntityTypeRegistry { + + private static final Map, List> entities = Maps.newHashMap(); + + static { + entities.put(EntityEnderman.class, ImmutableList.of(SkyBlockEntity.of("ZEALOT", EntityTypeHelper::isZealot))); + entities.put(EntityZombie.class, ImmutableList.of(SkyBlockEntity.of("CRYPT_GHOUL", EntityTypeHelper::isCrypt))); + } + + public static String getEntityId(Entity entity) { + if (!entities.containsKey(entity.getClass())) return null; + for (SkyBlockEntity skyBlockEntity : entities.get(entity.getClass())) { + if (skyBlockEntity.isEntity(entity)) return skyBlockEntity.getName(); + } + return null; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/SkyBlockEntity.java b/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/SkyBlockEntity.java new file mode 100644 index 000000000..bcd1196f5 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/sbentities/SkyBlockEntity.java @@ -0,0 +1,27 @@ +package com.thatgravyboat.skyblockhud.api.sbentities; + +import java.util.function.Predicate; +import net.minecraft.entity.Entity; + +public class SkyBlockEntity { + + private final String name; + private final Predicate predicate; + + public static SkyBlockEntity of(String name, Predicate predicate) { + return new SkyBlockEntity(name, predicate); + } + + private SkyBlockEntity(String name, Predicate predicate) { + this.name = name; + this.predicate = predicate; + } + + public String getName() { + return name; + } + + public boolean isEntity(Entity entity) { + return predicate.test(entity); + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java b/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java new file mode 100644 index 000000000..e8ac1d389 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java @@ -0,0 +1,105 @@ +package com.thatgravyboat.skyblockhud.commands; + +import com.google.common.collect.ImmutableSet; +import com.thatgravyboat.skyblockhud.DevModeConstants; +import com.thatgravyboat.skyblockhud.SkyblockHud; +import com.thatgravyboat.skyblockhud.api.LeaderboardGetter; +import com.thatgravyboat.skyblockhud.config.SBHConfigEditor; +import com.thatgravyboat.skyblockhud.core.GuiScreenElementWrapper; +import com.thatgravyboat.skyblockhud.handlers.CrystalWaypoints; +import com.thatgravyboat.skyblockhud.handlers.MapHandler; +import com.thatgravyboat.skyblockhud.location.LocationHandler; +import com.thatgravyboat.skyblockhud.playerstats.ActionBarParsing; +import java.awt.*; +import java.awt.datatransfer.StringSelection; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.Entity; +import net.minecraft.entity.boss.BossStatus; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.client.ClientCommandHandler; +import org.apache.commons.lang3.StringUtils; + +public class Commands { + + private static boolean devMode = false; + + private static final SimpleCommand.ProcessCommandRunnable settingsRunnable = new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + if (args.length > 0) { + SkyblockHud.screenToOpen = new GuiScreenElementWrapper(new SBHConfigEditor(SkyblockHud.config, StringUtils.join(args, " "))); + } else { + SkyblockHud.screenToOpen = new GuiScreenElementWrapper(new SBHConfigEditor(SkyblockHud.config)); + } + } + }; + + private static final SimpleSubCommand devCommand = new SimpleSubCommand("sbhdev", ImmutableSet.of("copyNpcSkin", "copyBossBar", "copyScoreboard", "copyActionBar", "mobDeathLogging")) { + @Override + void processSubCommand(ICommandSender sender, String subCommand, String[] args) { + StringSelection clipboard = null; + switch (subCommand) { + case "copyBossBar": + clipboard = new StringSelection(BossStatus.bossName); + break; + case "copyScoreboard": + StringBuilder builder = new StringBuilder(); + LeaderboardGetter.getCachedScores().forEach(s -> builder.append(s).append("\n")); + clipboard = new StringSelection(builder.toString()); + break; + case "copyActionBar": + clipboard = new StringSelection(ActionBarParsing.lastLowActionBar); + break; + case "copySkin": + Entity entity = Minecraft.getMinecraft().objectMouseOver.entityHit; + if (entity instanceof AbstractClientPlayer) { + clipboard = new StringSelection("http://textures.minecraft.net/texture/" + ((AbstractClientPlayer) entity).getLocationSkin().getResourcePath().replace("skins/", "")); + } else { + sendSBHMessage(sender, "Not a player!"); + } + break; + case "mobDeathLogging": + DevModeConstants.mobDeathLogging = !DevModeConstants.mobDeathLogging; + sendSBHMessage(sender, "Mob Death Logging " + (DevModeConstants.mobDeathLogging ? "Enabled!" : "Disabled!")); + } + if (clipboard != null) { + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(clipboard, clipboard); + sendSBHMessage(sender, "Info copied to clipboard!"); + } + } + + @Override + void processNoSubCommand(ICommandSender sender) { + devMode = !devMode; + sender.addChatMessage(new ChatComponentText("Dev Mode " + (devMode ? "Enabled!" : "Disabled!"))); + } + }; + + private static final SimpleCommand settingsCommand = new SimpleCommand("sbh", settingsRunnable); + private static final SimpleCommand settingsCommand2 = new SimpleCommand("sbhsettings", settingsRunnable); + private static final SimpleCommand settingsCommand3 = new SimpleCommand("sbhud", settingsRunnable); + + private static final SimpleCommand mapCommand = new SimpleCommand( + "sbhmap", + new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + if (LocationHandler.getCurrentLocation().getCategory().getMap() != null && SkyblockHud.hasSkyblockScoreboard()) SkyblockHud.screenToOpen = new MapHandler.MapScreen(); + } + } + ); + + public static void init() { + ClientCommandHandler.instance.registerCommand(settingsCommand); + ClientCommandHandler.instance.registerCommand(settingsCommand2); + ClientCommandHandler.instance.registerCommand(settingsCommand3); + ClientCommandHandler.instance.registerCommand(mapCommand); + ClientCommandHandler.instance.registerCommand(devCommand); + ClientCommandHandler.instance.registerCommand(new CrystalWaypoints.WaypointCommand()); + } + + private static void sendSBHMessage(ICommandSender sender, String message) { + sender.addChatMessage(new ChatComponentText("[" + EnumChatFormatting.RED + EnumChatFormatting.BOLD + "SkyBlockHud" + EnumChatFormatting.RESET + "] : " + EnumChatFormatting.GRAY + message)); + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java b/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java new file mode 100644 index 000000000..57ef3168a --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java @@ -0,0 +1,60 @@ +package com.thatgravyboat.skyblockhud.commands; + +import java.util.List; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.BlockPos; + +/** + @author Moulberry + **/ +public class SimpleCommand extends CommandBase { + + private String commandName; + private ProcessCommandRunnable runnable; + private TabCompleteRunnable tabRunnable; + + public SimpleCommand(String commandName, ProcessCommandRunnable runnable) { + this.commandName = commandName; + this.runnable = runnable; + } + + public SimpleCommand(String commandName, ProcessCommandRunnable runnable, TabCompleteRunnable tabRunnable) { + this.commandName = commandName; + this.runnable = runnable; + this.tabRunnable = tabRunnable; + } + + public abstract static class ProcessCommandRunnable { + + public abstract void processCommand(ICommandSender sender, String[] args); + } + + public abstract static class TabCompleteRunnable { + + public abstract List tabComplete(ICommandSender sender, String[] args, BlockPos pos); + } + + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } + + public String getCommandName() { + return commandName; + } + + public String getCommandUsage(ICommandSender sender) { + return "/" + commandName; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + runnable.processCommand(sender, args); + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { + if (tabRunnable != null) return tabRunnable.tabComplete(sender, args, pos); + return null; + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleSubCommand.java b/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleSubCommand.java new file mode 100644 index 000000000..6bb62acff --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleSubCommand.java @@ -0,0 +1,61 @@ +package com.thatgravyboat.skyblockhud.commands; + +import java.util.List; +import java.util.Set; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.BlockPos; +import org.apache.commons.lang3.ArrayUtils; + +public abstract class SimpleSubCommand extends CommandBase { + + private final String commandName; + private final Set subCommands; + + public SimpleSubCommand(String commandName, Set subCommands) { + this.commandName = commandName; + this.subCommands = subCommands; + } + + @Override + public String getCommandName() { + return commandName; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/" + commandName; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + if (args.length == 0) { + processNoSubCommand(sender); + return; + } + if (subCommands.contains(arg