diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2023-02-26 15:07:52 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-26 15:07:52 -0600 |
| commit | cbc6af81fbdee71f4c1c7d62e1b91f8b17ad23bd (patch) | |
| tree | eb9c19c4b5e3489a8ff1fd304c49d051f18c35d9 /azalea-client/src/events.rs | |
| parent | c1588ef66e844c067112ea880a54b4de9ec5a062 (diff) | |
| download | azalea-drasl-cbc6af81fbdee71f4c1c7d62e1b91f8b17ad23bd.tar.xz | |
Add PacketEvent (#75)
* add PacketEvent
* docs and fixes
* Event::Packet works
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(); } } |
