aboutsummaryrefslogtreecommitdiff
path: root/azalea/src/bot.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-10-23 16:51:49 -0500
committermat <github@matdoes.dev>2022-10-23 16:51:49 -0500
commit2eade86cf7a12a6ec64496aedbfc3d3a3bd44e1a (patch)
treec010d3f02beaec29741b723a1bc6e7eaad59e193 /azalea/src/bot.rs
parenta9ff79a10553026b0fa32f0e31f1e0442467ca78 (diff)
downloadazalea-drasl-2eade86cf7a12a6ec64496aedbfc3d3a3bd44e1a.tar.xz
make `handle` cleaner
Arc<Event> -> Event, Arc<Mutex<State>> -> State Items in State now need to have interior mutability (i.e. Arc<Mutex<T>>), but it's a worthwhile tradeoff since it allows the user to customize it for each field
Diffstat (limited to 'azalea/src/bot.rs')
-rw-r--r--azalea/src/bot.rs19
1 files changed, 9 insertions, 10 deletions
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<Mutex<State>>,
+ pub state: State,
}
-#[derive(Default)]
+#[derive(Default, Clone)]
pub struct State {
- jumping_once: bool,
+ jumping_once: Arc<Mutex<bool>>,
}
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<Self>, event: Arc<Event>, mut bot: Client) {
- if let Event::Tick = *event {
- let mut state = self.state.lock();
- if state.jumping_once {
+ async fn handle(self: Box<Self>, 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);
}