Skip to main content

chunkedge_server/
status.rs

1use bevy_app::prelude::*;
2use bevy_ecs::prelude::*;
3use chunkedge_protocol::packets::play::ClientCommandC2s;
4
5use crate::event_loop::{EventLoopPreUpdate, PacketMessage};
6
7pub struct StatusPlugin;
8
9impl Plugin for StatusPlugin {
10    fn build(&self, app: &mut App) {
11        app.add_message::<RequestRespawnMessage>()
12            .add_message::<RequestStatsMessage>()
13            .add_systems(EventLoopPreUpdate, handle_status);
14    }
15}
16
17#[derive(Message, Copy, Clone, PartialEq, Eq, Debug)]
18pub struct RequestRespawnMessage {
19    pub client: Entity,
20}
21
22#[derive(Message, Copy, Clone, PartialEq, Eq, Debug)]
23pub struct RequestStatsMessage {
24    pub client: Entity,
25}
26
27fn handle_status(
28    mut packets: MessageReader<PacketMessage>,
29    mut respawn_messages: MessageWriter<RequestRespawnMessage>,
30    mut request_stats_messages: MessageWriter<RequestStatsMessage>,
31) {
32    for packet in packets.read() {
33        if let Some(pkt) = packet.decode::<ClientCommandC2s>() {
34            match pkt {
35                ClientCommandC2s::PerformRespawn => {
36                    respawn_messages.write(RequestRespawnMessage {
37                        client: packet.client,
38                    });
39                }
40                ClientCommandC2s::RequestStats => {
41                    request_stats_messages.write(RequestStatsMessage {
42                        client: packet.client,
43                    });
44                }
45            }
46        }
47    }
48}