aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/com/ambientaddons/features/kuudra/KuudraFeatures.kt
blob: 5ca8d1e4bc14e3d03cae6358f5a64cf17215fb92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.ambientaddons.features.kuudra

import AmbientAddons.Companion.config
import AmbientAddons.Companion.mc
import com.ambientaddons.events.BossStatusEvent
import com.ambientaddons.utils.Area
import com.ambientaddons.utils.Extensions.stripControlCodes
import com.ambientaddons.utils.SBLocation
import net.minecraft.entity.boss.BossStatus
import net.minecraft.entity.monster.EntityGhast
import net.minecraft.util.Vec3
import net.minecraftforge.client.event.RenderWorldLastEvent
import net.minecraftforge.event.world.WorldEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent

object KuudraFeatures {
    private val dropships = mutableSetOf<EntityGhast>()

    private fun colorizeHealth(healthFraction: Float) = when {
        healthFraction > 0.75F -> "§a"
        healthFraction > 0.50F -> "§e"
        healthFraction > 0.25F -> "§6"
        else -> "§e"
    }

    @SubscribeEvent
    fun onBossBarSet(event: BossStatusEvent) {
        if (!config.kuudraHp || SBLocation.area != Area.Kuudra) return
        val bossData = event.displayData
        if (bossData.displayName.unformattedText.stripControlCodes().contains("Kuudra")) {
            val healthFraction = bossData.health / bossData.maxHealth
            BossStatus.healthScale = healthFraction
            BossStatus.statusBarTime = 100
            val percentString = String.format("%.1f", healthFraction * 100)
            BossStatus.bossName =
                "${bossData.displayName.formattedText} §r§8 - §r${colorizeHealth(healthFraction)} ${percentString}%"
            event.isCanceled = true
        }
    }

    @SubscribeEvent
    fun onWorldUnload(event: WorldEvent.Unload) {
        dropships.clear()
    }

    @SubscribeEvent
    fun onRenderWorldLast(event: RenderWorldLastEvent) {
        if (!config.kuudraAlert || SBLocation.area != Area.Kuudra) return
        mc.theWorld.loadedEntityList.forEach {
            if (it !is EntityGhast || dropships.contains(it)) return@forEach
            if (it.positionVector.squareDistanceTo(Vec3(-101.0, 100.0, -106.0)) < 225) {
                mc.ingameGUI.displayTitle("§cDropship!", null, 5, 40, 5)
                mc.thePlayer.playSound("random.orb", 1f, 0.5f)
                dropships.add(it)
            }
        }
    }
}