ai: don't follow invulnerable

Prevents to follow invulnerable players (e.g. Gamemode Creative or Spectator)
This commit is contained in:
Alexander Medvedev 2025-01-09 14:05:31 +01:00
parent ee485056fb
commit debb713f3b

View File

@ -36,6 +36,12 @@ impl Goal for TargetGoal {
.world
.get_closest_player(mob.living_entity.entity.pos.load(), self.range)
.await;
// we can't use filter, because of async clousrers
if let Some(player) = target.as_ref() {
if player.abilities.lock().await.invulnerable {
*target = None;
}
}
target.is_some()
}
@ -44,7 +50,8 @@ impl Goal for TargetGoal {
if let Some(target) = self.target.lock().await.as_ref() {
let mob_pos = mob.living_entity.entity.pos.load();
let target_pos = target.living_entity.entity.pos.load();
return mob_pos.squared_distance_to_vec(target_pos) <= (self.range * self.range);
let abilities = target.abilities.lock().await;
return !abilities.invulnerable && mob_pos.squared_distance_to_vec(target_pos) <= (self.range * self.range);
}
false
}