diff options
Diffstat (limited to 'azalea-client/src/inventory.rs')
| -rw-r--r-- | azalea-client/src/inventory.rs | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/azalea-client/src/inventory.rs b/azalea-client/src/inventory.rs index da5376fc..2e8478d4 100644 --- a/azalea-client/src/inventory.rs +++ b/azalea-client/src/inventory.rs @@ -25,7 +25,11 @@ use bevy_ecs::{ }; use log::warn; -use crate::{client::PlayerAbilities, local_player::handle_send_packet_event, Client, LocalPlayer}; +use crate::{ + local_player::{handle_send_packet_event, PlayerAbilities, SendPacketEvent}, + respawn::perform_respawn, + Client, +}; pub struct InventoryPlugin; impl Plugin for InventoryPlugin { @@ -45,7 +49,8 @@ impl Plugin for InventoryPlugin { handle_client_side_close_container_event, ) .chain() - .in_set(InventorySet), + .in_set(InventorySet) + .before(perform_respawn), ); } } @@ -599,12 +604,13 @@ pub struct CloseContainerEvent { pub id: u8, } fn handle_container_close_event( + query: Query<(Entity, &InventoryComponent)>, mut events: EventReader<CloseContainerEvent>, mut client_side_events: EventWriter<ClientSideCloseContainerEvent>, - query: Query<(&LocalPlayer, &InventoryComponent)>, + mut send_packet_events: EventWriter<SendPacketEvent>, ) { for event in events.iter() { - let (local_player, inventory) = query.get(event.entity).unwrap(); + let (entity, inventory) = query.get(event.entity).unwrap(); if event.id != inventory.id { warn!( "Tried to close container with ID {}, but the current container ID is {}", @@ -613,12 +619,13 @@ fn handle_container_close_event( continue; } - local_player.write_packet( - ServerboundContainerClosePacket { + send_packet_events.send(SendPacketEvent { + entity, + packet: ServerboundContainerClosePacket { container_id: inventory.id, } .get(), - ); + }); client_side_events.send(ClientSideCloseContainerEvent { entity: event.entity, }); @@ -650,11 +657,12 @@ pub struct ContainerClickEvent { pub operation: ClickOperation, } pub fn handle_container_click_event( + mut query: Query<(Entity, &mut InventoryComponent)>, mut events: EventReader<ContainerClickEvent>, - mut query: Query<(&mut InventoryComponent, &LocalPlayer)>, + mut send_packet_events: EventWriter<SendPacketEvent>, ) { for event in events.iter() { - let (mut inventory, local_player) = query.get_mut(event.entity).unwrap(); + let (entity, mut inventory) = query.get_mut(event.entity).unwrap(); if inventory.id != event.window_id { warn!( "Tried to click container with ID {}, but the current container ID is {}", @@ -678,8 +686,9 @@ pub fn handle_container_click_event( } } - local_player.write_packet( - ServerboundContainerClickPacket { + send_packet_events.send(SendPacketEvent { + entity, + packet: ServerboundContainerClickPacket { container_id: event.window_id, state_id: inventory.state_id, slot_num: event.operation.slot_num().map(|n| n as i16).unwrap_or(-999), @@ -689,7 +698,7 @@ pub fn handle_container_click_event( carried_item: inventory.carried.clone(), } .get(), - ) + }) } } |
