From c52cee3a6943c91d834c19569789ca1827a49e09 Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 21 Feb 2023 22:21:43 -0600 Subject: [PATCH] don't keep firing disconnectevent --- azalea-client/src/disconnect.rs | 27 ++++++++++++++++++++++++--- 1 file 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::() .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, - mut disconnect_events: EventWriter, ) { 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>, + mut disconnect_events: EventWriter, +) { + for (entity, &read_packets_task_running) in &local_player { + if *read_packets_task_running { disconnect_events.send(DisconnectEvent { entity }); } }