From 07e3236f0b8234ab73c3bd1a0aecd0aeb13dffab Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 22 Aug 2023 01:56:56 -0500 Subject: fix entities not being despawned closes #103 --- azalea-client/src/packet_handling.rs | 27 +++++++++++++++++++++++++++ azalea/examples/nearest_entity.rs | 5 +---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/azalea-client/src/packet_handling.rs b/azalea-client/src/packet_handling.rs index 1805002f..eebf48d9 100644 --- a/azalea-client/src/packet_handling.rs +++ b/azalea-client/src/packet_handling.rs @@ -830,6 +830,33 @@ pub fn process_packet_events(ecs: &mut World) { } ClientboundGamePacket::RemoveEntities(p) => { debug!("Got remove entities packet {:?}", p); + + let mut system_state: SystemState<( + Commands, + Query<&mut InstanceName>, + Res, + )> = SystemState::new(ecs); + + let (mut commands, mut query, instance_container) = system_state.get_mut(ecs); + let Ok(instance_name) = query.get_mut(player_entity) else { + println!("no instance name"); + continue; + }; + + let Some(instance) = instance_container.get(&instance_name) else { + println!("no instance"); + continue; + }; + for &id in &p.entity_ids { + if let Some(entity) = + instance.write().entity_by_id.remove(&MinecraftEntityId(id)) + { + println!("despawning entity"); + commands.entity(entity).despawn(); + } + } + + system_state.apply(ecs); } ClientboundGamePacket::PlayerChat(p) => { debug!("Got player chat packet {:?}", p); diff --git a/azalea/examples/nearest_entity.rs b/azalea/examples/nearest_entity.rs index 9ac6331b..22a8b863 100644 --- a/azalea/examples/nearest_entity.rs +++ b/azalea/examples/nearest_entity.rs @@ -64,10 +64,7 @@ fn log_nearby_item_drops( let item_drop = item_drops.get(entity).unwrap(); let kind = item_drop.kind(); - println!( - "Bot {:?} can see an {:?} {:.1} meters away.", - bot_id, kind, distance - ); + println!("Bot {bot_id:?} can see an {kind:?} {distance:.1} meters away."); } } } -- cgit v1.2.3