valence_advancement/
event.rs
1use bevy_ecs::prelude::*;
2use valence_server::event_loop::PacketEvent;
3use valence_server::protocol::packets::play::AdvancementTabC2s;
4use valence_server::Ident;
5
6#[derive(Event, Clone, PartialEq, Eq, Debug)]
8pub struct AdvancementTabChangeEvent {
9 pub client: Entity,
10 pub opened_tab: Option<Ident<String>>,
12}
13
14pub(crate) fn handle_advancement_tab_change(
15 mut packets: EventReader<PacketEvent>,
16 mut advancement_tab_change_events: EventWriter<AdvancementTabChangeEvent>,
17) {
18 for packet in packets.read() {
19 if let Some(pkt) = packet.decode::<AdvancementTabC2s>() {
20 advancement_tab_change_events.send(AdvancementTabChangeEvent {
21 client: packet.client,
22 opened_tab: match pkt {
23 AdvancementTabC2s::ClosedScreen => None,
24 AdvancementTabC2s::OpenedTab { tab_id } => Some(tab_id.into()),
25 },
26 });
27 }
28 }
29}