aboutsummaryrefslogtreecommitdiff
path: root/azalea-entity/src/plugin/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-entity/src/plugin/mod.rs')
-rw-r--r--azalea-entity/src/plugin/mod.rs52
1 files changed, 28 insertions, 24 deletions
diff --git a/azalea-entity/src/plugin/mod.rs b/azalea-entity/src/plugin/mod.rs
index e40c24f2..b86c6b7d 100644
--- a/azalea-entity/src/plugin/mod.rs
+++ b/azalea-entity/src/plugin/mod.rs
@@ -1,6 +1,5 @@
mod components;
pub mod indexing;
-mod relative_updates;
use std::collections::HashSet;
@@ -17,13 +16,12 @@ use bevy_ecs::prelude::*;
pub use components::*;
use derive_more::{Deref, DerefMut};
use indexing::EntityUuidIndex;
-pub use relative_updates::RelativeEntityUpdate;
use tracing::debug;
use crate::{
FluidOnEyes, LookDirection, Physics, Pose, Position,
dimensions::{EntityDimensions, calculate_dimensions},
- metadata::Health,
+ metadata::{self, Health, Player},
};
/// A Bevy [`SystemSet`] for various types of entity updates.
@@ -57,7 +55,6 @@ impl Plugin for EntityPlugin {
.chain()
.in_set(EntityUpdateSystems::Index),
(
- relative_updates::debug_detect_updates_received_on_local_entities,
debug_new_entity,
add_dead,
clamp_look_direction,
@@ -97,27 +94,32 @@ pub fn add_dead(mut commands: Commands, query: Query<(Entity, &Health), Changed<
}
pub fn update_fluid_on_eyes(
- mut query: Query<(&mut FluidOnEyes, &Position, &EntityDimensions, &WorldName)>,
+ mut query: Query<
+ (&mut FluidOnEyes, &Position, &EntityDimensions, &WorldName),
+ With<metadata::AbstractLiving>,
+ >,
worlds: Res<Worlds>,
) {
- for (mut fluid_on_eyes, position, dimensions, world_name) in query.iter_mut() {
- let Some(world) = worlds.get(world_name) else {
- continue;
- };
-
- let adjusted_eye_y = position.y + (dimensions.eye_height as f64) - 0.1111111119389534;
- let eye_block_pos = BlockPos::from(position.with_y(adjusted_eye_y));
- let fluid_at_eye = world
- .read()
- .get_fluid_state(eye_block_pos)
- .unwrap_or_default();
- let fluid_cutoff_y = (eye_block_pos.y as f32 + fluid_at_eye.height()) as f64;
- if fluid_cutoff_y > adjusted_eye_y {
- **fluid_on_eyes = fluid_at_eye.kind;
- } else {
- **fluid_on_eyes = FluidKind::Empty;
- }
- }
+ query
+ .par_iter_mut()
+ .for_each(|(mut fluid_on_eyes, position, dimensions, world_name)| {
+ let Some(world) = worlds.get(world_name) else {
+ return;
+ };
+
+ let adjusted_eye_y = position.y + (dimensions.eye_height as f64) - 0.1111111119389534;
+ let eye_block_pos = BlockPos::from(position.with_y(adjusted_eye_y));
+ let fluid_at_eye = world
+ .read()
+ .get_fluid_state(eye_block_pos)
+ .unwrap_or_default();
+ let fluid_cutoff_y = (eye_block_pos.y as f32 + fluid_at_eye.height()) as f64;
+ if fluid_cutoff_y > adjusted_eye_y {
+ **fluid_on_eyes = fluid_at_eye.kind;
+ } else {
+ **fluid_on_eyes = FluidKind::Empty;
+ }
+ });
}
pub fn update_on_climbable(
@@ -229,7 +231,9 @@ pub fn update_dimensions(
}
}
-pub fn update_crouching(query: Query<(&mut Crouching, &Pose), Without<LocalEntity>>) {
+pub fn update_crouching(
+ query: Query<(&mut Crouching, &Pose), (Without<LocalEntity>, With<Player>)>,
+) {
for (mut crouching, pose) in query {
let new_crouching = *pose == Pose::Crouching;
// avoid triggering change detection