azalea_client/packet_handling/
mod.rs1use azalea_entity::{metadata::Health, EntityUpdateSet};
2use bevy_app::{App, First, Plugin, PreUpdate, Update};
3use bevy_ecs::prelude::*;
4
5use self::{
6 game::{
7 AddPlayerEvent, DeathEvent, InstanceLoadedEvent, KeepAliveEvent, RemovePlayerEvent,
8 ResourcePackEvent, UpdatePlayerEvent,
9 },
10 login::{LoginPacketEvent, SendLoginPacketEvent},
11};
12use crate::{chat::ChatReceivedEvent, events::death_listener};
13
14pub mod configuration;
15pub mod game;
16pub mod login;
17
18pub struct PacketHandlerPlugin;
19
20pub fn death_event_on_0_health(
21 query: Query<(Entity, &Health), Changed<Health>>,
22 mut death_events: EventWriter<DeathEvent>,
23) {
24 for (entity, health) in query.iter() {
25 if **health == 0. {
26 death_events.send(DeathEvent {
27 entity,
28 packet: None,
29 });
30 }
31 }
32}
33
34impl Plugin for PacketHandlerPlugin {
35 fn build(&self, app: &mut App) {
36 app.add_systems(
37 First,
38 (game::send_packet_events, configuration::send_packet_events),
39 )
40 .add_systems(
41 PreUpdate,
42 (
43 game::process_packet_events
44 .before(EntityUpdateSet::Deindex),
46 configuration::process_packet_events,
47 login::handle_send_packet_event,
48 login::process_packet_events,
49 ),
50 )
51 .add_systems(
52 Update,
53 (
54 (
55 configuration::handle_send_packet_event,
56 game::handle_send_packet_event,
57 )
58 .chain(),
59 death_event_on_0_health.before(death_listener),
60 ),
61 )
62 .init_resource::<Events<game::PacketEvent>>()
64 .init_resource::<Events<configuration::ConfigurationEvent>>()
65 .add_event::<game::SendPacketEvent>()
66 .add_event::<configuration::SendConfigurationEvent>()
67 .add_event::<AddPlayerEvent>()
68 .add_event::<RemovePlayerEvent>()
69 .add_event::<UpdatePlayerEvent>()
70 .add_event::<ChatReceivedEvent>()
71 .add_event::<DeathEvent>()
72 .add_event::<KeepAliveEvent>()
73 .add_event::<ResourcePackEvent>()
74 .add_event::<InstanceLoadedEvent>()
75 .add_event::<LoginPacketEvent>()
76 .add_event::<SendLoginPacketEvent>();
77 }
78}