From e74ed047dbaf3877db4a89a2d589e992abd0bb11 Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:40:13 -0500 Subject: Sneaking (#237) * start implementing sneaking * fix horizontal_collision being inverted and cleanup * clippy * change dimensions and eye height based on pose * proper support for automatically crouching in certain cases * fix anticheat issues * add line to changelog and update a comment --- azalea-client/src/plugins/interact/mod.rs | 19 +++++++++++++------ azalea-client/src/plugins/interact/pick.rs | 9 +++++---- 2 files changed, 18 insertions(+), 10 deletions(-) (limited to 'azalea-client/src/plugins/interact') diff --git a/azalea-client/src/plugins/interact/mod.rs b/azalea-client/src/plugins/interact/mod.rs index 634d492c..0275ca97 100644 --- a/azalea-client/src/plugins/interact/mod.rs +++ b/azalea-client/src/plugins/interact/mod.rs @@ -11,7 +11,7 @@ use azalea_core::{ tick::GameTick, }; use azalea_entity::{ - Attributes, LocalEntity, LookDirection, + Attributes, Crouching, LocalEntity, LookDirection, PlayerAbilities, attributes::{ creative_block_interaction_range_modifier, creative_entity_interaction_range_modifier, }, @@ -36,7 +36,7 @@ use crate::{ attack::handle_attack_event, interact::pick::{HitResultComponent, update_hit_result_component}, inventory::{Inventory, InventorySet}, - local_player::{LocalGameMode, PermissionLevel, PlayerAbilities}, + local_player::{LocalGameMode, PermissionLevel}, movement::MoveEventsSet, packet::game::SendPacketEvent, respawn::perform_respawn, @@ -250,12 +250,20 @@ pub fn handle_start_use_item_queued( &mut BlockStatePredictionHandler, &HitResultComponent, &LookDirection, + &Crouching, Option<&Mining>, )>, entity_id_query: Query<&MinecraftEntityId>, ) { - for (entity, start_use_item, mut prediction_handler, hit_result, look_direction, mining) in - query + for ( + entity, + start_use_item, + mut prediction_handler, + hit_result, + look_direction, + crouching, + mining, + ) in query { commands.entity(entity).remove::(); @@ -332,8 +340,7 @@ pub fn handle_start_use_item_queued( location: r.location, hand: InteractionHand::MainHand, }, - // TODO: sneaking - using_secondary_action: false, + using_secondary_action: **crouching, }, )); } diff --git a/azalea-client/src/plugins/interact/pick.rs b/azalea-client/src/plugins/interact/pick.rs index cebbf905..a0a75910 100644 --- a/azalea-client/src/plugins/interact/pick.rs +++ b/azalea-client/src/plugins/interact/pick.rs @@ -5,7 +5,8 @@ use azalea_core::{ position::Vec3, }; use azalea_entity::{ - Attributes, Dead, EyeHeight, LocalEntity, LookDirection, Physics, Position, + Attributes, Dead, LocalEntity, LookDirection, Physics, Position, + dimensions::EntityDimensions, metadata::{ArmorStandMarker, Marker}, view_vector, }; @@ -31,7 +32,7 @@ pub fn update_hit_result_component( Entity, Option<&mut HitResultComponent>, &Position, - &EyeHeight, + &EntityDimensions, &LookDirection, &InstanceName, &Physics, @@ -47,7 +48,7 @@ pub fn update_hit_result_component( entity, hit_result_ref, position, - eye_height, + dimensions, look_direction, world_name, physics, @@ -57,7 +58,7 @@ pub fn update_hit_result_component( let block_pick_range = attributes.block_interaction_range.calculate(); let entity_pick_range = attributes.entity_interaction_range.calculate(); - let eye_position = position.up(eye_height.into()); + let eye_position = position.up(dimensions.eye_height.into()); let Some(world_lock) = instance_container.get(world_name) else { continue; -- cgit v1.2.3