aboutsummaryrefslogtreecommitdiff
path: root/azalea/src
diff options
context:
space:
mode:
Diffstat (limited to 'azalea/src')
-rw-r--r--azalea/src/swarm/mod.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/azalea/src/swarm/mod.rs b/azalea/src/swarm/mod.rs
index 18c92438..af381c0b 100644
--- a/azalea/src/swarm/mod.rs
+++ b/azalea/src/swarm/mod.rs
@@ -387,12 +387,19 @@ where
});
// bot events
- while let Some((Some(event), bot)) = bots_rx.recv().await {
+ while let Some((Some(first_event), first_bot)) = bots_rx.recv().await {
if let Some(handler) = &self.handler {
- let state = bot.component::<S>();
- tokio::spawn((handler)(bot, event, state.clone()));
+ let first_bot_state = first_bot.component::<S>();
+ let first_bot_entity = first_bot.entity;
+ tokio::spawn((handler)(first_bot, first_event, first_bot_state.clone()));
+
// this makes it not have to keep locking the ecs
+ let mut states = HashMap::new();
+ states.insert(first_bot_entity, first_bot_state);
while let Ok((Some(event), bot)) = bots_rx.try_recv() {
+ let state = states
+ .entry(bot.entity)
+ .or_insert_with(|| bot.component::<S>().clone());
tokio::spawn((handler)(bot, event, state.clone()));
}
}