@@ -17,41 +17,44 @@ pub fn connection_killer(
1717 state : Res < GlobalStateResource > ,
1818) {
1919 while let Some ( ( disconnecting_entity, reason) ) = state. 0 . players . disconnection_queue . pop ( ) {
20- for ( entity, conn, player_identity, mut disconnect_handle) in query. iter_mut ( ) {
21- if disconnecting_entity == entity {
22- info ! (
23- "Player {} ({}) disconnected: {}" ,
24- player_identity. username,
25- player_identity. uuid,
26- reason. as_deref( ) . unwrap_or( "No reason" )
27- ) ;
28- if conn. running . load ( std:: sync:: atomic:: Ordering :: Relaxed ) {
29- trace ! (
30- "Sending disconnect packet to player {}" ,
31- player_identity. username
32- ) ;
33- if let Err ( e) = conn. send_packet_ref (
34- & ferrumc_net:: packets:: outgoing:: disconnect:: DisconnectPacket {
35- reason : TextComponent :: from (
36- reason. as_deref ( ) . unwrap_or ( "Disconnected" ) ,
37- ) ,
38- } ,
39- ) {
40- warn ! (
41- "Failed to send disconnect packet to player {}: {:?}" ,
42- player_identity. username, e
20+ let entity_result = query. get ( disconnecting_entity) ;
21+ match entity_result {
22+ Ok ( disconnecting_player) => {
23+ for ( entity, conn, player_identity, mut disconnect_handle) in query. iter_mut ( ) {
24+ if disconnecting_entity == entity {
25+ info ! (
26+ "Player {} ({}) disconnected: {}" ,
27+ player_identity. username,
28+ player_identity. uuid,
29+ reason. as_deref( ) . unwrap_or( "No reason" )
4330 ) ;
44- }
45- if let Some ( sender) = disconnect_handle. sender . take ( ) {
46- if let Err ( _) = sender. send ( ( ) ) {
47- trace ! ( "Failed to send disconnect signal (receiver already dropped)" ) ;
48- }
49- }
50- } else {
51- trace ! (
52- "Connection for player {} is not running, skipping disconnect packet" ,
53- player_identity. username
54- ) ;
31+ if conn. running . load ( std:: sync:: atomic:: Ordering :: Relaxed ) {
32+ trace ! (
33+ "Sending disconnect packet to player {}" ,
34+ player_identity. username
35+ ) ;
36+ if let Err ( e) = conn. send_packet_ref (
37+ & ferrumc_net:: packets:: outgoing:: disconnect:: DisconnectPacket {
38+ reason : TextComponent :: from (
39+ reason. as_deref ( ) . unwrap_or ( "Disconnected" ) ,
40+ ) ,
41+ } ,
42+ ) {
43+ warn ! (
44+ "Failed to send disconnect packet to player {}: {:?}" ,
45+ player_identity. username, e
46+ ) ;
47+ }
48+ if let Some ( sender) = disconnect_handle. sender . take ( ) {
49+ if let Err ( _) = sender. send ( ( ) ) {
50+ trace ! ( "Failed to send disconnect signal (receiver already dropped)" ) ;
51+ }
52+ }
53+ } else {
54+ trace ! (
55+ "Connection for player {} is not running, skipping disconnect packet" ,
56+ player_identity. username
57+ ) ;
5558 }
5659 } else {
5760 system_messages:: player_leave:: handle ( disconnecting_player. 2 , entity) ;
0 commit comments