@@ -4,25 +4,19 @@ import net.minecraft.network.chat.IChatBaseComponent
44import net.minecraft.world.entity.EntityCreature
55import net.minecraft.world.entity.EntityInsentient
66import net.minecraft.world.entity.EntityLiving
7- import net.minecraft.world.entity.ai.attributes.AttributeBase
8- import net.minecraft.world.entity.ai.attributes.AttributeMapBase
9- import net.minecraft.world.entity.ai.attributes.AttributeModifiable
107import net.minecraft.world.entity.ai.attributes.GenericAttributes
118import net.minecraft.world.entity.ai.goal.PathfinderGoal
129import net.minecraft.world.entity.ai.goal.PathfinderGoalMeleeAttack
1310import net.minecraft.world.entity.ai.goal.target.PathfinderGoalHurtByTarget
1411import net.minecraft.world.entity.ai.goal.target.PathfinderGoalNearestAttackableTarget
15- import net.minecraft.world.entity.ai.navigation.NavigationAbstract
1612import org.bukkit.Location
17- import org.bukkit.craftbukkit.v1_20_R3 .CraftServer
18- import org.bukkit.craftbukkit.v1_20_R3 .entity.CraftEntity
19- import org.bukkit.craftbukkit.v1_20_R3 .util.CraftChatMessage
13+ import org.bukkit.craftbukkit.v1_21_R5 .CraftServer
14+ import org.bukkit.craftbukkit.v1_21_R5 .entity.CraftEntity
15+ import org.bukkit.craftbukkit.v1_21_R5 .util.CraftChatMessage
2016import org.bukkit.entity.LivingEntity
2117import taboolib.common.platform.function.warning
22- import taboolib.library.reflex.Reflex.Companion.getProperty
2318import taboolib.library.reflex.Reflex.Companion.invokeMethod
2419import taboolib.library.reflex.Reflex.Companion.setProperty
25- import taboolib.module.ai.pathfinderExecutor
2620import taboolib.module.chat.ComponentText
2721import taboolib.module.nms.nmsClass
2822
@@ -40,8 +34,16 @@ class NMSImpl : NMS() {
4034 return CraftChatMessage .fromJSON(component.toRawMessage())
4135 }
4236
37+ private fun LivingEntity.getEntityLiving (): EntityLiving ? {
38+ return (this as CraftEntity ).handle as ? EntityLiving
39+ }
40+
4341 private fun LivingEntity.getEntityInsentient (): EntityInsentient ? {
44- return pathfinderExecutor.getEntityInsentient(this ) as ? EntityInsentient
42+ return (this as CraftEntity ).handle as ? EntityInsentient
43+ }
44+
45+ private fun LivingEntity.getEntityCreature (): EntityCreature ? {
46+ return (this as CraftEntity ).handle as ? EntityCreature
4547 }
4648
4749 private fun addGoalAi (entity : LivingEntity , priority : Int , pathfinderGoal : Any ) {
@@ -59,37 +61,33 @@ class NMSImpl : NMS() {
5961 }
6062
6163 override fun setTargetEntity (entity : LivingEntity , target : LivingEntity ? ) {
62- val entityInsentient = entity.getEntityInsentient() ? : return
63- // Unknown target reason, please report on the issue tracker
64- entityInsentient.setProperty(" target" , target?.getEntityInsentient())
64+ val entityInsentient = entity.getEntityInsentient()
65+ ? : return warning(" ${entity.type} is not EntityInsentient." )
66+ // setTarget -> Unknown target reason, please report on the issue tracker
67+ entityInsentient.setProperty(" target" , target?.getEntityLiving())
6568 }
6669
6770 override fun getSpeed (entity : LivingEntity ): Double {
6871 return entity.getEntityInsentient()!! .speed.toDouble()
6972 }
7073
7174 override fun getTargetLocation (entity : LivingEntity ): Location ? {
72- val navigation = entity.getEntityInsentient()!! .getProperty< NavigationAbstract >( " navigation" ) !!
75+ val navigation = entity.getEntityInsentient()!! .navigation
7376 return navigation.path?.endNode?.let { Location (entity.world, it.x.toDouble(), it.y.toDouble(), it.z.toDouble()) }
7477 }
7578
7679 override fun makeMeleeHostile (entity : LivingEntity , damage : Double? , speed : Double , priority : Int , type : String , followingTargetEvenIfNotSeen : Boolean ) {
77- val entityInsentient = entity.getEntityInsentient ()
78- ? : return warning(" ${entity.type} is not EntityInsentient ." )
80+ val entityCreature = entity.getEntityCreature ()
81+ ? : return warning(" ${entity.type} is not EntityCreature ." )
7982 if (damage != null ) {
80- val map = entityInsentient.invokeMethod<AttributeMapBase >(" getAttributes" )!!
81- // add generic:attack_damage attribute
82- map.getProperty<HashMap <AttributeBase , AttributeModifiable >>(" b" )!! [GenericAttributes .ATTACK_DAMAGE ] =
83- AttributeModifiable (GenericAttributes .ATTACK_DAMAGE ) { map.invokeMethod<Void >(" a" , it) }
84- // set entity damage
85- entityInsentient.invokeMethod<AttributeModifiable >(" getAttribute" , GenericAttributes .ATTACK_DAMAGE )!!
86- .invokeMethod<Void >(" a" , damage)
83+ entityCreature.attributes.invokeMethod<Void >(" registerAttribute" , GenericAttributes .ATTACK_DAMAGE )
84+ entityCreature.getAttribute(GenericAttributes .ATTACK_DAMAGE )!! .baseValue = damage
8785 }
8886 // add goal selector
89- addGoalAi(entity, priority, PathfinderGoalMeleeAttack (entityInsentient as EntityCreature , speed, followingTargetEvenIfNotSeen))
87+ addGoalAi(entity, priority, PathfinderGoalMeleeAttack (entityCreature , speed, followingTargetEvenIfNotSeen))
9088 // add target selector
91- addTargetAi(entity, 1 , PathfinderGoalHurtByTarget (entityInsentient ))
92- addTargetAi(entity, 2 , PathfinderGoalNearestAttackableTarget (entityInsentient , nmsClass(type).asSubclass(EntityLiving ::class .java), true ))
89+ addTargetAi(entity, 1 , PathfinderGoalHurtByTarget (entityCreature ))
90+ addTargetAi(entity, 2 , PathfinderGoalNearestAttackableTarget (entityCreature , nmsClass(type).asSubclass(EntityLiving ::class .java), true ))
9391 }
9492
9593}
0 commit comments