Skip to content

Commit

Permalink
Fix: Damage Indicator Ender Dragon (#3376)
Browse files Browse the repository at this point in the history
Co-authored-by: hannibal2 <[email protected]>
  • Loading branch information
hannibal002 and hannibal002 authored Feb 7, 2025
1 parent 55da225 commit 5d1596b
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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 (?<type>.*) 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: (?<hp>.*) ❤",
)

/**
* REGEX-TEST: Your Damage: 0
*/
private val scoreboardYourDamagePattern by group.pattern(
"scoreboard.your-damage",
"Your Damage: (?<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()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 ""
Expand Down

0 comments on commit 5d1596b

Please sign in to comment.