aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2023-02-21 22:21:43 -0600
committermat <github@matdoes.dev>2023-02-21 22:21:43 -0600
commitc52cee3a6943c91d834c19569789ca1827a49e09 (patch)
tree890f34b8889ca67e7def9a91f9f3a598419f6c83
parent48640ca303784a3761dabc7436cd96ac93db279b (diff)
downloadazalea-drasl-c52cee3a6943c91d834c19569789ca1827a49e09.tar.xz
don't keep firing disconnectevent
-rw-r--r--azalea-client/src/disconnect.rs27
1 files changed, 24 insertions, 3 deletions
diff --git a/azalea-client/src/disconnect.rs b/azalea-client/src/disconnect.rs
index e01ffe1b..fdd1efaf 100644
--- a/azalea-client/src/disconnect.rs
+++ b/azalea-client/src/disconnect.rs
@@ -2,11 +2,15 @@
use azalea_ecs::{
app::{App, CoreStage, Plugin},
+ component::{BevyComponent, Component},
entity::Entity,
event::{EventReader, EventWriter},
+ query::Changed,
+ schedule::IntoSystemDescriptor,
system::{Commands, Query},
AppTickExt,
};
+use derive_more::Deref;
use crate::{client::JoinedClientBundle, LocalPlayer};
@@ -15,6 +19,9 @@ impl Plugin for DisconnectPlugin {
fn build(&self, app: &mut App) {
app.add_event::<DisconnectEvent>()
.add_system_to_stage(CoreStage::PostUpdate, handle_disconnect)
+ .add_tick_system(
+ update_read_packets_task_running_component.before(disconnect_on_read_packets_ended),
+ )
.add_tick_system(disconnect_on_read_packets_ended);
}
}
@@ -32,12 +39,26 @@ pub fn handle_disconnect(mut commands: Commands, mut events: EventReader<Disconn
}
}
-fn disconnect_on_read_packets_ended(
+#[derive(Component, Clone, Copy, Debug, Deref)]
+pub struct ReadPacketsTaskRunning(bool);
+
+fn update_read_packets_task_running_component(
+ mut commands: Commands,
local_player: Query<(Entity, &LocalPlayer)>,
- mut disconnect_events: EventWriter<DisconnectEvent>,
) {
for (entity, local_player) in &local_player {
- if local_player.read_packets_task.is_finished() {
+ let running = !local_player.read_packets_task.is_finished();
+ commands
+ .entity(entity)
+ .insert(ReadPacketsTaskRunning(running));
+ }
+}
+fn disconnect_on_read_packets_ended(
+ local_player: Query<(Entity, &ReadPacketsTaskRunning), Changed<ReadPacketsTaskRunning>>,
+ mut disconnect_events: EventWriter<DisconnectEvent>,
+) {
+ for (entity, &read_packets_task_running) in &local_player {
+ if *read_packets_task_running {
disconnect_events.send(DisconnectEvent { entity });
}
}