34 lines
1.1 KiB
Kotlin
34 lines
1.1 KiB
Kotlin
package at.petrak.hex.casting.operators
|
|
|
|
import at.petrak.hex.casting.CastingContext
|
|
import at.petrak.hex.casting.SpellDatum
|
|
import at.petrak.hex.casting.operators.SpellOperator.Companion.getChecked
|
|
import net.minecraft.world.entity.projectile.ProjectileUtil
|
|
import net.minecraft.world.phys.AABB
|
|
import net.minecraft.world.phys.HitResult
|
|
import net.minecraft.world.phys.Vec3
|
|
|
|
object OpEntityRaycast : SpellOperator {
|
|
override val argc = 2
|
|
override fun execute(args: List<SpellDatum<*>>, ctx: CastingContext): List<SpellDatum<*>> {
|
|
val origin: Vec3 = args.getChecked(0)
|
|
val look: Vec3 = args.getChecked(1)
|
|
val endp = SpellOperator.raycastEnd(origin, look)
|
|
|
|
val entityHitResult = ProjectileUtil.getEntityHitResult(
|
|
ctx.caster,
|
|
origin,
|
|
endp,
|
|
AABB(origin, endp),
|
|
{ true },
|
|
SpellOperator.MAX_DISTANCE
|
|
)
|
|
return SpellOperator.spellListOf(
|
|
if (entityHitResult != null && entityHitResult.type == HitResult.Type.ENTITY) {
|
|
entityHitResult.entity
|
|
} else {
|
|
Unit
|
|
}
|
|
)
|
|
}
|
|
} |