1+ package org.gitee.orryx.compat.mythicmobs.targeter
2+
3+ import io.lumine.xikage.mythicmobs.MythicMobs
4+ import io.lumine.xikage.mythicmobs.adapters.AbstractEntity
5+ import io.lumine.xikage.mythicmobs.io.MythicLineConfig
6+ import io.lumine.xikage.mythicmobs.skills.SkillMetadata
7+ import io.lumine.xikage.mythicmobs.skills.targeters.IEntitySelector
8+ import org.gitee.orryx.utils.direction
9+ import taboolib.common.platform.Ghost
10+
11+ @Ghost
12+ class MythicMobsOrryxRangeTargeter (mlc : MythicLineConfig ): IEntitySelector(mlc) {
13+
14+ private val radius = mlc.getDouble(arrayOf(" radius" , " r" ), 1.0 )
15+ private val offsetX = mlc.getDouble(arrayOf(" offsetx" , " ox" ), 0.0 )
16+ private val offsetY = mlc.getDouble(arrayOf(" offsety" , " oy" ), 0.0 )
17+ private val offsetZ = mlc.getDouble(arrayOf(" offsetz" , " oz" ), 0.0 )
18+
19+ override fun getEntities (data : SkillMetadata ): HashSet <AbstractEntity ?> {
20+ val am = data.caster
21+ val targets = HashSet <AbstractEntity ?>()
22+
23+ val vector = am.entity.bukkitEntity.location.direction.direction(offsetX, offsetY, offsetZ, false )
24+ val newCenter = am.entity.bukkitEntity.location.clone().add(vector)
25+
26+ val radiusSq: Double = radius * radius
27+ for (p in MythicMobs .inst().entityManager.getPlayers(am.entity.world)) {
28+ if (p.world != am.entity.world) {
29+ continue
30+ }
31+ if (newCenter.distanceSquared(p.bukkitEntity.location) >= radiusSq) {
32+ continue
33+ }
34+ targets.add(p)
35+ }
36+ return targets
37+ }
38+ }
0 commit comments