aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/plugins
diff options
context:
space:
mode:
authormat <git@matdoes.dev>2025-04-15 22:04:43 -0430
committermat <git@matdoes.dev>2025-04-15 22:04:43 -0430
commita9820dfd79bf24a0a6fcb2345aad6c79a21585a5 (patch)
treea8e6290707fee0e1b18812aba599da74e7fc6eed /azalea-client/src/plugins
parent1a0c4e2de9e6d82d5efdfac2bab17a73c79fc466 (diff)
downloadazalea-drasl-a9820dfd79bf24a0a6fcb2345aad6c79a21585a5.tar.xz
make goto async and clean up some examples
Diffstat (limited to 'azalea-client/src/plugins')
-rw-r--r--azalea-client/src/plugins/mod.rs1
-rw-r--r--azalea-client/src/plugins/tick_broadcast.rs45
2 files changed, 46 insertions, 0 deletions
diff --git a/azalea-client/src/plugins/mod.rs b/azalea-client/src/plugins/mod.rs
index b5005b22..3b047ccb 100644
--- a/azalea-client/src/plugins/mod.rs
+++ b/azalea-client/src/plugins/mod.rs
@@ -12,4 +12,5 @@ pub mod packet;
pub mod pong;
pub mod respawn;
pub mod task_pool;
+pub mod tick_broadcast;
pub mod tick_end;
diff --git a/azalea-client/src/plugins/tick_broadcast.rs b/azalea-client/src/plugins/tick_broadcast.rs
new file mode 100644
index 00000000..161413d8
--- /dev/null
+++ b/azalea-client/src/plugins/tick_broadcast.rs
@@ -0,0 +1,45 @@
+use azalea_core::tick::GameTick;
+use bevy_app::prelude::*;
+use bevy_ecs::prelude::*;
+use derive_more::Deref;
+use tokio::sync::broadcast;
+
+/// A resource that contains a [`broadcast::Sender`] that will be sent every
+/// Minecraft tick.
+///
+/// This is useful for running code every schedule from async user code.
+///
+/// ```
+/// use azalea_client::TickBroadcast;
+/// # async fn example(client: azalea_client::Client) {
+/// let mut receiver = {
+/// let ecs = client.ecs.lock();
+/// let tick_broadcast = ecs.resource::<TickBroadcast>();
+/// tick_broadcast.subscribe()
+/// };
+/// while receiver.recv().await.is_ok() {
+/// // do something
+/// }
+/// # }
+/// ```
+#[derive(Resource, Deref)]
+pub struct TickBroadcast(broadcast::Sender<()>);
+#[derive(Resource, Deref)]
+pub struct UpdateBroadcast(broadcast::Sender<()>);
+
+pub fn send_tick_broadcast(tick_broadcast: ResMut<TickBroadcast>) {
+ let _ = tick_broadcast.0.send(());
+}
+pub fn send_update_broadcast(update_broadcast: ResMut<UpdateBroadcast>) {
+ let _ = update_broadcast.0.send(());
+}
+/// A plugin that makes the [`RanScheduleBroadcast`] resource available.
+pub struct TickBroadcastPlugin;
+impl Plugin for TickBroadcastPlugin {
+ fn build(&self, app: &mut App) {
+ app.insert_resource(TickBroadcast(broadcast::channel(1).0))
+ .insert_resource(UpdateBroadcast(broadcast::channel(1).0))
+ .add_systems(GameTick, send_tick_broadcast)
+ .add_systems(Update, send_update_broadcast);
+ }
+}