basalt-mc-protocol 0.2.1

Minecraft packet definitions and version-aware packet registry
Documentation
//! Play state — entity packets.
//!
//! Auto-generated by `cargo xt codegen` from minecraft-data.
//! Do not edit manually — changes will be overwritten.

use basalt_derive::{Decode, Encode, EncodedSize, packet};
use basalt_types::{Position, Uuid, Vec3f, Vec3f64, Vec3i16};

// -- Serverbound packets --

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x3a)]
pub struct ServerboundPlayArmAnimation {
    #[field(varint)]
    pub hand: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x28)]
pub struct ServerboundPlayEntityAction {
    #[field(varint)]
    pub entity_id: i32,
    #[field(varint)]
    pub action_id: i32,
    #[field(varint)]
    pub jump_boost: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x17)]
pub struct ServerboundPlayQueryEntityNbt {
    #[field(varint)]
    pub transaction_id: i32,
    #[field(varint)]
    pub entity_id: i32,
}

/// Switch enum used by [`ServerboundPlayUseEntity`].
#[derive(Debug, Clone, PartialEq, Encode, Decode, EncodedSize)]
pub enum ServerboundPlayUseEntityMouse {
    #[variant(id = 0)]
    Variant0 {
        #[field(varint)]
        hand: i32,
    },
    #[variant(id = 2)]
    Variant2 {
        x: f32,
        y: f32,
        z: f32,
        #[field(varint)]
        hand: i32,
    },
}

impl Default for ServerboundPlayUseEntityMouse {
    fn default() -> Self {
        Self::Variant0 {
            hand: Default::default(),
        }
    }
}
#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x18)]
pub struct ServerboundPlayUseEntity {
    #[field(varint)]
    pub target: i32,
    pub mouse: ServerboundPlayUseEntityMouse,
    pub sneaking: bool,
}

// -- Clientbound packets --

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x03)]
pub struct ClientboundPlayAnimation {
    #[field(varint)]
    pub entity_id: i32,
    pub animation: u8,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x5e)]
pub struct ClientboundPlayAttachEntity {
    pub entity_id: i32,
    pub vehicle_id: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x06)]
pub struct ClientboundPlayBlockBreakAnimation {
    #[field(varint)]
    pub entity_id: i32,
    pub location: Position,
    pub destroy_stage: i8,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x76)]
pub struct ClientboundPlayCollect {
    #[field(varint)]
    pub collected_entity_id: i32,
    #[field(varint)]
    pub collector_entity_id: i32,
    #[field(varint)]
    pub pickup_item_count: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1a)]
pub struct ClientboundPlayDamageEvent {
    #[field(varint)]
    pub entity_id: i32,
    #[field(varint)]
    pub source_type_id: i32,
    #[field(varint)]
    pub source_cause_id: i32,
    #[field(varint)]
    pub source_direct_id: i32,
    #[field(optional)]
    pub source_position: Option<Vec3f64>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x47)]
pub struct ClientboundPlayEntityDestroy {
    #[field(length = "varint", element = "varint")]
    pub entity_ids: Vec<i32>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x7d)]
pub struct ClientboundPlayEntityEffect {
    #[field(varint)]
    pub entity_id: i32,
    #[field(varint)]
    pub effect_id: i32,
    #[field(varint)]
    pub amplifier: i32,
    #[field(varint)]
    pub duration: i32,
    pub flags: u8,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x60)]
pub struct ClientboundPlayEntityEquipment {
    #[field(varint)]
    pub entity_id: i32,
    #[field(rest)]
    pub equipments: Vec<u8>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x4d)]
pub struct ClientboundPlayEntityHeadRotation {
    #[field(varint)]
    pub entity_id: i32,
    pub head_yaw: i8,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x32)]
pub struct ClientboundPlayEntityLook {
    #[field(varint)]
    pub entity_id: i32,
    pub yaw: i8,
    pub pitch: i8,
    pub on_ground: bool,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x5d)]
pub struct ClientboundPlayEntityMetadata {
    #[field(varint)]
    pub entity_id: i32,
    #[field(rest)]
    pub metadata: Vec<u8>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x30)]
pub struct ClientboundPlayEntityMoveLook {
    #[field(varint)]
    pub entity_id: i32,
    pub d_x: i16,
    pub d_y: i16,
    pub d_z: i16,
    pub yaw: i8,
    pub pitch: i8,
    pub on_ground: bool,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x6e)]
