aboutsummaryrefslogtreecommitdiff
path: root/azalea-entity/src/dimensions.rs
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2025-08-14 20:40:13 -0500
committerGitHub <noreply@github.com>2025-08-14 20:40:13 -0500
commite74ed047dbaf3877db4a89a2d589e992abd0bb11 (patch)
tree0a728c8be167a1d59a5492ed9df666f41cf12e57 /azalea-entity/src/dimensions.rs
parent6695132ddb31780786c67b8b9ff5df8ab3891438 (diff)
downloadazalea-drasl-e74ed047dbaf3877db4a89a2d589e992abd0bb11.tar.xz
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
Diffstat (limited to 'azalea-entity/src/dimensions.rs')
-rw-r--r--azalea-entity/src/dimensions.rs242
1 files changed, 145 insertions, 97 deletions
diff --git a/azalea-entity/src/dimensions.rs b/azalea-entity/src/dimensions.rs
index 68e9903d..92c03e61 100644
--- a/azalea-entity/src/dimensions.rs
+++ b/azalea-entity/src/dimensions.rs
@@ -1,15 +1,43 @@
use azalea_core::{aabb::AABB, position::Vec3};
use azalea_registry::EntityKind;
+use bevy_ecs::component::Component;
-#[derive(Debug, Default, Clone)]
+use crate::Pose;
+
+/// A component that contains the size of an entity and their eye height.
+#[derive(Component, Debug, Default, Clone)]
pub struct EntityDimensions {
pub width: f32,
pub height: f32,
+ /// The offset of the entity's eyes from their coordinates.
+ ///
+ /// This is used to calculate the camera position for players, when
+ /// spectating an entity, and when raycasting from the entity.
+ ///
+ /// The default eye height for a player is 1.62 blocks.
+ pub eye_height: f32,
+ /// Whether the entity isn't allowed to be scaled.
+ pub fixed: bool,
}
impl EntityDimensions {
- pub fn new(width: f32, height: f32) -> Self {
- Self { width, height }
+ pub const fn new(width: f32, height: f32) -> Self {
+ Self {
+ width,
+ height,
+ eye_height: default_eye_height(height),
+ fixed: false,
+ }
+ }
+ pub const fn fixed(self) -> Self {
+ Self {
+ fixed: true,
+ ..self
+ }
+ }
+
+ pub const fn eye_height(self, eye_height: f32) -> Self {
+ Self { eye_height, ..self }
}
pub fn make_bounding_box(&self, pos: Vec3) -> AABB {
@@ -22,55 +50,59 @@ impl EntityDimensions {
}
}
+const fn default_eye_height(height: f32) -> f32 {
+ height * 0.85
+}
+
impl From<EntityKind> for EntityDimensions {
fn from(entity: EntityKind) -> Self {
// this match statement is automatically generated by codegen/genentities.py,
// don't edit it manually!
match entity {
- EntityKind::AcaciaBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::AcaciaChestBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::Allay => EntityDimensions::new(0.35, 0.6),
+ EntityKind::AcaciaBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::AcaciaChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::Allay => EntityDimensions::new(0.35, 0.6).eye_height(0.36),
EntityKind::AreaEffectCloud => EntityDimensions::new(6.0, 0.5),
- EntityKind::Armadillo => EntityDimensions::new(0.7, 0.65),
- EntityKind::ArmorStand => EntityDimensions::new(0.5, 1.975),
- EntityKind::Arrow => EntityDimensions::new(0.5, 0.5),
- EntityKind::Axolotl => EntityDimensions::new(0.75, 0.42),
- EntityKind::BambooChestRaft => EntityDimensions::new(1.375, 0.5625),
- EntityKind::BambooRaft => EntityDimensions::new(1.375, 0.5625),
- EntityKind::Bat => EntityDimensions::new(0.5, 0.9),
- EntityKind::Bee => EntityDimensions::new(0.7, 0.6),
- EntityKind::BirchBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::BirchChestBoat => EntityDimensions::new(1.375, 0.5625),
+ EntityKind::Armadillo => EntityDimensions::new(0.7, 0.65).eye_height(0.26),
+ EntityKind::ArmorStand => EntityDimensions::new(0.5, 1.975).eye_height(1.7775),
+ EntityKind::Arrow => EntityDimensions::new(0.5, 0.5).eye_height(0.13),
+ EntityKind::Axolotl => EntityDimensions::new(0.75, 0.42).eye_height(0.2751),
+ EntityKind::BambooChestRaft => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::BambooRaft => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::Bat => EntityDimensions::new(0.5, 0.9).eye_height(0.45),
+ EntityKind::Bee => EntityDimensions::new(0.7, 0.6).eye_height(0.3),
+ EntityKind::BirchBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::BirchChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
EntityKind::Blaze => EntityDimensions::new(0.6, 1.8),
EntityKind::BlockDisplay => EntityDimensions::new(0.0, 0.0),
- EntityKind::Bogged => EntityDimensions::new(0.6, 1.99),
- EntityKind::Breeze => EntityDimensions::new(0.6, 1.77),
- EntityKind::BreezeWindCharge => EntityDimensions::new(0.3125, 0.3125),
- EntityKind::Camel => EntityDimensions::new(1.7, 2.375),
- EntityKind::Cat => EntityDimensions::new(0.6, 0.7),
- EntityKind::CaveSpider => EntityDimensions::new(0.7, 0.5),
- EntityKind::CherryBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::CherryChestBoat => EntityDimensions::new(1.375, 0.5625),
+ EntityKind::Bogged => EntityDimensions::new(0.6, 1.99).eye_height(1.74),
+ EntityKind::Breeze => EntityDimensions::new(0.6, 1.77).eye_height(1.3452),
+ EntityKind::BreezeWindCharge => EntityDimensions::new(0.3125, 0.3125).eye_height(0.0),
+ EntityKind::Camel => EntityDimensions::new(1.7, 2.375).eye_height(2.275),
+ EntityKind::Cat => EntityDimensions::new(0.6, 0.7).eye_height(0.35),
+ EntityKind::CaveSpider => EntityDimensions::new(0.7, 0.5).eye_height(0.45),
+ EntityKind::CherryBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::CherryChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
EntityKind::ChestMinecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::Chicken => EntityDimensions::new(0.4, 0.7),
- EntityKind::Cod => EntityDimensions::new(0.5, 0.3),
+ EntityKind::Chicken => EntityDimensions::new(0.4, 0.7).eye_height(0.644),
+ EntityKind::Cod => EntityDimensions::new(0.5, 0.3).eye_height(0.195),
EntityKind::CommandBlockMinecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::Cow => EntityDimensions::new(0.9, 1.4),
- EntityKind::Creaking => EntityDimensions::new(0.9, 2.7),
+ EntityKind::Cow => EntityDimensions::new(0.9, 1.4).eye_height(1.3),
+ EntityKind::Creaking => EntityDimensions::new(0.9, 2.7).eye_height(2.3),
EntityKind::Creeper => EntityDimensions::new(0.6, 1.7),
- EntityKind::DarkOakBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::DarkOakChestBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::Dolphin => EntityDimensions::new(0.9, 0.6),
- EntityKind::Donkey => EntityDimensions::new(1.39648, 1.5),
+ EntityKind::DarkOakBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::DarkOakChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::Dolphin => EntityDimensions::new(0.9, 0.6).eye_height(0.3),
+ EntityKind::Donkey => EntityDimensions::new(1.39648, 1.5).eye_height(1.425),
EntityKind::DragonFireball => EntityDimensions::new(1.0, 1.0),
- EntityKind::Drowned => EntityDimensions::new(0.6, 1.95),
+ EntityKind::Drowned => EntityDimensions::new(0.6, 1.95).eye_height(1.74),
EntityKind::Egg => EntityDimensions::new(0.25, 0.25),
- EntityKind::ElderGuardian => EntityDimensions::new(1.9975, 1.9975),
+ EntityKind::ElderGuardian => EntityDimensions::new(1.9975, 1.9975).eye_height(0.99875),
EntityKind::EndCrystal => EntityDimensions::new(2.0, 2.0),
EntityKind::EnderDragon => EntityDimensions::new(16.0, 8.0),
EntityKind::EnderPearl => EntityDimensions::new(0.25, 0.25),
- EntityKind::Enderman => EntityDimensions::new(0.6, 2.9),
- EntityKind::Endermite => EntityDimensions::new(0.4, 0.3),
+ EntityKind::Enderman => EntityDimensions::new(0.6, 2.9).eye_height(2.55),
+ EntityKind::Endermite => EntityDimensions::new(0.4, 0.3).eye_height(0.13),
EntityKind::Evoker => EntityDimensions::new(0.6, 1.95),
EntityKind::EvokerFangs => EntityDimensions::new(0.5, 0.8),
EntityKind::ExperienceBottle => EntityDimensions::new(0.25, 0.25),
@@ -80,104 +112,120 @@ impl From<EntityKind> for EntityDimensions {
EntityKind::Fireball => EntityDimensions::new(1.0, 1.0),
EntityKind::FireworkRocket => EntityDimensions::new(0.25, 0.25),
EntityKind::FishingBobber => EntityDimensions::new(0.25, 0.25),
- EntityKind::Fox => EntityDimensions::new(0.6, 0.7),
+ EntityKind::Fox => EntityDimensions::new(0.6, 0.7).eye_height(0.4),
EntityKind::Frog => EntityDimensions::new(0.5, 0.5),
EntityKind::FurnaceMinecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::Ghast => EntityDimensions::new(4.0, 4.0),
- EntityKind::Giant => EntityDimensions::new(3.6, 12.0),
- EntityKind::GlowItemFrame => EntityDimensions::new(0.5, 0.5),
- EntityKind::GlowSquid => EntityDimensions::new(0.8, 0.8),
+ EntityKind::Ghast => EntityDimensions::new(4.0, 4.0).eye_height(2.6),
+ EntityKind::Giant => EntityDimensions::new(3.6, 12.0).eye_height(10.44),
+ EntityKind::GlowItemFrame => EntityDimensions::new(0.5, 0.5).eye_height(0.0),
+ EntityKind::GlowSquid => EntityDimensions::new(0.8, 0.8).eye_height(0.4),
EntityKind::Goat => EntityDimensions::new(0.9, 1.3),
- EntityKind::Guardian => EntityDimensions::new(0.85, 0.85),
- EntityKind::HappyGhast => EntityDimensions::new(4.0, 4.0),
+ EntityKind::Guardian => EntityDimensions::new(0.85, 0.85).eye_height(0.425),
+ EntityKind::HappyGhast => EntityDimensions::new(4.0, 4.0).eye_height(2.6),
EntityKind::Hoglin => EntityDimensions::new(1.39648, 1.4),
EntityKind::HopperMinecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::Horse => EntityDimensions::new(1.39648, 1.6),
- EntityKind::Husk => EntityDimensions::new(0.6, 1.95),
+ EntityKind::Horse => EntityDimensions::new(1.39648, 1.6).eye_height(1.52),
+ EntityKind::Husk => EntityDimensions::new(0.6, 1.95).eye_height(1.74),
EntityKind::Illusioner => EntityDimensions::new(0.6, 1.95),
EntityKind::Interaction => EntityDimensions::new(0.0, 0.0),
EntityKind::IronGolem => EntityDimensions::new(1.4, 2.7),
- EntityKind::Item => EntityDimensions::new(0.25, 0.25),
+ EntityKind::Item => EntityDimensions::new(0.25, 0.25).eye_height(0.2125),
EntityKind::ItemDisplay => EntityDimensions::new(0.0, 0.0),
- EntityKind::ItemFrame => EntityDimensions::new(0.5, 0.5),
- EntityKind::JungleBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::JungleChestBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::LeashKnot => EntityDimensions::new(0.375, 0.5),
+ EntityKind::ItemFrame => EntityDimensions::new(0.5, 0.5).eye_height(0.0),
+ EntityKind::JungleBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::JungleChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::LeashKnot => EntityDimensions::new(0.375, 0.5).eye_height(0.0625),
EntityKind::LightningBolt => EntityDimensions::new(0.0, 0.0),
EntityKind::LingeringPotion => EntityDimensions::new(0.25, 0.25),
- EntityKind::Llama => EntityDimensions::new(0.9, 1.87),
+ EntityKind::Llama => EntityDimensions::new(0.9, 1.87).eye_height(1.7765),
EntityKind::LlamaSpit => EntityDimensions::new(0.25, 0.25),
- EntityKind::MagmaCube => EntityDimensions::new(0.52, 0.52),
- EntityKind::MangroveBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::MangroveChestBoat => EntityDimensions::new(1.375, 0.5625),
+ EntityKind::MagmaCube => EntityDimensions::new(0.52, 0.52).eye_height(0.325),
+ EntityKind::MangroveBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::MangroveChestBoat => {
+ EntityDimensions::new(1.375, 0.5625).eye_height(0.5625)
+ }
EntityKind::Marker => EntityDimensions::new(0.0, 0.0),
EntityKind::Minecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::Mooshroom => EntityDimensions::new(0.9, 1.4),
- EntityKind::Mule => EntityDimensions::new(1.39648, 1.6),
- EntityKind::OakBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::OakChestBoat => EntityDimensions::new(1.375, 0.5625),
+ EntityKind::Mooshroom => EntityDimensions::new(0.9, 1.4).eye_height(1.3),
+ EntityKind::Mule => EntityDimensions::new(1.39648, 1.6).eye_height(1.52),
+ EntityKind::OakBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::OakChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
EntityKind::Ocelot => EntityDimensions::new(0.6, 0.7),
EntityKind::OminousItemSpawner => EntityDimensions::new(0.25, 0.25),
EntityKind::Painting => EntityDimensions::new(0.5, 0.5),
- EntityKind::PaleOakBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::PaleOakChestBoat => EntityDimensions::new(1.375, 0.5625),
+ EntityKind::PaleOakBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::PaleOakChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
EntityKind::Panda => EntityDimensions::new(1.3, 1.25),
- EntityKind::Parrot => EntityDimensions::new(0.5, 0.9),
- EntityKind::Phantom => EntityDimensions::new(0.9, 0.5),
+ EntityKind::Parrot => EntityDimensions::new(0.5, 0.9).eye_height(0.54),
+ EntityKind::Phantom => EntityDimensions::new(0.9, 0.5).eye_height(0.175),
EntityKind::Pig => EntityDimensions::new(0.9, 0.9),
- EntityKind::Piglin => EntityDimensions::new(0.6, 1.95),
- EntityKind::PiglinBrute => EntityDimensions::new(0.6, 1.95),
+ EntityKind::Piglin => EntityDimensions::new(0.6, 1.95).eye_height(1.79),
+ EntityKind::PiglinBrute => EntityDimensions::new(0.6, 1.95).eye_height(1.79),
EntityKind::Pillager => EntityDimensions::new(0.6, 1.95),
- EntityKind::Player => EntityDimensions::new(0.6, 1.8),
+ EntityKind::Player => EntityDimensions::new(0.6, 1.8).eye_height(1.62),
EntityKind::PolarBear => EntityDimensions::new(1.4, 1.4),
- EntityKind::Pufferfish => EntityDimensions::new(0.7, 0.7),
+ EntityKind::Pufferfish => EntityDimensions::new(0.7, 0.7).eye_height(0.455),
EntityKind::Rabbit => EntityDimensions::new(0.4, 0.5),
EntityKind::Ravager => EntityDimensions::new(1.95, 2.2),
- EntityKind::Salmon => EntityDimensions::new(0.7, 0.4),
- EntityKind::Sheep => EntityDimensions::new(0.9, 1.3),
- EntityKind::Shulker => EntityDimensions::new(1.0, 1.0),
+ EntityKind::Salmon => EntityDimensions::new(0.7, 0.4).eye_height(0.26),
+ EntityKind::Sheep => EntityDimensions::new(0.9, 1.3).eye_height(1.235),
+ EntityKind::Shulker => EntityDimensions::new(1.0, 1.0).eye_height(0.5),
EntityKind::ShulkerBullet => EntityDimensions::new(0.3125, 0.3125),
- EntityKind::Silverfish => EntityDimensions::new(0.4, 0.3),
- EntityKind::Skeleton => EntityDimensions::new(0.6, 1.99),
- EntityKind::SkeletonHorse => EntityDimensions::new(1.39648, 1.6),
- EntityKind::Slime => EntityDimensions::new(0.52, 0.52),
+ EntityKind::Silverfish => EntityDimensions::new(0.4, 0.3).eye_height(0.13),
+ EntityKind::Skeleton => EntityDimensions::new(0.6, 1.99).eye_height(1.74),
+ EntityKind::SkeletonHorse => EntityDimensions::new(1.39648, 1.6).eye_height(1.52),
+ EntityKind::Slime => EntityDimensions::new(0.52, 0.52).eye_height(0.325),
EntityKind::SmallFireball => EntityDimensions::new(0.3125, 0.3125),
- EntityKind::Sniffer => EntityDimensions::new(1.9, 1.75),
- EntityKind::SnowGolem => EntityDimensions::new(0.7, 1.9),
+ EntityKind::Sniffer => EntityDimensions::new(1.9, 1.75).eye_height(1.05),
+ EntityKind::SnowGolem => EntityDimensions::new(0.7, 1.9).eye_height(1.7),
EntityKind::Snowball => EntityDimensions::new(0.25, 0.25),
EntityKind::SpawnerMinecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::SpectralArrow => EntityDimensions::new(0.5, 0.5),
- EntityKind::Spider => EntityDimensions::new(1.4, 0.9),
+ EntityKind::SpectralArrow => EntityDimensions::new(0.5, 0.5).eye_height(0.13),
+ EntityKind::Spider => EntityDimensions::new(1.4, 0.9).eye_height(0.65),
EntityKind::SplashPotion => EntityDimensions::new(0.25, 0.25),
- EntityKind::SpruceBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::SpruceChestBoat => EntityDimensions::new(1.375, 0.5625),
- EntityKind::Squid => EntityDimensions::new(0.8, 0.8),
- EntityKind::Stray => EntityDimensions::new(0.6, 1.99),
+ EntityKind::SpruceBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::SpruceChestBoat => EntityDimensions::new(1.375, 0.5625).eye_height(0.5625),
+ EntityKind::Squid => EntityDimensions::new(0.8, 0.8).eye_height(0.4),
+ EntityKind::Stray => EntityDimensions::new(0.6, 1.99).eye_height(1.74),
EntityKind::Strider => EntityDimensions::new(0.9, 1.7),
- EntityKind::Tadpole => EntityDimensions::new(0.4, 0.3),
+ EntityKind::Tadpole => EntityDimensions::new(0.4, 0.3).eye_height(0.195),
EntityKind::TextDisplay => EntityDimensions::new(0.0, 0.0),
- EntityKind::Tnt => EntityDimensions::new(0.98, 0.98),
+ EntityKind::Tnt => EntityDimensions::new(0.98, 0.98).eye_height(0.15),
EntityKind::TntMinecart => EntityDimensions::new(0.98, 0.7),
- EntityKind::TraderLlama => EntityDimensions::new(0.9, 1.87),
- EntityKind::Trident => EntityDimensions::new(0.5, 0.5),
- EntityKind::TropicalFish => EntityDimensions::new(0.5, 0.4),
+ EntityKind::TraderLlama => EntityDimensions::new(0.9, 1.87).eye_height(1.7765),
+ EntityKind::Trident => EntityDimensions::new(0.5, 0.5).eye_height(0.13),
+ EntityKind::TropicalFish => EntityDimensions::new(0.5, 0.4).eye_height(0.26),
EntityKind::Turtle => EntityDimensions::new(1.2, 0.4),
- EntityKind::Vex => EntityDimensions::new(0.4, 0.8),
- EntityKind::Villager => EntityDimensions::new(0.6, 1.95),
+ EntityKind::Vex => EntityDimensions::new(0.4, 0.8).eye_height(0.51875),
+ EntityKind::Villager => EntityDimensions::new(0.6, 1.95).eye_height(1.62),
EntityKind::Vindicator => EntityDimensions::new(0.6, 1.95),
- EntityKind::WanderingTrader => EntityDimensions::new(0.6, 1.95),
+ EntityKind::WanderingTrader => EntityDimensions::new(0.6, 1.95).eye_height(1.62),
EntityKind::Warden => EntityDimensions::new(0.9, 2.9),
- EntityKind::WindCharge => EntityDimensions::new(0.3125, 0.3125),
- EntityKind::Witch => EntityDimensions::new(0.6, 1.95),
+ EntityKind::WindCharge => EntityDimensions::new(0.3125, 0.3125).eye_height(0.0),
+ EntityKind::Witch => EntityDimensions::new(0.6, 1.95).eye_height(1.62),
EntityKind::Wither => EntityDimensions::new(0.9, 3.5),
- EntityKind::WitherSkeleton => EntityDimensions::new(0.7, 2.4),
+ EntityKind::WitherSkeleton => EntityDimensions::new(0.7, 2.4).eye_height(2.1),
EntityKind::WitherSkull => EntityDimensions::new(0.3125, 0.3125),
- EntityKind::Wolf => EntityDimensions::new(0.6, 0.85),
+ EntityKind::Wolf => EntityDimensions::new(0.6, 0.85).eye_height(0.68),
EntityKind::Zoglin => EntityDimensions::new(1.39648, 1.4),
- EntityKind::Zombie => EntityDimensions::new(0.6, 1.95),
- EntityKind::ZombieHorse => EntityDimensions::new(1.39648, 1.6),
- EntityKind::ZombieVillager => EntityDimensions::new(0.6, 1.95),
- EntityKind::ZombifiedPiglin => EntityDimensions::new(0.6, 1.95),
+ EntityKind::Zombie => EntityDimensions::new(0.6, 1.95).eye_height(1.74),
+ EntityKind::ZombieHorse => EntityDimensions::new(1.39648, 1.6).eye_height(1.52),
+ EntityKind::ZombieVillager => EntityDimensions::new(0.6, 1.95).eye_height(1.74),
+ EntityKind::ZombifiedPiglin => EntityDimensions::new(0.6, 1.95).eye_height(1.79),
}
}
}
+
+/// Calculate the dimensions that an entity with the given kind and pose would
+/// have.i
+pub fn calculate_dimensions(kind: EntityKind, pose: Pose) -> EntityDimensions {
+ match (kind, pose) {
+ (_, Pose::Sleeping) => EntityDimensions::new(0.2, 0.2).fixed().eye_height(0.2),
+ (EntityKind::Player, Pose::FallFlying) => EntityDimensions::new(0.6, 0.6).eye_height(0.4),
+ (EntityKind::Player, Pose::Swimming) => EntityDimensions::new(0.6, 0.6).eye_height(0.4),
+ (EntityKind::Player, Pose::SpinAttack) => EntityDimensions::new(0.6, 0.6).eye_height(0.4),
+ (EntityKind::Player, Pose::Crouching) => EntityDimensions::new(0.6, 1.5).eye_height(1.27),
+ (EntityKind::Player, Pose::Dying) => EntityDimensions::new(0.2, 1.2).eye_height(1.62),
+ _ => EntityDimensions::from(kind),
+ }
+}