diff options
| author | mat <git@matdoes.dev> | 2025-06-09 21:33:21 -0330 |
|---|---|---|
| committer | mat <git@matdoes.dev> | 2025-06-09 21:33:21 -0330 |
| commit | e4ead93f195d3d91fd809dfc8cfee9cc36aabcbc (patch) | |
| tree | 3be2352136fb71433a57a9cbf938005e8e7f9b5b /azalea | |
| parent | 086f979a2895e7f15ec61e5704869a0cfc94d16f (diff) | |
| download | azalea-drasl-e4ead93f195d3d91fd809dfc8cfee9cc36aabcbc.tar.xz | |
jump if in water while executing pathfinder path
Diffstat (limited to 'azalea')
| -rw-r--r-- | azalea/src/pathfinder/goals.rs | 16 | ||||
| -rw-r--r-- | azalea/src/pathfinder/moves/basic.rs | 3 | ||||
| -rw-r--r-- | azalea/src/pathfinder/moves/mod.rs | 6 |
3 files changed, 23 insertions, 2 deletions
diff --git a/azalea/src/pathfinder/goals.rs b/azalea/src/pathfinder/goals.rs index 4c0dbafa..c19bf504 100644 --- a/azalea/src/pathfinder/goals.rs +++ b/azalea/src/pathfinder/goals.rs @@ -1,6 +1,9 @@ //! The goals that a pathfinder can try to reach. -use std::{f32::consts::SQRT_2, fmt::Debug}; +use std::{ + f32::consts::SQRT_2, + fmt::{self, Debug}, +}; use azalea_core::position::{BlockPos, Vec3}; use azalea_world::ChunkStorage; @@ -193,7 +196,7 @@ impl<T: Goal> Goal for AndGoals<T> { } /// Move to a position where we can reach the given block. -#[derive(Clone, Debug)] +#[derive(Clone)] pub struct ReachBlockPosGoal { pub pos: BlockPos, pub distance: f64, @@ -244,3 +247,12 @@ impl Goal for ReachBlockPosGoal { block_hit_result.block_pos == self.pos } } +impl Debug for ReachBlockPosGoal { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("ReachBlockPosGoal") + .field("pos", &self.pos) + .field("distance", &self.distance) + .field("max_check_distance", &self.max_check_distance) + .finish() + } +} diff --git a/azalea/src/pathfinder/moves/basic.rs b/azalea/src/pathfinder/moves/basic.rs index fe0d81f5..e352f385 100644 --- a/azalea/src/pathfinder/moves/basic.rs +++ b/azalea/src/pathfinder/moves/basic.rs @@ -55,6 +55,7 @@ fn execute_forward_move(mut ctx: ExecuteCtx) { } ctx.look_at(center); + ctx.jump_if_in_water(); ctx.sprint(SprintDirection::Forward); } @@ -141,6 +142,7 @@ fn execute_ascend_move(mut ctx: ExecuteCtx) { ctx.look_at(target_center); ctx.walk(WalkDirection::Forward); + ctx.jump_if_in_water(); // these checks are to make sure we don't fall if our velocity is too high in // the wrong direction @@ -439,6 +441,7 @@ fn execute_diagonal_move(mut ctx: ExecuteCtx) { ctx.look_at(target_center); ctx.sprint(SprintDirection::Forward); + ctx.jump_if_in_water(); } /// Go directly down, usually by mining. diff --git a/azalea/src/pathfinder/moves/mod.rs b/azalea/src/pathfinder/moves/mod.rs index 6c26a507..44d31bfb 100644 --- a/azalea/src/pathfinder/moves/mod.rs +++ b/azalea/src/pathfinder/moves/mod.rs @@ -111,6 +111,12 @@ impl ExecuteCtx<'_, '_, '_, '_, '_, '_, '_> { }); } + pub fn jump_if_in_water(&mut self) { + if self.physics.is_in_water() { + self.jump(); + } + } + /// Returns whether this block could be mined. pub fn should_mine(&mut self, block: BlockPos) -> bool { let block_state = self |
