From 2eade86cf7a12a6ec64496aedbfc3d3a3bd44e1a Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 23 Oct 2022 16:51:49 -0500 Subject: make `handle` cleaner Arc -> Event, Arc> -> State Items in State now need to have interior mutability (i.e. Arc>), but it's a worthwhile tradeoff since it allows the user to customize it for each field --- azalea/src/bot.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'azalea/src/bot.rs') diff --git a/azalea/src/bot.rs b/azalea/src/bot.rs index 26e35fda..566ab1e7 100644 --- a/azalea/src/bot.rs +++ b/azalea/src/bot.rs @@ -3,14 +3,14 @@ use async_trait::async_trait; use parking_lot::Mutex; use std::sync::Arc; -#[derive(Default)] +#[derive(Default, Clone)] pub struct Plugin { - pub state: Arc>, + pub state: State, } -#[derive(Default)] +#[derive(Default, Clone)] pub struct State { - jumping_once: bool, + jumping_once: Arc>, } pub trait BotTrait { @@ -18,7 +18,7 @@ pub trait BotTrait { } impl BotTrait for azalea_client::Client { - /// Try to jump next tick. + /// Queue a jump for the next tick. fn jump(&self) { let player_lock = self.player.lock(); let mut dimension_lock = self.dimension.lock(); @@ -33,12 +33,11 @@ impl BotTrait for azalea_client::Client { #[async_trait] impl crate::Plugin for Plugin { - async fn handle(self: Arc, event: Arc, mut bot: Client) { - if let Event::Tick = *event { - let mut state = self.state.lock(); - if state.jumping_once { + async fn handle(self: Box, event: Event, mut bot: Client) { + if let Event::Tick = event { + if *self.state.jumping_once.lock() { if bot.jumping() { - state.jumping_once = false; + *self.state.jumping_once.lock() = false; } else { bot.set_jumping(true); } -- cgit v1.2.3