mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +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) {
|
pub fn disconnect(&self) {
|
||||||
self.ecs.lock().send_event(DisconnectEvent {
|
self.ecs.lock().send_event(DisconnectEvent {
|
||||||
entity: self.entity,
|
entity: self.entity,
|
||||||
|
reason: None,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ impl Plugin for DisconnectPlugin {
|
||||||
#[derive(Event)]
|
#[derive(Event)]
|
||||||
pub struct DisconnectEvent {
|
pub struct DisconnectEvent {
|
||||||
pub entity: Entity,
|
pub entity: Entity,
|
||||||
|
pub reason: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// System that removes the [`JoinedClientBundle`] from the entity when it
|
/// 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 commands: Commands,
|
||||||
mut events: EventReader<DisconnectEvent>,
|
mut events: EventReader<DisconnectEvent>,
|
||||||
) {
|
) {
|
||||||
for DisconnectEvent { entity } in events.read() {
|
for DisconnectEvent { entity, .. } in events.read() {
|
||||||
commands.entity(*entity).remove::<JoinedClientBundle>();
|
commands.entity(*entity).remove::<JoinedClientBundle>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,7 +65,7 @@ fn disconnect_on_connection_dead(
|
||||||
) {
|
) {
|
||||||
for (entity, &is_connection_alive) in &query {
|
for (entity, &is_connection_alive) in &query {
|
||||||
if !*is_connection_alive {
|
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,
|
AddPlayerEvent, DeathEvent, KeepAliveEvent, PacketEvent, RemovePlayerEvent,
|
||||||
UpdatePlayerEvent,
|
UpdatePlayerEvent,
|
||||||
},
|
},
|
||||||
PlayerInfo,
|
PlayerInfo, disconnect::DisconnectEvent,
|
||||||
};
|
};
|
||||||
|
|
||||||
// (for contributors):
|
// (for contributors):
|
||||||
|
@ -93,6 +93,8 @@ pub enum Event {
|
||||||
Death(Option<Arc<ClientboundPlayerCombatKillPacket>>),
|
Death(Option<Arc<ClientboundPlayerCombatKillPacket>>),
|
||||||
/// A `KeepAlive` packet was sent by the server.
|
/// A `KeepAlive` packet was sent by the server.
|
||||||
KeepAlive(u64),
|
KeepAlive(u64),
|
||||||
|
/// The client disconnected from the server.
|
||||||
|
Disconnect(Option<String>),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A component that contains an event sender for events that are only
|
/// A component that contains an event sender for events that are only
|
||||||
|
@ -117,6 +119,7 @@ impl Plugin for EventPlugin {
|
||||||
remove_player_listener,
|
remove_player_listener,
|
||||||
keepalive_listener,
|
keepalive_listener,
|
||||||
death_listener,
|
death_listener,
|
||||||
|
disconnect_listener,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
|
@ -229,3 +232,11 @@ fn keepalive_listener(query: Query<&LocalPlayerEvents>, mut events: EventReader<
|
||||||
.unwrap();
|
.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);
|
let mut disconnect_events = system_state.get_mut(ecs);
|
||||||
disconnect_events.send(DisconnectEvent {
|
disconnect_events.send(DisconnectEvent {
|
||||||
entity: player_entity,
|
entity: player_entity,
|
||||||
|
reason: Some(p.reason.to_ansi()),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ClientboundConfigurationPacket::FinishConfiguration(p) => {
|
ClientboundConfigurationPacket::FinishConfiguration(p) => {
|
||||||
|
|
|
@ -401,6 +401,7 @@ pub fn process_packet_events(ecs: &mut World) {
|
||||||
let mut disconnect_events = system_state.get_mut(ecs);
|
let mut disconnect_events = system_state.get_mut(ecs);
|
||||||
disconnect_events.send(DisconnectEvent {
|
disconnect_events.send(DisconnectEvent {
|
||||||
entity: player_entity,
|
entity: player_entity,
|
||||||
|
reason: Some(p.reason.to_ansi()),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
ClientboundGamePacket::UpdateRecipes(_p) => {
|
ClientboundGamePacket::UpdateRecipes(_p) => {
|
||||||
|
|
Loading…
Add table
Reference in a new issue