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
59
60
61
62
63
64
65
|
package at.hannibal2.skyhanni.features.slayer
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.SlayerAPI
import at.hannibal2.skyhanni.data.mob.Mob
import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent
import at.hannibal2.skyhanni.events.MobEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.EntityUtils.canBeSeen
import at.hannibal2.skyhanni.utils.LorenzColor
import at.hannibal2.skyhanni.utils.RenderUtils.drawLineToEye
import at.hannibal2.skyhanni.utils.getLorenzVec
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@SkyHanniModule
object SlayerMiniBossFeatures {
private val config get() = SkyHanniMod.feature.slayer
private var miniBosses = mutableSetOf<Mob>()
@SubscribeEvent
fun onMobSpawn(event: MobEvent.Spawn.SkyblockMob) {
val mob = event.mob
if (!SlayerMiniBossType.isMiniboss(mob.name)) return
miniBosses += mob
if (config.slayerMinibossHighlight) mob.highlight(LorenzColor.AQUA.toColor())
}
@SubscribeEvent
fun onMobDeSpawn(event: MobEvent.DeSpawn.SkyblockMob) {
miniBosses -= event.mob
}
@SubscribeEvent
fun onWorldRender(event: LorenzRenderWorldEvent) {
if (!SlayerAPI.isInAnyArea) return
if (!config.slayerMinibossLine) return
for (mob in miniBosses) {
if (!mob.baseEntity.canBeSeen(10)) continue
event.drawLineToEye(
mob.baseEntity.getLorenzVec().up(),
LorenzColor.AQUA.toColor(),
config.slayerMinibossLineWidth,
true,
)
}
}
enum class SlayerMiniBossType(vararg names: String) {
REVENANT("Revenant Sycophant", "Revenant Champion", "Deformed Revenant", "Atoned Champion", "Atoned Revenant"),
TARANTULA("Tarantula Vermin", "Tarantula Beast", "Mutant Tarantula"),
SVEN("Pack Enforcer", "Sven Follower", "Sven Alpha"),
VOIDLING("Voidling Devotee", "Voidling Radical", "Voidcrazed Maniac"),
INFERNAL("Flare Demon", "Kindleheart Demon", "Burningsoul Demon"),
;
val names = names.toSet()
companion object {
private val allNames = entries.flatMap { it.names }.toSet()
fun isMiniboss(name: String) = name in allNames
}
}
}
|