aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-client/src')
-rw-r--r--azalea-client/src/client.rs42
-rw-r--r--azalea-client/src/lib.rs2
-rw-r--r--azalea-client/src/plugins/mod.rs1
-rw-r--r--azalea-client/src/plugins/tick_broadcast.rs45
4 files changed, 50 insertions, 40 deletions
diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs
index e13368eb..b8688b40 100644
--- a/azalea-client/src/client.rs
+++ b/azalea-client/src/client.rs
@@ -46,19 +46,15 @@ use bevy_ecs::{
component::Component,
entity::Entity,
schedule::{InternedScheduleLabel, IntoSystemConfigs, LogLevel, ScheduleBuildSettings},
- system::{ResMut, Resource},
+ system::Resource,
world::World,
};
use bevy_time::TimePlugin;
-use derive_more::Deref;
use parking_lot::{Mutex, RwLock};
use simdnbt::owned::NbtCompound;
use thiserror::Error;
use tokio::{
- sync::{
- broadcast,
- mpsc::{self, error::TrySendError},
- },
+ sync::mpsc::{self, error::TrySendError},
time,
};
use tracing::{debug, error, info};
@@ -88,6 +84,7 @@ use crate::{
raw_connection::RawConnection,
respawn::RespawnPlugin,
task_pool::TaskPoolPlugin,
+ tick_broadcast::TickBroadcastPlugin,
tick_end::TickEndPlugin,
};
@@ -1006,39 +1003,6 @@ pub async fn tick_run_schedule_loop(run_schedule_sender: mpsc::Sender<()>) {
}
}
-/// 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<()>);
-
-pub fn send_tick_broadcast(tick_broadcast: ResMut<TickBroadcast>) {
- let _ = tick_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))
- .add_systems(GameTick, send_tick_broadcast);
- }
-}
-
pub struct AmbiguityLoggerPlugin;
impl Plugin for AmbiguityLoggerPlugin {
fn build(&self, app: &mut App) {
diff --git a/azalea-client/src/lib.rs b/azalea-client/src/lib.rs
index e8f9db01..38b8f196 100644
--- a/azalea-client/src/lib.rs
+++ b/azalea-client/src/lib.rs
@@ -24,7 +24,7 @@ pub use account::{Account, AccountOpts};
pub use azalea_protocol::common::client_information::ClientInformation;
pub use client::{
Client, DefaultPlugins, InConfigState, InGameState, JoinError, JoinedClientBundle,
- LocalPlayerBundle, StartClientOpts, TickBroadcast, start_ecs_runner,
+ LocalPlayerBundle, StartClientOpts, start_ecs_runner,
};
pub use events::Event;
pub use local_player::{GameProfileComponent, Hunger, InstanceHolder, TabList};
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);
+ }
+}