aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/movement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-client/src/movement.rs')
-rw-r--r--azalea-client/src/movement.rs24
1 files changed, 20 insertions, 4 deletions
diff --git a/azalea-client/src/movement.rs b/azalea-client/src/movement.rs
index c9cd62e9..0402b15b 100644
--- a/azalea-client/src/movement.rs
+++ b/azalea-client/src/movement.rs
@@ -4,15 +4,29 @@ use azalea_protocol::packets::game::serverbound_move_player_packet_pos_rot::Serv
impl Client {
/// Set the client's position to the given coordinates.
- pub async fn move_to(&mut self, pos: &EntityPos) {
+ pub async fn move_to(&mut self, new_pos: EntityPos) -> Result<(), String> {
+ let mut state_lock = self.state.lock().unwrap();
+
+ let world = state_lock.world.as_ref().unwrap();
+
+ let player = &state_lock.player;
+ let player_id = if let Some(player) = player.entity(world) {
+ player.id
+ } else {
+ return Err("Player entity not found".to_string());
+ };
+
+ let world = state_lock.world.as_mut().unwrap();
+ world.move_entity(player_id, new_pos)?;
+
self.conn
.lock()
.await
.write(
ServerboundMovePlayerPacketPosRot {
- x: pos.x,
- y: pos.y,
- z: pos.z,
+ x: new_pos.x,
+ y: new_pos.y,
+ z: new_pos.z,
x_rot: 0.0,
y_rot: 0.0,
on_ground: false,
@@ -20,5 +34,7 @@ impl Client {
.get(),
)
.await;
+
+ Ok(())
}
}