pub struct ClientboundPlayEntitySoundEffect {
    pub sound: Vec<u8>,
    #[field(varint)]
    pub sound_category: i32,
    #[field(varint)]
    pub entity_id: i32,
    pub volume: f32,
    pub pitch: f32,
    pub seed: i64,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x1f)]
pub struct ClientboundPlayEntityStatus {
    pub entity_id: i32,
    pub entity_status: i8,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x77)]
pub struct ClientboundPlayEntityTeleport {
    #[field(varint)]
    pub entity_id: i32,
    pub x: f64,
    pub y: f64,
    pub z: f64,
    pub yaw: i8,
    pub pitch: i8,
    pub on_ground: bool,
}

/// Inline data structure used by [`ClientboundPlayEntityUpdateAttributes`].
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayEntityUpdateAttributesPropertiesModifiers {
    pub uuid: String,
    pub amount: f64,
    pub operation: i8,
}

/// Inline data structure used by [`ClientboundPlayEntityUpdateAttributes`].
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayEntityUpdateAttributesProperties {
    #[field(varint)]
    pub key: i32,
    pub value: f64,
    #[field(length = "varint")]
    pub modifiers: Vec<ClientboundPlayEntityUpdateAttributesPropertiesModifiers>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x7c)]
pub struct ClientboundPlayEntityUpdateAttributes {
    #[field(varint)]
    pub entity_id: i32,
    #[field(length = "varint")]
    pub properties: Vec<ClientboundPlayEntityUpdateAttributesProperties>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x5f)]
pub struct ClientboundPlayEntityVelocity {
    #[field(varint)]
    pub entity_id: i32,
    pub velocity: Vec3i16,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x25)]
pub struct ClientboundPlayHurtAnimation {
    #[field(varint)]
    pub entity_id: i32,
    pub yaw: f32,
}

/// Inline data structure used by [`ClientboundPlayMoveMinecart`].
#[derive(Debug, Clone, Default, PartialEq, Encode, Decode, EncodedSize)]
pub struct ClientboundPlayMoveMinecartSteps {
    pub position: Vec3f,
    pub movement: Vec3f,
    pub yaw: f32,
    pub pitch: f32,
    pub weight: f32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x31)]
pub struct ClientboundPlayMoveMinecart {
    #[field(varint)]
    pub entity_id: i32,
    #[field(length = "varint")]
    pub steps: Vec<ClientboundPlayMoveMinecartSteps>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x2f)]
pub struct ClientboundPlayRelEntityMove {
    #[field(varint)]
    pub entity_id: i32,
    pub d_x: i16,
    pub d_y: i16,
    pub d_z: i16,
    pub on_ground: bool,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x48)]
pub struct ClientboundPlayRemoveEntityEffect {
    #[field(varint)]
    pub entity_id: i32,
    #[field(varint)]
    pub effect_id: i32,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x65)]
pub struct ClientboundPlaySetPassengers {
    #[field(varint)]
    pub entity_id: i32,
    #[field(length = "varint", element = "varint")]
    pub passengers: Vec<i32>,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x80)]
pub struct ClientboundPlaySetProjectilePower {
    #[field(varint)]
    pub id: i32,
    pub acceleration_power: f64,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x01)]
pub struct ClientboundPlaySpawnEntity {
    #[field(varint)]
    pub entity_id: i32,
    pub object_uuid: Uuid,
    #[field(varint)]
    pub r#type: i32,
    pub x: f64,
    pub y: f64,
    pub z: f64,
    pub pitch: i8,
    pub yaw: i8,
    pub head_pitch: i8,
    #[field(varint)]
    pub object_data: i32,
    pub velocity: Vec3i16,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x02)]
pub struct ClientboundPlaySpawnEntityExperienceOrb {
    #[field(varint)]
    pub entity_id: i32,
    pub x: f64,
    pub y: f64,
    pub z: f64,
    pub count: i16,
}

#[derive(Debug, Clone, Default, PartialEq)]
#[packet(id = 0x20)]
pub struct ClientboundPlaySyncEntityPosition {
    #[field(varint)]
    pub entity_id: i32,
    pub x: f64,
    pub y: f64,
    pub z: f64,
    pub dx: f64,
    pub dy: f64,
    pub dz: f64,
    pub yaw: f32,
    pub pitch: f32,
    pub on_ground: bool,
}