azalea/
accept_resource_packs.rs1use azalea_client::InConfigState;
2use azalea_client::chunks::handle_chunk_batch_finished_event;
3use azalea_client::inventory::InventorySet;
4use azalea_client::packet::config::SendConfigPacketEvent;
5use azalea_client::packet::game::SendPacketEvent;
6use azalea_client::packet::{death_event_on_0_health, game::ResourcePackEvent};
7use azalea_client::respawn::perform_respawn;
8use azalea_protocol::packets::config;
9use azalea_protocol::packets::game::s_resource_pack::{self, ServerboundResourcePack};
10use bevy_app::Update;
11use bevy_ecs::prelude::*;
12
13use crate::app::{App, Plugin};
14
15#[derive(Clone, Default)]
17pub struct AcceptResourcePacksPlugin;
18impl Plugin for AcceptResourcePacksPlugin {
19 fn build(&self, app: &mut App) {
20 app.add_systems(
21 Update,
22 accept_resource_pack
23 .before(perform_respawn)
24 .after(death_event_on_0_health)
25 .after(handle_chunk_batch_finished_event)
26 .after(InventorySet)
27 .after(azalea_client::brand::handle_end_login_state),
28 );
29 }
30}
31
32fn accept_resource_pack(
33 mut events: EventReader<ResourcePackEvent>,
34 mut commands: Commands,
35 query_in_config_state: Query<Option<&InConfigState>>,
36) {
37 for event in events.read() {
38 let Ok(in_config_state_option) = query_in_config_state.get(event.entity) else {
39 continue;
40 };
41
42 if in_config_state_option.is_some() {
43 commands.trigger(SendConfigPacketEvent::new(
44 event.entity,
45 config::ServerboundResourcePack {
46 id: event.id,
47 action: config::s_resource_pack::Action::Accepted,
48 },
49 ));
50 commands.trigger(SendConfigPacketEvent::new(
51 event.entity,
52 config::ServerboundResourcePack {
53 id: event.id,
54 action: config::s_resource_pack::Action::SuccessfullyLoaded,
55 },
56 ));
57 } else {
58 commands.trigger(SendPacketEvent::new(
59 event.entity,
60 ServerboundResourcePack {
61 id: event.id,
62 action: s_resource_pack::Action::Accepted,
63 },
64 ));
65 commands.trigger(SendPacketEvent::new(
66 event.entity,
67 ServerboundResourcePack {
68 id: event.id,
69 action: s_resource_pack::Action::SuccessfullyLoaded,
70 },
71 ));
72 }
73 }
74}