aboutsummaryrefslogtreecommitdiff
path: root/azalea-physics/src/collision
diff options
context:
space:
mode:
Diffstat (limited to 'azalea-physics/src/collision')
-rwxr-xr-x[-rw-r--r--]azalea-physics/src/collision/blocks.rs0
-rwxr-xr-x[-rw-r--r--]azalea-physics/src/collision/dimension_collisions.rs7
-rwxr-xr-x[-rw-r--r--]azalea-physics/src/collision/discrete_voxel_shape.rs0
-rwxr-xr-x[-rw-r--r--]azalea-physics/src/collision/mergers.rs0
-rwxr-xr-x[-rw-r--r--]azalea-physics/src/collision/mod.rs10
-rwxr-xr-x[-rw-r--r--]azalea-physics/src/collision/shape.rs0
6 files changed, 11 insertions, 6 deletions
diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs
index 0994a195..0994a195 100644..100755
--- a/azalea-physics/src/collision/blocks.rs
+++ b/azalea-physics/src/collision/blocks.rs
diff --git a/azalea-physics/src/collision/dimension_collisions.rs b/azalea-physics/src/collision/dimension_collisions.rs
index 35eb9f5b..fd4e5141 100644..100755
--- a/azalea-physics/src/collision/dimension_collisions.rs
+++ b/azalea-physics/src/collision/dimension_collisions.rs
@@ -3,7 +3,8 @@ use azalea_block::BlockState;
use azalea_core::{ChunkPos, ChunkSectionPos, Cursor3d, CursorIterationType, EPSILON};
use azalea_world::entity::EntityData;
use azalea_world::{Chunk, Dimension};
-use std::sync::{Arc, Mutex};
+use parking_lot::Mutex;
+use std::sync::Arc;
use super::Shapes;
@@ -92,10 +93,10 @@ impl<'a> Iterator for BlockCollisions<'a> {
Some(chunk) => chunk,
None => continue,
};
- let chunk_lock = chunk.lock().unwrap();
let pos = item.pos;
- let block_state: BlockState = chunk_lock
+ let block_state: BlockState = chunk
+ .lock()
.get(&(&pos).into(), self.dimension.min_y())
.unwrap_or(BlockState::Air);
diff --git a/azalea-physics/src/collision/discrete_voxel_shape.rs b/azalea-physics/src/collision/discrete_voxel_shape.rs
index 51d45316..51d45316 100644..100755
--- a/azalea-physics/src/collision/discrete_voxel_shape.rs
+++ b/azalea-physics/src/collision/discrete_voxel_shape.rs
diff --git a/azalea-physics/src/collision/mergers.rs b/azalea-physics/src/collision/mergers.rs
index 483cb55f..483cb55f 100644..100755
--- a/azalea-physics/src/collision/mergers.rs
+++ b/azalea-physics/src/collision/mergers.rs
diff --git a/azalea-physics/src/collision/mod.rs b/azalea-physics/src/collision/mod.rs
index f08e48e3..d5502f3d 100644..100755
--- a/azalea-physics/src/collision/mod.rs
+++ b/azalea-physics/src/collision/mod.rs
@@ -4,8 +4,10 @@ mod discrete_voxel_shape;
mod mergers;
mod shape;
-use azalea_core::{Axis, PositionXYZ, Vec3, AABB, EPSILON};
-use azalea_world::entity::{EntityData, EntityMut};
+use std::ops::DerefMut;
+
+use azalea_core::{Axis, Vec3, AABB, EPSILON};
+use azalea_world::entity::{Entity, EntityData};
use azalea_world::{Dimension, MoveEntityError};
pub use blocks::BlockWithShape;
use dimension_collisions::CollisionGetter;
@@ -81,7 +83,7 @@ impl HasCollision for Dimension {
}
}
-impl MovableEntity for EntityMut<'_> {
+impl<D: DerefMut<Target = Dimension>> MovableEntity for Entity<'_, D> {
/// Move an entity by a given delta, checking for collisions.
fn move_colliding(
&mut self,
@@ -158,6 +160,8 @@ impl MovableEntity for EntityMut<'_> {
if vertical_collision {
// blockBelow.updateEntityAfterFallOn(this.level, this);
+ // the default implementation of updateEntityAfterFallOn sets the y movement to 0
+ self.delta.y = 0.;
}
if on_ground {
diff --git a/azalea-physics/src/collision/shape.rs b/azalea-physics/src/collision/shape.rs
index e6bc6cf7..e6bc6cf7 100644..100755
--- a/azalea-physics/src/collision/shape.rs
+++ b/azalea-physics/src/collision/shape.rs