diff options
Diffstat (limited to 'azalea-client/src/events.rs')
| -rw-r--r-- | azalea-client/src/events.rs | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/azalea-client/src/events.rs b/azalea-client/src/events.rs index 99a47fbe..085f5368 100644 --- a/azalea-client/src/events.rs +++ b/azalea-client/src/events.rs @@ -7,7 +7,7 @@ use azalea_ecs::{ app::{App, Plugin}, component::Component, event::EventReader, - query::{Added, Changed}, + query::Added, system::Query, AppTickExt, }; @@ -21,7 +21,7 @@ use tokio::sync::mpsc; use crate::{ chat::{ChatPacket, ChatReceivedEvent}, packet_handling::{ - AddPlayerEvent, DeathEvent, KeepAliveEvent, PacketReceiver, RemovePlayerEvent, + AddPlayerEvent, DeathEvent, KeepAliveEvent, PacketEvent, RemovePlayerEvent, UpdatePlayerEvent, }, PlayerInfo, @@ -62,6 +62,23 @@ pub enum Event { Chat(ChatPacket), /// Happens 20 times per second, but only when the world is loaded. Tick, + /// We received a packet from the server. + /// + /// ``` + /// # use azalea_client::Event; + /// # use azalea_protocol::packets::game::ClientboundGamePacket; + /// # async fn example(event: Event) { + /// # match event { + /// Event::Packet(packet) => match *packet { + /// ClientboundGamePacket::Login(_) => { + /// println!("login packet"); + /// } + /// _ => {} + /// }, + /// # _ => {} + /// # } + /// # } + /// ``` Packet(Arc<ClientboundGamePacket>), /// A player joined the game (or more specifically, was added to the tab /// list). @@ -133,13 +150,14 @@ fn tick_listener(query: Query<&LocalPlayerEvents>) { } } -fn packet_listener(query: Query<(&LocalPlayerEvents, &PacketReceiver), Changed<PacketReceiver>>) { - for (local_player_events, packet_receiver) in &query { - for packet in packet_receiver.packets.lock().iter() { - local_player_events - .send(Event::Packet(packet.clone().into())) - .unwrap(); - } +fn packet_listener(query: Query<&LocalPlayerEvents>, mut events: EventReader<PacketEvent>) { + for event in events.iter() { + let local_player_events = query + .get(event.entity) + .expect("Non-localplayer entities shouldn't be able to receive add player events"); + local_player_events + .send(Event::Packet(Arc::new(event.packet.clone()))) + .unwrap(); } } |
