chunkedge_server/
status.rs1use 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}