58 lines
1.3 KiB
Rust
58 lines
1.3 KiB
Rust
use pumpkin_macros::packet;
|
|
use serde::Serialize;
|
|
|
|
use crate::{uuid::UUID, VarInt};
|
|
|
|
#[derive(Serialize)]
|
|
#[packet(0x01)]
|
|
pub struct CSpawnEntity {
|
|
entity_id: VarInt,
|
|
entity_uuid: UUID,
|
|
typ: VarInt,
|
|
x: f64,
|
|
y: f64,
|
|
z: f64,
|
|
pitch: u8, // angle
|
|
yaw: u8, // angle
|
|
head_yaw: u8, // angle
|
|
data: VarInt,
|
|
velocity_x: i16,
|
|
velocity_y: i16,
|
|
velocity_z: i16,
|
|
}
|
|
|
|
impl CSpawnEntity {
|
|
#[expect(clippy::too_many_arguments)]
|
|
pub fn new(
|
|
entity_id: VarInt,
|
|
entity_uuid: UUID,
|
|
typ: VarInt,
|
|
x: f64,
|
|
y: f64,
|
|
z: f64,
|
|
pitch: f32, // angle
|
|
yaw: f32, // angle
|
|
head_yaw: f32, // angle
|
|
data: VarInt,
|
|
velocity_x: f32,
|
|
velocity_y: f32,
|
|
velocity_z: f32,
|
|
) -> Self {
|
|
Self {
|
|
entity_id,
|
|
entity_uuid,
|
|
typ,
|
|
x,
|
|
y,
|
|
z,
|
|
pitch: (pitch * 256.0 / 360.0).floor() as u8,
|
|
yaw: (yaw * 256.0 / 360.0).floor() as u8,
|
|
head_yaw: (head_yaw * 256.0 / 360.0).floor() as u8,
|
|
data,
|
|
velocity_x: (velocity_x.clamp(-3.9, 3.9) * 8000.0) as i16,
|
|
velocity_y: (velocity_y.clamp(-3.9, 3.9) * 8000.0) as i16,
|
|
velocity_z: (velocity_z.clamp(-3.9, 3.9) * 8000.0) as i16,
|
|
}
|
|
}
|
|
}
|