aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/disconnect.rs
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2023-02-21 21:53:22 -0600
committermat <github@matdoes.dev>2023-02-21 21:53:22 -0600
commit48640ca303784a3761dabc7436cd96ac93db279b (patch)
tree0cbab5af69aa205f1f580e2eaec12fd8c4ec5f66 /azalea-client/src/disconnect.rs
parent66094921c88e80187a712dca39e421a648d69198 (diff)
downloadazalea-drasl-48640ca303784a3761dabc7436cd96ac93db279b.tar.xz
properly disconnect on ungraceful disconnect
Diffstat (limited to 'azalea-client/src/disconnect.rs')
-rw-r--r--azalea-client/src/disconnect.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/azalea-client/src/disconnect.rs b/azalea-client/src/disconnect.rs
index 100618c3..e01ffe1b 100644
--- a/azalea-client/src/disconnect.rs
+++ b/azalea-client/src/disconnect.rs
@@ -3,17 +3,19 @@
use azalea_ecs::{
app::{App, CoreStage, Plugin},
entity::Entity,
- event::EventReader,
- system::Commands,
+ event::{EventReader, EventWriter},
+ system::{Commands, Query},
+ AppTickExt,
};
-use crate::client::JoinedClientBundle;
+use crate::{client::JoinedClientBundle, LocalPlayer};
pub struct DisconnectPlugin;
impl Plugin for DisconnectPlugin {
fn build(&self, app: &mut App) {
app.add_event::<DisconnectEvent>()
- .add_system_to_stage(CoreStage::PostUpdate, handle_disconnect);
+ .add_system_to_stage(CoreStage::PostUpdate, handle_disconnect)
+ .add_tick_system(disconnect_on_read_packets_ended);
}
}
@@ -29,3 +31,14 @@ pub fn handle_disconnect(mut commands: Commands, mut events: EventReader<Disconn
commands.entity(*entity).remove::<JoinedClientBundle>();
}
}
+
+fn disconnect_on_read_packets_ended(
+ 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() {
+ disconnect_events.send(DisconnectEvent { entity });
+ }
+ }
+}