From debb713f3be0cab11453233a1896b1e1e25455ee Mon Sep 17 00:00:00 2001 From: Alexander Medvedev Date: Thu, 9 Jan 2025 14:05:31 +0100 Subject: [PATCH] ai: don't follow invulnerable Prevents to follow invulnerable players (e.g. Gamemode Creative or Spectator) --- pumpkin/src/entity/ai/goal/target_goal.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pumpkin/src/entity/ai/goal/target_goal.rs b/pumpkin/src/entity/ai/goal/target_goal.rs index 15dbfce2c..4d8141d23 100644 --- a/pumpkin/src/entity/ai/goal/target_goal.rs +++ b/pumpkin/src/entity/ai/goal/target_goal.rs @@ -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 }