diff --git a/azalea-client/src/connect.rs b/azalea-client/src/connect.rs index d7788593..b8b6e372 100755 --- a/azalea-client/src/connect.rs +++ b/azalea-client/src/connect.rs @@ -381,6 +381,9 @@ impl Client { GamePacket::ClientboundGameEventPacket(p) => { println!("Got game event packet {:?}", p); } + GamePacket::ClientboundLevelParticlesPacket(p) => { + println!("Got level particles packet {:?}", p); + } _ => panic!("Unexpected packet {:?}", packet), } } diff --git a/azalea-protocol/src/packets/game/clientbound_level_particles_packet.rs b/azalea-protocol/src/packets/game/clientbound_level_particles_packet.rs index 43c3b31a..a3538598 100644 --- a/azalea-protocol/src/packets/game/clientbound_level_particles_packet.rs +++ b/azalea-protocol/src/packets/game/clientbound_level_particles_packet.rs @@ -1,7 +1,9 @@ -use crate::mc_buf::ParticleData; -use packet_macros::{GamePacket, McBuf}; +use std::io::{Read, Write}; -#[derive(Clone, Debug, McBuf, GamePacket)] +use crate::mc_buf::{McBufReadable, McBufWritable, ParticleData}; +use packet_macros::GamePacket; + +#[derive(Clone, Debug, GamePacket)] pub struct ClientboundLevelParticlesPacket { pub particle_id: u32, pub override_limiter: bool, @@ -15,3 +17,40 @@ pub struct ClientboundLevelParticlesPacket { pub count: i32, pub data: ParticleData, } + +impl McBufReadable for ClientboundLevelParticlesPacket { + fn read_into(buf: &mut impl Read) -> Result { + let particle_id = u32::read_into(buf)?; + let override_limiter = bool::read_into(buf)?; + let x = f64::read_into(buf)?; + let y = f64::read_into(buf)?; + let z = f64::read_into(buf)?; + let x_dist = f32::read_into(buf)?; + let y_dist = f32::read_into(buf)?; + let z_dist = f32::read_into(buf)?; + let max_speed = f32::read_into(buf)?; + let count = i32::read_into(buf)?; + + let data = ParticleData::read_from_particle_id(buf, particle_id)?; + + Ok(Self { + particle_id, + override_limiter, + x, + y, + z, + x_dist, + y_dist, + z_dist, + max_speed, + count, + data, + }) + } +} + +impl McBufWritable for ClientboundLevelParticlesPacket { + fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + todo!(); + } +}