From 324cb2d6d86905137c5516074c059d48a864b110 Mon Sep 17 00:00:00 2001 From: ErrorNoInternet Date: Tue, 18 Feb 2025 21:34:57 -0500 Subject: [PATCH] refactor(client): make more methods async --- src/lua/client/interaction.rs | 18 +++++++++++++++--- src/lua/client/mod.rs | 4 ++-- src/lua/client/movement.rs | 20 +++++++++++++++++--- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/lua/client/interaction.rs b/src/lua/client/interaction.rs index bd0c024..3090038 100644 --- a/src/lua/client/interaction.rs +++ b/src/lua/client/interaction.rs @@ -1,9 +1,21 @@ use super::{Client, Vec3}; -use azalea::{BlockPos, BotClientExt, world::MinecraftEntityId}; +use azalea::{BlockPos, BotClientExt, attack::AttackEvent, world::MinecraftEntityId}; use mlua::{Lua, Result, UserDataRef}; -pub fn attack(_lua: &Lua, client: &mut Client, entity_id: u32) -> Result<()> { - client.attack(MinecraftEntityId(entity_id)); +pub async fn attack(_lua: Lua, client: UserDataRef, entity_id: u32) -> Result<()> { + client.clone().attack(MinecraftEntityId(entity_id)); + + while client.get_tick_broadcaster().recv().await.is_ok() { + if client + .ecs + .lock() + .get::(client.entity) + .is_none() + { + break; + } + } + Ok(()) } diff --git a/src/lua/client/mod.rs b/src/lua/client/mod.rs index 9137832..717ad4f 100644 --- a/src/lua/client/mod.rs +++ b/src/lua/client/mod.rs @@ -55,7 +55,9 @@ impl UserData for Client { } fn add_methods>(m: &mut M) { + m.add_async_method("attack", interaction::attack); m.add_async_method("goto", movement::goto); + m.add_async_method("look_at", movement::look_at); m.add_async_method("mine", interaction::mine); m.add_async_method("open_container_at", container::open_container_at); m.add_async_method("set_client_information", state::set_client_information); @@ -69,10 +71,8 @@ impl UserData for Client { m.add_method("set_held_slot", container::set_held_slot); m.add_method("set_mining", interaction::set_mining); m.add_method("stop_pathfinding", movement::stop_pathfinding); - m.add_method_mut("attack", interaction::attack); m.add_method_mut("block_interact", interaction::block_interact); m.add_method_mut("jump", movement::jump); - m.add_method_mut("look_at", movement::look_at); m.add_method_mut("open_inventory", container::open_inventory); m.add_method_mut("set_direction", movement::set_direction); m.add_method_mut("set_jumping", movement::set_jumping); diff --git a/src/lua/client/movement.rs b/src/lua/client/movement.rs index 1c853b3..ad6de42 100644 --- a/src/lua/client/movement.rs +++ b/src/lua/client/movement.rs @@ -1,6 +1,6 @@ use super::{Client, Direction, Vec3}; use azalea::{ - BlockPos, BotClientExt, SprintDirection, WalkDirection, + BlockPos, BotClientExt, LookAtEvent, SprintDirection, WalkDirection, interact::HitResultComponent, pathfinder::{ ExecutingPath, GotoEvent, Pathfinder, PathfinderClientExt, @@ -137,8 +137,22 @@ pub fn looking_at(lua: &Lua, client: &Client) -> Result> { }) } -pub fn look_at(_lua: &Lua, client: &mut Client, position: Vec3) -> Result<()> { - client.look_at(azalea::Vec3::new(position.x, position.y, position.z)); +pub async fn look_at(_lua: Lua, client: UserDataRef, position: Vec3) -> Result<()> { + client + .clone() + .look_at(azalea::Vec3::new(position.x, position.y, position.z)); + + while client.get_tick_broadcaster().recv().await.is_ok() { + if client + .ecs + .lock() + .get::(client.entity) + .is_none() + { + break; + } + } + Ok(()) }