mirror of
https://github.com/mat-1/azalea.git
synced 2024-09-19 14:42:32 +00:00
addd disconnect reason (#114)
This commit is contained in:
parent
d21e496bc3
commit
fbee81e609
5 changed files with 18 additions and 3 deletions
|
@ -422,6 +422,7 @@ impl Client {
|
|||
pub fn disconnect(&self) {
|
||||
self.ecs.lock().send_event(DisconnectEvent {
|
||||
entity: self.entity,
|
||||
reason: None,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ impl Plugin for DisconnectPlugin {
|
|||
#[derive(Event)]
|
||||
pub struct DisconnectEvent {
|
||||
pub entity: Entity,
|
||||
pub reason: Option<String>,
|
||||
}
|
||||
|
||||
/// System that removes the [`JoinedClientBundle`] from the entity when it
|
||||
|
@ -41,7 +42,7 @@ pub fn remove_components_from_disconnected_players(
|
|||
mut commands: Commands,
|
||||
mut events: EventReader<DisconnectEvent>,
|
||||
) {
|
||||
for DisconnectEvent { entity } in events.read() {
|
||||
for DisconnectEvent { entity, .. } in events.read() {
|
||||
commands.entity(*entity).remove::<JoinedClientBundle>();
|
||||
}
|
||||
}
|
||||
|
@ -64,7 +65,7 @@ fn disconnect_on_connection_dead(
|
|||
) {
|
||||
for (entity, &is_connection_alive) in &query {
|
||||
if !*is_connection_alive {
|
||||
disconnect_events.send(DisconnectEvent { entity });
|
||||
disconnect_events.send(DisconnectEvent { entity, reason: None });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@ use crate::{
|
|||
AddPlayerEvent, DeathEvent, KeepAliveEvent, PacketEvent, RemovePlayerEvent,
|
||||
UpdatePlayerEvent,
|
||||
},
|
||||
PlayerInfo,
|
||||
PlayerInfo, disconnect::DisconnectEvent,
|
||||
};
|
||||
|
||||
// (for contributors):
|
||||
|
@ -93,6 +93,8 @@ pub enum Event {
|
|||
Death(Option<Arc<ClientboundPlayerCombatKillPacket>>),
|
||||
/// A `KeepAlive` packet was sent by the server.
|
||||
KeepAlive(u64),
|
||||
/// The client disconnected from the server.
|
||||
Disconnect(Option<String>),
|
||||
}
|
||||
|
||||
/// A component that contains an event sender for events that are only
|
||||
|
@ -117,6 +119,7 @@ impl Plugin for EventPlugin {
|
|||
remove_player_listener,
|
||||
keepalive_listener,
|
||||
death_listener,
|
||||
disconnect_listener,
|
||||
),
|
||||
)
|
||||
.add_systems(
|
||||
|
@ -229,3 +232,11 @@ fn keepalive_listener(query: Query<&LocalPlayerEvents>, mut events: EventReader<
|
|||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
fn disconnect_listener(query: Query<&LocalPlayerEvents>, mut events: EventReader<DisconnectEvent>) {
|
||||
for event in events.read() {
|
||||
if let Ok(local_player_events) = query.get(event.entity) {
|
||||
let _ = local_player_events.send(Event::Disconnect(event.reason.clone()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,6 +104,7 @@ pub fn process_packet_events(ecs: &mut World) {
|
|||
let mut disconnect_events = system_state.get_mut(ecs);
|
||||
disconnect_events.send(DisconnectEvent {
|
||||
entity: player_entity,
|
||||
reason: Some(p.reason.to_ansi()),
|
||||
});
|
||||
}
|
||||
ClientboundConfigurationPacket::FinishConfiguration(p) => {
|
||||
|
|
|
@ -401,6 +401,7 @@ pub fn process_packet_events(ecs: &mut World) {
|
|||
let mut disconnect_events = system_state.get_mut(ecs);
|
||||
disconnect_events.send(DisconnectEvent {
|
||||
entity: player_entity,
|
||||
reason: Some(p.reason.to_ansi()),
|
||||
});
|
||||
}
|
||||
ClientboundGamePacket::UpdateRecipes(_p) => {
|
||||
|
|
Loading…
Reference in a new issue