From 133b009d8e478bde5c19e3bbf4b26f4cb75c43d5 Mon Sep 17 00:00:00 2001 From: Empa Date: Fri, 11 Oct 2024 23:13:23 +0200 Subject: [PATCH] some formatting changes and optimizations --- .../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 ++++---- 5 files changed, 62 insertions(+), 50 deletions(-) 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 }