aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src/events.rs
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2023-02-26 15:07:52 -0600
committerGitHub <noreply@github.com>2023-02-26 15:07:52 -0600
commitcbc6af81fbdee71f4c1c7d62e1b91f8b17ad23bd (patch)
treeeb9c19c4b5e3489a8ff1fd304c49d051f18c35d9 /azalea-client/src/events.rs
parentc1588ef66e844c067112ea880a54b4de9ec5a062 (diff)
downloadazalea-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.rs36
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();
}
}