From 5d1596b366fb91ebd6fc56a60e5bd3e6f2d84d60 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:04:30 +0100 Subject: [PATCH] Fix: Damage Indicator Ender Dragon (#3376) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../features/combat/DragonFightAPI.kt | 86 +++++++++++++++++++ .../combat/damageindicator/BossType.kt | 2 +- .../damageindicator/DamageIndicatorManager.kt | 15 ++++ 3 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/combat/DragonFightAPI.kt diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/DragonFightAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/DragonFightAPI.kt new file mode 100644 index 000000000000..8f05594680d3 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/DragonFightAPI.kt @@ -0,0 +1,86 @@ +package at.hannibal2.skyhanni.features.combat + +import at.hannibal2.skyhanni.api.event.HandleEvent +import at.hannibal2.skyhanni.data.hypixel.chat.event.SystemMessageEvent +import at.hannibal2.skyhanni.events.ScoreboardUpdateEvent +import at.hannibal2.skyhanni.events.minecraft.WorldChangeEvent +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.NumberUtil.formatInt +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern + +@SkyHanniModule +object DragonFightAPI { + + var currentType: String? = null + var currentHp: Int? = null + var yourDamage: Int? = null + + private val group = RepoPattern.group("combat.end-dragon-fight") + + /** + * REGEX-TEST: ☬ The Wise Dragon has spawned! + */ + private val chatSpawnPattern by group.pattern( + "chat.spawn", + "☬ The (?.*) Dragon has spawned!", + ) + + /** + * REGEX-TEST: YOUNG DRAGON DOWN! + */ + private val chatDeath by group.pattern( + "chat.death", + ".*DRAGON DOWN!", + ) + + /** + * REGEX-TEST: Dragon HP: 4,824,217 ❤ + */ + private val scoreboardHPPattern by group.pattern( + "scoreboard.hp", + "Dragon HP: (?.*) ❤", + ) + + /** + * REGEX-TEST: Your Damage: 0 + */ + private val scoreboardYourDamagePattern by group.pattern( + "scoreboard.your-damage", + "Your Damage: (?.*)", + ) + + @HandleEvent + fun onChat(event: SystemMessageEvent) { + chatSpawnPattern.matchMatcher(event.message.removeColor()) { + currentType = group("type") + } + chatDeath.matchMatcher(event.message.removeColor()) { + reset() + } + } + + fun reset() { + currentType = null + currentHp = null + yourDamage = null + } + + @HandleEvent + fun onWorldChange(event: WorldChangeEvent) { + reset() + } + + @HandleEvent + fun onScoreboardChange(event: ScoreboardUpdateEvent) { + for (line in event.full.map { it.removeColor() }) { + scoreboardHPPattern.matchMatcher(line) { + currentHp = group("hp").formatInt() + } + scoreboardYourDamagePattern.matchMatcher(line) { + yourDamage = group("damage").formatInt() + } + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt index d250fa6019bb..8adbea81b3d6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt @@ -21,7 +21,7 @@ enum class BossType( NETHER_VANQUISHER("§5Vanquisher", Type.VANQUISHER), END_ENDSTONE_PROTECTOR("§cEndstone Protector", Type.ENDERSTONE_PROTECTOR), - END_ENDER_DRAGON("Ender Dragon", Type.ENDER_DRAGON), // TODO fix totally + END_ENDER_DRAGON("Dragon", Type.ENDER_DRAGON), SLAYER_ZOMBIE_1("§aRevenant Horror 1", Type.REVENANT_HORROR, "§aRev 1", showDeathTime = true), SLAYER_ZOMBIE_2("§eRevenant Horror 2", Type.REVENANT_HORROR, "§eRev 2", showDeathTime = true), diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt index a4085d24ae0f..3ed2d9a0fad4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt @@ -17,6 +17,7 @@ import at.hannibal2.skyhanni.events.entity.EntityHealthUpdateEvent import at.hannibal2.skyhanni.events.minecraft.SkyHanniRenderWorldEvent import at.hannibal2.skyhanni.events.minecraft.SkyHanniTickEvent import at.hannibal2.skyhanni.events.minecraft.WorldChangeEvent +import at.hannibal2.skyhanni.features.combat.DragonFightAPI import at.hannibal2.skyhanni.features.dungeon.DungeonApi import at.hannibal2.skyhanni.features.rift.area.colosseum.BacteApi import at.hannibal2.skyhanni.features.rift.area.colosseum.BacteApi.currentPhase @@ -477,11 +478,25 @@ object DamageIndicatorManager { return checkBacte(entityData) } + BossType.END_ENDER_DRAGON, + -> { + return checkEnderDragon(entityData) + } + else -> return "" } return "" } + private fun checkEnderDragon(entityData: EntityData): String { + DragonFightAPI.currentType?.let { + entityData.namePrefix = "§c§l$it " + } + return DragonFightAPI.currentHp?.let { + "§c" + it.shortFormat() + }.orEmpty() + } + private fun checkBacte(entityData: EntityData): String { if (!config.showBactePhase) return "" if (currentPhase == BacteApi.Phase.NOT_ACTIVE) return ""