From 3efb4325e2fea927dff41ab5cf215da8e9379634 Mon Sep 17 00:00:00 2001 From: Nealkitt Date: Fri, 11 Oct 2024 12:31:12 -0700 Subject: [PATCH 1/4] Initial commit, dungeon stuff i think, thank you for merging dependency to make my life easier --- .../features/dungeon/DungeonConfig.java | 6 +++ .../features/dungeon/DungeonBossAPI.kt | 2 +- .../features/dungeon/floor7/TerminalInfo.kt | 48 +++++++++++++++++ .../dungeon/floor7/TerminalWaypoints.kt | 54 +++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java index ec2bc0c4b0f9..d043d4a75f85 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java @@ -138,6 +138,12 @@ public class DungeonConfig { @FeatureToggle public boolean shadowAssassinJumpNotifier = false; + @Expose + @ConfigOption(name = "Terminal Waypoints", desc = "Displays Waypoints in the F7/M7 Goldor Phase") + @ConfigEditorBoolean + @FeatureToggle + public boolean terminalWaypoints = false; + @Expose @ConfigOption(name = "Dungeon Races Guide", desc = "") @Accordion diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt index 5a7d0ff313a8..84a4b26e710b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt @@ -86,7 +86,7 @@ object DungeonBossAPI { * REGEX-TEST: §bmartimavocado§r§a completed a device! (§r§c3§r§a/8) * REGEX-TEST: §bmartimavocado§r§a activated a terminal! (§r§c4§r§a/7) */ - private val goldorTerminalPattern by patternGroup.pattern( + val goldorTerminalPattern by patternGroup.pattern( "f7.goldor.terminalcomplete", "§.(?\\w+)§r§a (?:activated|completed) a (?lever|terminal|device)! \\(§r§c(?\\d)§r§a/(?\\d)\\)", ) diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt new file mode 100644 index 000000000000..a364465191f2 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt @@ -0,0 +1,48 @@ +package at.hannibal2.skyhanni.features.dungeon.floor7 + +import at.hannibal2.skyhanni.features.dungeon.DungeonBossAPI +import at.hannibal2.skyhanni.utils.LorenzVec + +enum class TerminalInfo(val location: LorenzVec, val phase: DungeonBossAPI.DungeonBossPhase, val text: String, var highlight: Boolean = true) { + P1_TERMINAL1(LorenzVec(111, 113, 73), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), + P1_TERMINAL2(LorenzVec(111, 119, 79), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), + P1_TERMINAL3(LorenzVec(89, 112, 92), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), + P1_TERMINAL4(LorenzVec(89, 122, 101), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), + P1_LEVER1(LorenzVec(106, 124, 113), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Lever"), + P1_LEVER2(LorenzVec(94, 124, 113), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Lever"), + P1_DEVICE(LorenzVec(110, 119, 93), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Device"), + + P2_TERMINAL1(LorenzVec(68, 109, 121), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL2(LorenzVec(59, 120, 122), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL3(LorenzVec(47, 109, 121), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL4(LorenzVec(40, 124, 122), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL5(LorenzVec(39, 108, 143), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), + P2_LEVER1(LorenzVec(23, 132, 138), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Lever"), + P2_LEVER2(LorenzVec(27, 124, 127), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Lever"), + P2_DEVICE(LorenzVec(60, 131, 142), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Device"), + + P3_TERMINAL1(LorenzVec(-3, 109, 112), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), + P3_TERMINAL2(LorenzVec(-3, 119, 93), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), + P3_TERMINAL3(LorenzVec(19, 123, 93), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), + P3_TERMINAL4(LorenzVec(-3, 109, 77), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), + P3_LEVER1(LorenzVec(14, 122, 55), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Lever"), + P3_LEVER2(LorenzVec(2, 122, 55), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Lever"), + P3_DEVICE(LorenzVec(-2, 119, 77), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Device"), + + P4_TERMINAL1(LorenzVec(41, 109, 29), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), + P4_TERMINAL2(LorenzVec(44, 121, 29), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), + P4_TERMINAL3(LorenzVec(67, 109, 29), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), + P4_TERMINAL4(LorenzVec(72, 115, 48), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), + P4_LEVER1(LorenzVec(84, 121, 34), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Lever"), + P4_LEVER2(LorenzVec(86, 128, 46), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Lever"), + P4_DEVICE(LorenzVec(63, 126, 35), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Device"), + ; + + companion object { + fun resetTerminals() = entries.forEach { it.highlight = true } + + fun getClosestTerminal(input: LorenzVec): TerminalInfo? { + return entries.filter { it.highlight }.minByOrNull { it.location.distance(input) } + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt new file mode 100644 index 000000000000..c04733e25f97 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt @@ -0,0 +1,54 @@ +package at.hannibal2.skyhanni.features.dungeon.floor7 + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.DungeonStartEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.features.dungeon.DungeonAPI +import at.hannibal2.skyhanni.features.dungeon.DungeonAPI.dungeonFloor +import at.hannibal2.skyhanni.features.dungeon.DungeonBossAPI +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.EntityUtils +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText +import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled +import at.hannibal2.skyhanni.utils.toLorenzVec +import net.minecraft.entity.player.EntityPlayer +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +@SkyHanniModule +object TerminalWaypoints { + + private val config get() = SkyHanniMod.feature.dungeon + + @SubscribeEvent + fun onWorld(event: LorenzRenderWorldEvent) { + if (!isEnabled()) return + + TerminalInfo.entries.filter { it.highlight && DungeonBossAPI.bossPhase == it.phase }.forEach { + event.drawWaypointFilled(it.location, LorenzColor.GREEN.toColor(), seeThroughBlocks = true) + event.drawDynamicText(it.location, it.text, 1.0) + } + } + + @SubscribeEvent + fun dungeonStart(event: DungeonStartEvent) { + TerminalInfo.resetTerminals() + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + DungeonBossAPI.goldorTerminalPattern.matchMatcher(event.message) { + val playerName = group("playerName") + val playerEntity = + EntityUtils.getAllEntities().filter { it is EntityPlayer }.firstOrNull { it.name == playerName } + ?: return + val terminal = TerminalInfo.getClosestTerminal(playerEntity.position.toLorenzVec()) + terminal?.highlight = false + } + } + + private fun isEnabled() = + DungeonAPI.inBossRoom && (dungeonFloor == "F7" || dungeonFloor == "M7") && config.terminalWaypoints +} From f87ec5390319b38afc6f073373d45bbb2be1ed59 Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Fri, 11 Oct 2024 23:19:30 +0200 Subject: [PATCH 2/4] some formatting changes (#26) * Fix: Failed tests (#2721) * Fix: Verify Changelog not adding comment describing problem (Maybe) (#2723) * some formatting changes and optimizations --------- Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Co-authored-by: Empa --- .github/workflows/generate-constants.yaml | 2 +- .github/workflows/pr-check.yml | 2 +- .../ChangelogVerification.kt | 1 + .../skyhanni/config/commands/Commands.kt | 5 ++ .../features/dungeon/DungeonConfig.java | 2 +- .../features/dungeon/DungeonBossAPI.kt | 3 + .../features/dungeon/floor7/TerminalInfo.kt | 72 ++++++++++--------- .../dungeon/floor7/TerminalWaypoints.kt | 30 ++++---- 8 files changed, 65 insertions(+), 52 deletions(-) diff --git a/.github/workflows/generate-constants.yaml b/.github/workflows/generate-constants.yaml index a125550331a3..f6fab6f243ac 100644 --- a/.github/workflows/generate-constants.yaml +++ b/.github/workflows/generate-constants.yaml @@ -45,7 +45,7 @@ jobs: with: repository: ${{ env.data_repo }} branch: main - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 name: Upload generated repo regexes with: name: Repo Regexes diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index cabb09c1d029..3702088f8387 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -46,7 +46,7 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const fs = require('fs'); - const test = fs.readFileSync('build/changelog_errors.txt', 'utf8'); + const test = fs.readFileSync('versions/1.8.9/build/changelog_errors.txt', 'utf8'); const commentBody = `${test}` github.rest.issues.createComment({ diff --git a/buildSrc/src/main/kotlin/skyhannibuildsystem/ChangelogVerification.kt b/buildSrc/src/main/kotlin/skyhannibuildsystem/ChangelogVerification.kt index 422a62cb1d9b..8ac54d6fc0b1 100644 --- a/buildSrc/src/main/kotlin/skyhannibuildsystem/ChangelogVerification.kt +++ b/buildSrc/src/main/kotlin/skyhannibuildsystem/ChangelogVerification.kt @@ -45,6 +45,7 @@ abstract class ChangelogVerification : DefaultTask() { // Export errors so that they can be listed in the PR comment val errorFile = File(outputDirectory.get().asFile, "changelog_errors.txt") + println("saved error file to: ${errorFile.path}") errorFile.appendText("I have detected some issues with your pull request:\n\n") diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index bd94a16587f1..c5a28679e394 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -25,6 +25,7 @@ import at.hannibal2.skyhanni.features.commands.PartyChatCommands import at.hannibal2.skyhanni.features.commands.PartyCommands import at.hannibal2.skyhanni.features.commands.WikiManager import at.hannibal2.skyhanni.features.dungeon.CroesusChestTracker +import at.hannibal2.skyhanni.features.dungeon.floor7.TerminalInfo import at.hannibal2.skyhanni.features.event.diana.AllBurrowsList import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper import at.hannibal2.skyhanni.features.event.diana.DianaProfitTracker @@ -501,6 +502,10 @@ object Commands { "shdebugscoreboard", "Monitors the scoreboard changes: Prints the raw scoreboard lines in the console after each update, with time since last update.", ) { ScoreboardData.toggleMonitor() } + registerCommand( + "shresetterminal", + "Resets terminal highlights in F7.", + ) { TerminalInfo.resetTerminals() } } @Suppress("LongMethod") diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java index d043d4a75f85..0be6c1e853f0 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/dungeon/DungeonConfig.java @@ -139,7 +139,7 @@ public class DungeonConfig { public boolean shadowAssassinJumpNotifier = false; @Expose - @ConfigOption(name = "Terminal Waypoints", desc = "Displays Waypoints in the F7/M7 Goldor Phase") + @ConfigOption(name = "Terminal Waypoints", desc = "Displays Waypoints in the F7/M7 Goldor Phase.") @ConfigEditorBoolean @FeatureToggle public boolean terminalWaypoints = false; diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt index 84a4b26e710b..d30553a28581 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonBossAPI.kt @@ -29,6 +29,9 @@ object DungeonBossAPI { F7_GOLDOR_5, F7_NECRON, M7_WITHER_KING, + ; + + fun isCurrent(): Boolean = bossPhase == this } private val patternGroup = RepoPattern.group("dungeon.boss.message") diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt index a364465191f2..3c8a2e6d3a3c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt @@ -3,46 +3,50 @@ package at.hannibal2.skyhanni.features.dungeon.floor7 import at.hannibal2.skyhanni.features.dungeon.DungeonBossAPI import at.hannibal2.skyhanni.utils.LorenzVec -enum class TerminalInfo(val location: LorenzVec, val phase: DungeonBossAPI.DungeonBossPhase, val text: String, var highlight: Boolean = true) { - P1_TERMINAL1(LorenzVec(111, 113, 73), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), - P1_TERMINAL2(LorenzVec(111, 119, 79), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), - P1_TERMINAL3(LorenzVec(89, 112, 92), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), - P1_TERMINAL4(LorenzVec(89, 122, 101), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Terminal"), - P1_LEVER1(LorenzVec(106, 124, 113), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Lever"), - P1_LEVER2(LorenzVec(94, 124, 113), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Lever"), - P1_DEVICE(LorenzVec(110, 119, 93), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_1, "Device"), - - P2_TERMINAL1(LorenzVec(68, 109, 121), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), - P2_TERMINAL2(LorenzVec(59, 120, 122), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), - P2_TERMINAL3(LorenzVec(47, 109, 121), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), - P2_TERMINAL4(LorenzVec(40, 124, 122), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), - P2_TERMINAL5(LorenzVec(39, 108, 143), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Terminal"), - P2_LEVER1(LorenzVec(23, 132, 138), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Lever"), - P2_LEVER2(LorenzVec(27, 124, 127), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Lever"), - P2_DEVICE(LorenzVec(60, 131, 142), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_2, "Device"), - - P3_TERMINAL1(LorenzVec(-3, 109, 112), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), - P3_TERMINAL2(LorenzVec(-3, 119, 93), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), - P3_TERMINAL3(LorenzVec(19, 123, 93), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), - P3_TERMINAL4(LorenzVec(-3, 109, 77), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Terminal"), - P3_LEVER1(LorenzVec(14, 122, 55), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Lever"), - P3_LEVER2(LorenzVec(2, 122, 55), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Lever"), - P3_DEVICE(LorenzVec(-2, 119, 77), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_3, "Device"), - - P4_TERMINAL1(LorenzVec(41, 109, 29), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), - P4_TERMINAL2(LorenzVec(44, 121, 29), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), - P4_TERMINAL3(LorenzVec(67, 109, 29), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), - P4_TERMINAL4(LorenzVec(72, 115, 48), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Terminal"), - P4_LEVER1(LorenzVec(84, 121, 34), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Lever"), - P4_LEVER2(LorenzVec(86, 128, 46), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Lever"), - P4_DEVICE(LorenzVec(63, 126, 35), DungeonBossAPI.DungeonBossPhase.F7_GOLDOR_4, "Device"), +private typealias BossPhase = DungeonBossAPI.DungeonBossPhase + +enum class TerminalInfo(val location: LorenzVec, val phase: BossPhase, val text: String) { + P1_TERMINAL_1(LorenzVec(111, 113, 73), BossPhase.F7_GOLDOR_1, "Terminal"), + P1_TERMINAL_2(LorenzVec(111, 119, 79), BossPhase.F7_GOLDOR_1, "Terminal"), + P1_TERMINAL_3(LorenzVec(89, 112, 92), BossPhase.F7_GOLDOR_1, "Terminal"), + P1_TERMINAL_4(LorenzVec(89, 122, 101), BossPhase.F7_GOLDOR_1, "Terminal"), + P1_LEVER_1(LorenzVec(106, 124, 113), BossPhase.F7_GOLDOR_1, "Lever"), + P1_LEVER_2(LorenzVec(94, 124, 113), BossPhase.F7_GOLDOR_1, "Lever"), + P1_DEVICE(LorenzVec(110, 119, 93), BossPhase.F7_GOLDOR_1, "Device"), + + P2_TERMINAL_1(LorenzVec(68, 109, 121), BossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL_2(LorenzVec(59, 120, 122), BossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL_3(LorenzVec(47, 109, 121), BossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL_4(LorenzVec(40, 124, 122), BossPhase.F7_GOLDOR_2, "Terminal"), + P2_TERMINAL_5(LorenzVec(39, 108, 143), BossPhase.F7_GOLDOR_2, "Terminal"), + P2_LEVER_1(LorenzVec(23, 132, 138), BossPhase.F7_GOLDOR_2, "Lever"), + P2_LEVER_2(LorenzVec(27, 124, 127), BossPhase.F7_GOLDOR_2, "Lever"), + P2_DEVICE(LorenzVec(60, 131, 142), BossPhase.F7_GOLDOR_2, "Device"), + + P3_TERMINAL_1(LorenzVec(-3, 109, 112), BossPhase.F7_GOLDOR_3, "Terminal"), + P3_TERMINAL_2(LorenzVec(-3, 119, 93), BossPhase.F7_GOLDOR_3, "Terminal"), + P3_TERMINAL_3(LorenzVec(19, 123, 93), BossPhase.F7_GOLDOR_3, "Terminal"), + P3_TERMINAL_4(LorenzVec(-3, 109, 77), BossPhase.F7_GOLDOR_3, "Terminal"), + P3_LEVER_1(LorenzVec(14, 122, 55), BossPhase.F7_GOLDOR_3, "Lever"), + P3_LEVER_2(LorenzVec(2, 122, 55), BossPhase.F7_GOLDOR_3, "Lever"), + P3_DEVICE(LorenzVec(-2, 119, 77), BossPhase.F7_GOLDOR_3, "Device"), + + P4_TERMINAL_1(LorenzVec(41, 109, 29), BossPhase.F7_GOLDOR_4, "Terminal"), + P4_TERMINAL_2(LorenzVec(44, 121, 29), BossPhase.F7_GOLDOR_4, "Terminal"), + P4_TERMINAL_3(LorenzVec(67, 109, 29), BossPhase.F7_GOLDOR_4, "Terminal"), + P4_TERMINAL_4(LorenzVec(72, 115, 48), BossPhase.F7_GOLDOR_4, "Terminal"), + P4_LEVER_1(LorenzVec(84, 121, 34), BossPhase.F7_GOLDOR_4, "Lever"), + P4_LEVER_2(LorenzVec(86, 128, 46), BossPhase.F7_GOLDOR_4, "Lever"), + P4_DEVICE(LorenzVec(63, 126, 35), BossPhase.F7_GOLDOR_4, "Device"), ; + var highlight: Boolean = true + companion object { fun resetTerminals() = entries.forEach { it.highlight = true } fun getClosestTerminal(input: LorenzVec): TerminalInfo? { - return entries.filter { it.highlight }.minByOrNull { it.location.distance(input) } + return entries.filter { it.highlight && it.phase.isCurrent() }.minByOrNull { it.location.distance(input) } } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt index c04733e25f97..42ffba93e322 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt @@ -1,11 +1,10 @@ package at.hannibal2.skyhanni.features.dungeon.floor7 import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.events.DungeonStartEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.features.dungeon.DungeonAPI -import at.hannibal2.skyhanni.features.dungeon.DungeonAPI.dungeonFloor import at.hannibal2.skyhanni.features.dungeon.DungeonBossAPI import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.EntityUtils @@ -13,8 +12,8 @@ import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled -import at.hannibal2.skyhanni.utils.toLorenzVec -import net.minecraft.entity.player.EntityPlayer +import at.hannibal2.skyhanni.utils.getLorenzVec +import net.minecraft.entity.player.EntityPlayerMP import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @SkyHanniModule @@ -23,32 +22,33 @@ object TerminalWaypoints { private val config get() = SkyHanniMod.feature.dungeon @SubscribeEvent - fun onWorld(event: LorenzRenderWorldEvent) { + fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!isEnabled()) return - TerminalInfo.entries.filter { it.highlight && DungeonBossAPI.bossPhase == it.phase }.forEach { - event.drawWaypointFilled(it.location, LorenzColor.GREEN.toColor(), seeThroughBlocks = true) - event.drawDynamicText(it.location, it.text, 1.0) + for (term in TerminalInfo.entries) { + if (!term.highlight || !term.phase.isCurrent()) continue + event.drawWaypointFilled(term.location, LorenzColor.GREEN.toColor(), seeThroughBlocks = true) + event.drawDynamicText(term.location, term.text, 1.0) } } @SubscribeEvent - fun dungeonStart(event: DungeonStartEvent) { + fun onWorldChange(event: LorenzWorldChangeEvent) { TerminalInfo.resetTerminals() } @SubscribeEvent fun onChat(event: LorenzChatEvent) { + if (!inBoss()) return DungeonBossAPI.goldorTerminalPattern.matchMatcher(event.message) { val playerName = group("playerName") - val playerEntity = - EntityUtils.getAllEntities().filter { it is EntityPlayer }.firstOrNull { it.name == playerName } - ?: return - val terminal = TerminalInfo.getClosestTerminal(playerEntity.position.toLorenzVec()) + val playerEntity = EntityUtils.getEntities().find { it.name == playerName } ?: return + val terminal = TerminalInfo.getClosestTerminal(playerEntity.getLorenzVec()) terminal?.highlight = false } } - private fun isEnabled() = - DungeonAPI.inBossRoom && (dungeonFloor == "F7" || dungeonFloor == "M7") && config.terminalWaypoints + private fun inBoss() = DungeonAPI.inBossRoom && DungeonAPI.isOneOf("F7", "M7") + + private fun isEnabled() = inBoss() && config.terminalWaypoints } From 668e40c47daf6c7c3089076ad7c28fc7f62d5819 Mon Sep 17 00:00:00 2001 From: Nealkitt Date: Fri, 11 Oct 2024 17:25:51 -0700 Subject: [PATCH 3/4] realise one of empa's optimization breaks some weird sweat meta called pre4 that a bers does, flipping m7 sweats --- .../hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt index 3c8a2e6d3a3c..bd7b8a4ee7a6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalInfo.kt @@ -46,7 +46,7 @@ enum class TerminalInfo(val location: LorenzVec, val phase: BossPhase, val text: fun resetTerminals() = entries.forEach { it.highlight = true } fun getClosestTerminal(input: LorenzVec): TerminalInfo? { - return entries.filter { it.highlight && it.phase.isCurrent() }.minByOrNull { it.location.distance(input) } + return entries.filter { it.highlight }.minByOrNull { it.location.distance(input) } } } } From 1dd416142fcb1abcbea52a13e02deaebdf8f7560 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 13 Oct 2024 12:42:58 +0200 Subject: [PATCH 4/4] code cleanup --- .../features/dungeon/floor7/TerminalWaypoints.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt index 42ffba93e322..f8479507a402 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/floor7/TerminalWaypoints.kt @@ -40,12 +40,14 @@ object TerminalWaypoints { @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!inBoss()) return - DungeonBossAPI.goldorTerminalPattern.matchMatcher(event.message) { - val playerName = group("playerName") - val playerEntity = EntityUtils.getEntities().find { it.name == playerName } ?: return - val terminal = TerminalInfo.getClosestTerminal(playerEntity.getLorenzVec()) - terminal?.highlight = false - } + + val playerName = DungeonBossAPI.goldorTerminalPattern.matchMatcher(event.message) { + group("playerName") + } ?: return + + val playerEntity = EntityUtils.getEntities().find { it.name == playerName } ?: return + val terminal = TerminalInfo.getClosestTerminal(playerEntity.getLorenzVec()) + terminal?.highlight = false } private fun inBoss() = DungeonAPI.inBossRoom && DungeonAPI.isOneOf("F7", "M7")