blob: c571198185a9ccb60b55650495e15e6b4803ab39 (
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
|
package at.hannibal2.skyhanni.data
import at.hannibal2.skyhanni.events.EntityHealthUpdateEvent
import at.hannibal2.skyhanni.events.EntityMaxHealthUpdateEvent
import at.hannibal2.skyhanni.events.PacketEvent
import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth
import net.minecraft.client.Minecraft
import net.minecraft.client.entity.EntityOtherPlayerMP
import net.minecraft.client.entity.EntityPlayerSP
import net.minecraft.entity.EntityLivingBase
import net.minecraft.entity.boss.EntityWither
import net.minecraft.entity.item.EntityArmorStand
import net.minecraft.entity.item.EntityItem
import net.minecraft.entity.item.EntityItemFrame
import net.minecraft.entity.item.EntityXPOrb
import net.minecraft.network.play.server.S1CPacketEntityMetadata
import net.minecraftforge.event.world.WorldEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent
class EntityData {
private val maxHealthMap = mutableMapOf<EntityLivingBase, Int>()
@SubscribeEvent
fun onTick(event: TickEvent.ClientTickEvent) {
if (event.phase != TickEvent.Phase.START) return
val minecraft = Minecraft.getMinecraft() ?: return
val theWorld = minecraft.theWorld ?: return
for (entity in theWorld.loadedEntityList) {
if (entity !is EntityLivingBase) continue
val maxHealth = entity.baseMaxHealth
val oldMaxHealth = maxHealthMap.getOrDefault(entity, -1)
if (oldMaxHealth != maxHealth) {
maxHealthMap[entity] = maxHealth
EntityMaxHealthUpdateEvent(entity, maxHealth).postAndCatch()
}
}
}
@SubscribeEvent
fun onWorldChange(event: WorldEvent.Load) {
maxHealthMap.clear()
}
@SubscribeEvent
fun onHealthUpdatePacket(event: PacketEvent.ReceiveEvent) {
val packet = event.packet
if (packet !is S1CPacketEntityMetadata) return
val watchableObjects = packet.func_149376_c() ?: return
val entityId = packet.entityId
val theWorld = Minecraft.getMinecraft().theWorld ?: return
val entity = theWorld.getEntityByID(entityId) ?: return
if (entity is EntityArmorStand) return
if (entity is EntityXPOrb) return
if (entity is EntityItem) return
if (entity is EntityItemFrame) return
if (entity is EntityOtherPlayerMP) return
if (entity is EntityPlayerSP) return
for (watchableObject in watchableObjects) {
val dataValueId = watchableObject.dataValueId
val any = watchableObject.`object`
if (dataValueId != 6) continue
val health = (any as Float).toInt()
if (entity is EntityWither) {
if (health == 300) {
if (entityId < 0) return
}
}
if (entity is EntityLivingBase) {
EntityHealthUpdateEvent(entity, health).postAndCatch()
}
}
}
}
|