aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2024-12-28 01:48:25 +0000
committermat <git@matdoes.dev>2024-12-28 01:48:25 +0000
commitebaf5128fbc87970b2ba1f6157e5da035ae379c8 (patch)
tree7b9ee030fd6c9551bc3c8f3695f66e9f452de8ac
parent5693191b57973136188bdade2144a69ac61a9f8a (diff)
downloadazalea-drasl-ebaf5128fbc87970b2ba1f6157e5da035ae379c8.tar.xz
better pathfinder debug messages
-rw-r--r--azalea-physics/src/collision/mod.rs9
-rw-r--r--azalea/examples/testbot/commands/movement.rs20
-rw-r--r--azalea/src/pathfinder/goals.rs4
-rw-r--r--azalea/src/pathfinder/mod.rs16
4 files changed, 37 insertions, 12 deletions
diff --git a/azalea-physics/src/collision/mod.rs b/azalea-physics/src/collision/mod.rs
index bff9d6f8..39fc43f8 100644
--- a/azalea-physics/src/collision/mod.rs
+++ b/azalea-physics/src/collision/mod.rs
@@ -356,6 +356,10 @@ pub fn fluid_shape(
return &BLOCK_SHAPE;
}
}
+ if fluid.amount > 9 {
+ warn!("Tried to calculate shape for fluid with height > 9: {fluid:?} at {pos}");
+ return &EMPTY_SHAPE;
+ }
// pre-calculate these in a LazyLock so this function can return a
// reference instead
@@ -375,11 +379,6 @@ pub fn fluid_shape(
]
});
- if fluid.amount > 9 {
- warn!("Tried to calculate shape for fluid with height > 9: {fluid:?} at {pos}");
- return &EMPTY_SHAPE;
- }
-
&FLUID_SHAPES[fluid.amount as usize]
}
fn calculate_shape_for_fluid(amount: u8) -> VoxelShape {
diff --git a/azalea/examples/testbot/commands/movement.rs b/azalea/examples/testbot/commands/movement.rs
index 3c66fefa..b0adec8b 100644
--- a/azalea/examples/testbot/commands/movement.rs
+++ b/azalea/examples/testbot/commands/movement.rs
@@ -3,7 +3,7 @@ use std::time::Duration;
use azalea::{
brigadier::prelude::*,
entity::{EyeHeight, Position},
- pathfinder::goals::{BlockPosGoal, XZGoal},
+ pathfinder::goals::{BlockPosGoal, RadiusGoal, XZGoal},
prelude::*,
BlockPos, SprintDirection, WalkDirection,
};
@@ -42,6 +42,24 @@ pub fn register(commands: &mut CommandDispatcher<Mutex<CommandSource>>) {
1
}),
)))
+ .then(literal("radius").then(argument("radius", float()).then(
+ argument("x", integer()).then(argument("y", integer()).then(
+ argument("z", integer()).executes(|ctx: &Ctx| {
+ let source = ctx.source.lock();
+ let radius = get_float(ctx, "radius").unwrap();
+ let x = get_integer(ctx, "x").unwrap();
+ let y = get_integer(ctx, "y").unwrap();
+ let z = get_integer(ctx, "z").unwrap();
+ println!("goto radius {radius}, position: {x} {y} {z}");
+ source.reply("ok");
+ source.bot.goto(RadiusGoal {
+ pos: BlockPos::new(x, y, z).center(),
+ radius,
+ });
+ 1
+ }),
+ )),
+ )))
.then(argument("x", integer()).then(argument("y", integer()).then(
argument("z", integer()).executes(|ctx: &Ctx| {
let source = ctx.source.lock();
diff --git a/azalea/src/pathfinder/goals.rs b/azalea/src/pathfinder/goals.rs
index 531e4036..0fb72446 100644
--- a/azalea/src/pathfinder/goals.rs
+++ b/azalea/src/pathfinder/goals.rs
@@ -1,6 +1,6 @@
//! The goals that a pathfinder can try to reach.
-use std::f32::consts::SQRT_2;
+use std::{f32::consts::SQRT_2, fmt::Debug};
use azalea_core::position::{BlockPos, Vec3};
use azalea_world::ChunkStorage;
@@ -9,7 +9,7 @@ use serde::{Deserialize, Serialize};
use super::costs::{COST_HEURISTIC, FALL_N_BLOCKS_COST, JUMP_ONE_BLOCK_COST};
-pub trait Goal {
+pub trait Goal: Debug {
#[must_use]
fn heuristic(&self, n: BlockPos) -> f32;
#[must_use]
diff --git a/azalea/src/pathfinder/mod.rs b/azalea/src/pathfinder/mod.rs
index 01375590..95982215 100644
--- a/azalea/src/pathfinder/mod.rs
+++ b/azalea/src/pathfinder/mod.rs
@@ -235,6 +235,7 @@ pub fn goto_listener(
let Ok((mut pathfinder, executing_path, position, instance_name, inventory)) =
query.get_mut(event.entity)
else {
+ warn!("got goto event for an entity that can't pathfind");
continue;
};
@@ -243,6 +244,7 @@ pub fn goto_listener(
pathfinder.goal = None;
pathfinder.successors_fn = None;
pathfinder.is_calculating = false;
+ debug!("already at goal, not pathfinding");
continue;
}
@@ -262,10 +264,16 @@ pub fn goto_listener(
} else {
BlockPos::from(position)
};
- info!(
- "got goto, starting from {start:?} (currently at {:?})",
- BlockPos::from(position)
- );
+
+ if start == BlockPos::from(position) {
+ info!("got goto {:?}, starting from {start:?}", event.goal);
+ } else {
+ info!(
+ "got goto {:?}, starting from {start:?} (currently at {:?})",
+ event.goal,
+ BlockPos::from(position)
+ );
+ }
let successors_fn: moves::SuccessorsFn = event.successors_fn;