aboutsummaryrefslogtreecommitdiff
path: root/azalea-client/src
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-client/src')
-rw-r--r--azalea-client/src/lib.rs2
-rw-r--r--azalea-client/src/packet_handling.rs30
2 files changed, 24 insertions, 8 deletions
diff --git a/azalea-client/src/lib.rs b/azalea-client/src/lib.rs
index 8ea2fc41..942f683c 100644
--- a/azalea-client/src/lib.rs
+++ b/azalea-client/src/lib.rs
@@ -36,7 +36,7 @@ pub use client::{
TickBroadcast,
};
pub use events::Event;
-pub use local_player::{GameProfileComponent, LocalPlayer};
+pub use local_player::{GameProfileComponent, LocalPlayer, SendPacketEvent};
pub use movement::{
PhysicsState, SprintDirection, StartSprintEvent, StartWalkEvent, WalkDirection,
};
diff --git a/azalea-client/src/packet_handling.rs b/azalea-client/src/packet_handling.rs
index c95cbdba..cccd6153 100644
--- a/azalea-client/src/packet_handling.rs
+++ b/azalea-client/src/packet_handling.rs
@@ -1,6 +1,7 @@
use std::{collections::HashSet, io::Cursor, sync::Arc};
use azalea_buf::McBufWritable;
+use azalea_chat::FormattedText;
use azalea_core::{ChunkPos, GameMode, ResourceLocation, Vec3};
use azalea_entity::{
indexing::{EntityIdIndex, EntityUuidIndex},
@@ -16,8 +17,7 @@ use azalea_protocol::{
serverbound_custom_payload_packet::ServerboundCustomPayloadPacket,
serverbound_keep_alive_packet::ServerboundKeepAlivePacket,
serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket,
- serverbound_pong_packet::ServerboundPongPacket,
- serverbound_resource_pack_packet::ServerboundResourcePackPacket, ClientboundGamePacket,
+ serverbound_pong_packet::ServerboundPongPacket, ClientboundGamePacket,
ServerboundGamePacket,
},
read::ReadPacketError,
@@ -160,6 +160,15 @@ pub struct KeepAliveEvent {
pub id: u64,
}
+#[derive(Event, Debug, Clone)]
+pub struct ResourcePackEvent {
+ pub entity: Entity,
+ pub url: String,
+ pub hash: String,
+ pub required: bool,
+ pub prompt: Option<FormattedText>,
+}
+
/// Something that receives packets from the server.
#[derive(Event, Component, Clone)]
pub struct PacketReceiver {
@@ -1091,12 +1100,19 @@ pub fn process_packet_events(ecs: &mut World) {
ClientboundGamePacket::ResourcePack(p) => {
debug!("Got resource pack packet {:?}", p);
- let mut system_state: SystemState<Query<&mut LocalPlayer>> = SystemState::new(ecs);
- let mut query = system_state.get_mut(ecs);
+ let mut system_state: SystemState<EventWriter<ResourcePackEvent>> =
+ SystemState::new(ecs);
+ let mut resource_pack_events = system_state.get_mut(ecs);
- let local_player = query.get_mut(player_entity).unwrap();
- // always accept resource pack
- local_player.write_packet(ServerboundResourcePackPacket { action: azalea_protocol::packets::game::serverbound_resource_pack_packet::Action::Accepted }.get());
+ resource_pack_events.send(ResourcePackEvent {
+ entity: player_entity,
+ url: p.url,
+ hash: p.hash,
+ required: p.required,
+ prompt: p.prompt,
+ });
+
+ system_state.apply(ecs);
}
ClientboundGamePacket::Respawn(p) => {
debug!("Got respawn packet {:?}", p);