72 lines
1.9 KiB
Rust
72 lines
1.9 KiB
Rust
use super::{Client, Vec3};
|
|
use azalea::{
|
|
BlockPos, BotClientExt,
|
|
protocol::packets::game::{ServerboundUseItem, s_interact::InteractionHand},
|
|
world::MinecraftEntityId,
|
|
};
|
|
use log::error;
|
|
use mlua::{Lua, Result, UserDataRef};
|
|
|
|
pub fn attack(_lua: &Lua, client: &mut Client, entity_id: i32) -> Result<()> {
|
|
client.attack(MinecraftEntityId(entity_id));
|
|
Ok(())
|
|
}
|
|
|
|
pub fn block_interact(_lua: &Lua, client: &mut Client, position: Vec3) -> Result<()> {
|
|
#[allow(clippy::cast_possible_truncation)]
|
|
client.block_interact(BlockPos::new(
|
|
position.x as i32,
|
|
position.y as i32,
|
|
position.z as i32,
|
|
));
|
|
Ok(())
|
|
}
|
|
|
|
pub fn has_attack_cooldown(_lua: &Lua, client: &Client) -> Result<bool> {
|
|
Ok(client.has_attack_cooldown())
|
|
}
|
|
|
|
pub async fn mine(_lua: Lua, client: UserDataRef<Client>, position: Vec3) -> Result<()> {
|
|
#[allow(clippy::cast_possible_truncation)]
|
|
client
|
|
.clone()
|
|
.mine(BlockPos::new(
|
|
position.x as i32,
|
|
position.y as i32,
|
|
position.z as i32,
|
|
))
|
|
.await;
|
|
Ok(())
|
|
}
|
|
|
|
pub fn set_mining(_lua: &Lua, client: &Client, mining: bool) -> Result<()> {
|
|
client.left_click_mine(mining);
|
|
Ok(())
|
|
}
|
|
|
|
pub fn start_mining(_lua: &Lua, client: &mut Client, position: Vec3) -> Result<()> {
|
|
#[allow(clippy::cast_possible_truncation)]
|
|
client.start_mining(BlockPos::new(
|
|
position.x as i32,
|
|
position.y as i32,
|
|
position.z as i32,
|
|
));
|
|
Ok(())
|
|
}
|
|
|
|
pub fn use_item(_lua: &Lua, client: &Client, hand: Option<u8>) -> Result<()> {
|
|
let direction = client.direction();
|
|
if let Err(error) = client.write_packet(ServerboundUseItem {
|
|
hand: match hand {
|
|
Some(1) => InteractionHand::OffHand,
|
|
_ => InteractionHand::MainHand,
|
|
},
|
|
sequence: 0,
|
|
yaw: direction.0,
|
|
pitch: direction.1,
|
|
}) {
|
|
error!("failed to send UseItem packet: {error:?}");
|
|
}
|
|
Ok(())
|
|
}
|