blob: 4e9382d8f2441e2abb29316ed4dba6944685018b (
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
package at.hannibal2.skyhanni.features.nether.ashfang
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.EntityHealthUpdateEvent
import at.hannibal2.skyhanni.events.RenderMobColoredEvent
import at.hannibal2.skyhanni.events.ResetEntityHurtEvent
import at.hannibal2.skyhanni.events.withAlpha
import at.hannibal2.skyhanni.features.damageindicator.BossType
import at.hannibal2.skyhanni.features.damageindicator.DamageIndicatorManager
import at.hannibal2.skyhanni.utils.EntityUtils.getAllNameTagsWith
import at.hannibal2.skyhanni.utils.LorenzColor
import at.hannibal2.skyhanni.utils.LorenzUtils
import net.minecraft.client.Minecraft
import net.minecraft.entity.EntityLivingBase
import net.minecraft.entity.item.EntityArmorStand
import net.minecraft.entity.monster.EntityBlaze
import net.minecraftforge.client.event.RenderLivingEvent
import net.minecraftforge.event.world.WorldEvent
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent
class AshfangBlazes {
private val blazeColor = mutableMapOf<EntityBlaze, LorenzColor>()
private val blazeArmorStand = mutableMapOf<EntityBlaze, EntityArmorStand>()
var nearAshfang = false
var tick = 0
@SubscribeEvent
fun onTick(event: TickEvent.ClientTickEvent) {
if (!isEnabled()) return
if (tick++ % 20 == 0) {
checkNearAshfang()
}
if (nearAshfang) {
for (entity in Minecraft.getMinecraft().theWorld.loadedEntityList.filterIsInstance<EntityBlaze>()
.filter { it !in blazeColor.keys }) {
val list = entity.getAllNameTagsWith(2, "Ashfang")
if (list.size == 1) {
val armorStand = list[0]
blazeArmorStand[entity] = armorStand
if (armorStand.name.contains("Ashfang Follower")) {
blazeColor[entity] = LorenzColor.DARK_GRAY
} else if (armorStand.name.contains("Ashfang Underling")) {
blazeColor[entity] = LorenzColor.RED
} else if (armorStand.name.contains("Ashfang Acolyte")) {
blazeColor[entity] = LorenzColor.BLUE
} else {
blazeArmorStand.remove(entity)
}
}
}
}
}
@SubscribeEvent
fun onEntityHealthUpdate(event: EntityHealthUpdateEvent) {
if (!isEnabled()) return
val entityId = event.entity.entityId
if (entityId !in blazeArmorStand.keys.map { it.entityId }) return
if (event.health % 10_000_000 != 0) {
blazeArmorStand.keys.removeIf { it.entityId == entityId }
}
}
private fun checkNearAshfang() {
nearAshfang = Minecraft.getMinecraft().theWorld.loadedEntityList
.any { it is EntityArmorStand && it.name.contains("Ashfang") }
}
@SubscribeEvent
fun onRenderMobColored(event: RenderMobColoredEvent) {
if (!isEnabled()) return
if (!SkyHanniMod.feature.ashfang.highlightBlazes) return
val entity = event.entity
event.color = blazeColor[entity]?.toColor()?.withAlpha(40) ?: 0
}
@SubscribeEvent
fun onResetEntityHurtTime(event: ResetEntityHurtEvent) {
if (!isEnabled()) return
if (!SkyHanniMod.feature.ashfang.highlightBlazes) return
val entity = event.entity
if (entity in blazeColor) {
event.shouldReset = true
}
}
@SubscribeEvent(priority = EventPriority.HIGH)
fun onRenderLiving(event: RenderLivingEvent.Specials.Pre<EntityLivingBase>) {
if (!isEnabled()) return
if (!SkyHanniMod.feature.ashfang.hideNames) return
val entity = event.entity
if (entity !is EntityArmorStand) return
if (!entity.hasCustomName()) return
if (entity.isDead) return
if (entity in blazeArmorStand.values) {
event.isCanceled = true
}
}
@SubscribeEvent
fun onWorldChange(event: WorldEvent.Load) {
blazeColor.clear()
blazeArmorStand.clear()
}
private fun isEnabled(): Boolean {
return LorenzUtils.inSkyBlock && DamageIndicatorManager.isBossSpawned(BossType.NETHER_ASHFANG)
}
}
|