diff --git a/azalea-client/src/plugins/packet/config/mod.rs b/azalea-client/src/plugins/packet/config/mod.rs index 1665997c..c9b84eac 100644 --- a/azalea-client/src/plugins/packet/config/mod.rs +++ b/azalea-client/src/plugins/packet/config/mod.rs @@ -12,6 +12,7 @@ use super::as_system; use crate::client::InConfigState; use crate::disconnect::DisconnectEvent; use crate::packet::game::KeepAliveEvent; +use crate::packet::game::ResourcePackEvent; use crate::raw_connection::RawConnection; use crate::{InstanceHolder, declare_packet_handlers}; @@ -151,16 +152,15 @@ impl ConfigPacketHandler<'_> { pub fn resource_pack_push(&mut self, p: ClientboundResourcePackPush) { debug!("Got resource pack push packet {p:?}"); - as_system::>(self.ecs, |query| { - let raw_conn = query.get(self.player).unwrap(); - - // always accept resource pack - raw_conn - .write_packet(ServerboundResourcePack { - id: p.id, - action: s_resource_pack::Action::Accepted, - }) - .unwrap(); + as_system::>(self.ecs, |mut events| { + events.send(ResourcePackEvent { + entity: self.player, + id: p.id, + url: p.url.to_owned(), + hash: p.hash.to_owned(), + required: p.required, + prompt: p.prompt.to_owned(), + }); }); } diff --git a/azalea/src/accept_resource_packs.rs b/azalea/src/accept_resource_packs.rs index 13deef8e..807ad355 100644 --- a/azalea/src/accept_resource_packs.rs +++ b/azalea/src/accept_resource_packs.rs @@ -1,8 +1,11 @@ +use azalea_client::InConfigState; use azalea_client::chunks::handle_chunk_batch_finished_event; use azalea_client::inventory::InventorySet; +use azalea_client::packet::config::SendConfigPacketEvent; use azalea_client::packet::game::SendPacketEvent; use azalea_client::packet::{death_event_on_0_health, game::ResourcePackEvent}; use azalea_client::respawn::perform_respawn; +use azalea_protocol::packets::config; use azalea_protocol::packets::game::s_resource_pack::{self, ServerboundResourcePack}; use bevy_app::Update; use bevy_ecs::prelude::*; @@ -28,21 +31,44 @@ impl Plugin for AcceptResourcePacksPlugin { fn accept_resource_pack( mut events: EventReader, mut send_packet_events: EventWriter, + mut send_config_packet_events: EventWriter, + query_in_config_state: Query>, ) { for event in events.read() { - send_packet_events.send(SendPacketEvent::new( - event.entity, - ServerboundResourcePack { - id: event.id, - action: s_resource_pack::Action::Accepted, - }, - )); - send_packet_events.send(SendPacketEvent::new( - event.entity, - ServerboundResourcePack { - id: event.id, - action: s_resource_pack::Action::SuccessfullyLoaded, - }, - )); + let Ok(in_config_state_option) = query_in_config_state.get(event.entity) else { + continue; + }; + + if in_config_state_option.is_some() { + send_config_packet_events.send(SendConfigPacketEvent::new( + event.entity, + config::ServerboundResourcePack { + id: event.id, + action: config::s_resource_pack::Action::Accepted, + }, + )); + send_config_packet_events.send(SendConfigPacketEvent::new( + event.entity, + config::ServerboundResourcePack { + id: event.id, + action: config::s_resource_pack::Action::SuccessfullyLoaded, + }, + )); + } else { + send_packet_events.send(SendPacketEvent::new( + event.entity, + ServerboundResourcePack { + id: event.id, + action: s_resource_pack::Action::Accepted, + }, + )); + send_packet_events.send(SendPacketEvent::new( + event.entity, + ServerboundResourcePack { + id: event.id, + action: s_resource_pack::Action::SuccessfullyLoaded, + }, + )); + } } }