Skip to content

Commit 357eb8a

Browse files
authored
Merge pull request #219 from Sunnickel/fix/fix-disconnect
fix: disconnect bug
2 parents d1f87bd + 51a289d commit 357eb8a

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

src/bin/src/packet_handlers/play_packets/set_player_position.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use bevy_ecs::prelude::{Entity, EventWriter, Query, Res};
22
use ferrumc_core::chunks::cross_chunk_boundary_event::CrossChunkBoundaryEvent;
33
use ferrumc_core::identity::player_identity::PlayerIdentity;
44
use ferrumc_net::SetPlayerPositionPacketReceiver;
5+
use std::sync::atomic::Ordering;
56
use tracing::{debug, error, trace, warn};
67

78
use crate::errors::BinaryError;
@@ -151,7 +152,7 @@ fn update_pos_for_all(
151152
};
152153

153154
for (entity, conn) in conn_query.iter() {
154-
if !state.players.is_connected(entity) {
155+
if !state.players.is_connected(entity) || !conn.running.load(Ordering::Relaxed) {
155156
warn!(
156157
"Player {} is not connected, skipping position update",
157158
entity
@@ -161,6 +162,9 @@ fn update_pos_for_all(
161162
let v = player_l.value();
162163
debug!("Player list: {} - {}", k, v.1);
163164
}
165+
state
166+
.players
167+
.disconnect(entity, Some(String::from("Player not connected anymore.")));
164168
continue;
165169
}
166170
conn.send_packet_ref(&packet)?;

src/bin/src/packet_handlers/player/head_rot.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ pub fn handle_player_move(
1616
for event in events.read() {
1717
let entity = event.entity;
1818

19-
let (rot, identity) = query.get(entity).unwrap();
19+
let Ok((rot, identity)) = query.get(entity) else {
20+
continue;
21+
};
22+
2023
let head_rot_packet = SetHeadRotationPacket::new(
2124
identity.uuid.as_u128() as i32,
2225
NetAngle::from_degrees(rot.yaw as f64),

src/bin/src/systems/connection_killer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ pub fn connection_killer(
4242
player_identity.username
4343
);
4444
}
45+
cmd.entity(entity).despawn();
4546
} else {
4647
// Broadcast the disconnection to other players
4748
}
48-
cmd.entity(entity).despawn();
4949
}
5050
}
5151
}

0 commit comments

Comments
 (0)