From f62a681474df698d87deb43c71238b83a26f0f1f Mon Sep 17 00:00:00 2001 From: mat Date: Sat, 7 May 2022 21:44:11 -0500 Subject: [PATCH] remove entities packet --- azalea-client/src/connect.rs | 3 +++ azalea-protocol/src/mc_buf/read.rs | 12 ++++++++++++ azalea-protocol/src/mc_buf/write.rs | 11 +++++++++++ .../game/clientbound_remove_entities_packet.rs | 7 +++++++ azalea-protocol/src/packets/game/mod.rs | 2 ++ 5 files changed, 35 insertions(+) create mode 100644 azalea-protocol/src/packets/game/clientbound_remove_entities_packet.rs diff --git a/azalea-client/src/connect.rs b/azalea-client/src/connect.rs index 8713ccda..5c2ee9b8 100755 --- a/azalea-client/src/connect.rs +++ b/azalea-client/src/connect.rs @@ -304,6 +304,9 @@ impl Client { .write(ServerboundKeepAlivePacket { id: p.id }.get()) .await; } + GamePacket::ClientboundRemoveEntitiesPacket(p) => { + println!("Got remove entities packet {:?}", p); + } _ => panic!("Unexpected packet {:?}", packet), } println!(); diff --git a/azalea-protocol/src/mc_buf/read.rs b/azalea-protocol/src/mc_buf/read.rs index 991bf53b..98a3ee53 100755 --- a/azalea-protocol/src/mc_buf/read.rs +++ b/azalea-protocol/src/mc_buf/read.rs @@ -360,6 +360,18 @@ impl McBufVarReadable for u16 { } } +// Vec varint +impl McBufVarReadable for Vec { + fn var_read_into(buf: &mut impl Read) -> Result { + let length = buf.read_varint()? as usize; + let mut contents = Vec::with_capacity(length); + for _ in 0..length { + contents.push(T::var_read_into(buf)?); + } + Ok(contents) + } +} + // i64 impl McBufReadable for i64 { fn read_into(buf: &mut impl Read) -> Result { diff --git a/azalea-protocol/src/mc_buf/write.rs b/azalea-protocol/src/mc_buf/write.rs index 66f129f1..e3e7a2be 100755 --- a/azalea-protocol/src/mc_buf/write.rs +++ b/azalea-protocol/src/mc_buf/write.rs @@ -257,6 +257,17 @@ impl McBufVarWritable for u16 { } } +// Vec varint +impl McBufVarWritable for Vec { + fn var_write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { + u32::var_write_into(&(self.len() as u32), buf)?; + for i in self { + i.var_write_into(buf)?; + } + Ok(()) + } +} + // u8 impl McBufWritable for u8 { fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> { diff --git a/azalea-protocol/src/packets/game/clientbound_remove_entities_packet.rs b/azalea-protocol/src/packets/game/clientbound_remove_entities_packet.rs new file mode 100644 index 00000000..265d0c64 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_remove_entities_packet.rs @@ -0,0 +1,7 @@ +use packet_macros::GamePacket; + +#[derive(Clone, Debug, GamePacket)] +pub struct ClientboundRemoveEntitiesPacket { + #[var] + pub entity_ids: Vec, +} diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index 9f1bce0d..dd3a7527 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -20,6 +20,7 @@ pub mod clientbound_player_abilities_packet; pub mod clientbound_player_info_packet; pub mod clientbound_player_position_packet; pub mod clientbound_recipe_packet; +pub mod clientbound_remove_entities_packet; pub mod clientbound_rotate_head_packet; pub mod clientbound_set_carried_item_packet; pub mod clientbound_set_chunk_cache_center; @@ -68,6 +69,7 @@ declare_state_packets!( 0x36: clientbound_player_info_packet::ClientboundPlayerInfoPacket, 0x38: clientbound_player_position_packet::ClientboundPlayerPositionPacket, 0x39: clientbound_recipe_packet::ClientboundRecipePacket, + 0x3a: clientbound_remove_entities_packet::ClientboundRemoveEntitiesPacket, 0x3e: clientbound_rotate_head_packet::ClientboundRotateHeadPacket, 0x48: clientbound_set_carried_item_packet::ClientboundSetCarriedItemPacket, 0x49: clientbound_set_chunk_cache_center::ClientboundSetChunkCacheCenterPacket,