From 8fd11c174d921a8085bb7e67ae62958e23d174cb Mon Sep 17 00:00:00 2001 From: mat Date: Sun, 22 Feb 2026 18:38:25 -0900 Subject: fix incorrect PalettedContainer::write impl --- .../src/plugins/packet/relative_updates.rs | 2 +- azalea-entity/src/plugin/mod.rs | 1 + azalea-world/src/bit_storage.rs | 2 +- azalea-world/src/chunk_storage.rs | 32 +++++++++++++++++++++- azalea-world/src/palette/container.rs | 11 ++++++-- azalea-world/src/palette/mod.rs | 2 +- 6 files changed, 43 insertions(+), 7 deletions(-) diff --git a/azalea-client/src/plugins/packet/relative_updates.rs b/azalea-client/src/plugins/packet/relative_updates.rs index d6367829..35218e7d 100644 --- a/azalea-client/src/plugins/packet/relative_updates.rs +++ b/azalea-client/src/plugins/packet/relative_updates.rs @@ -107,7 +107,7 @@ pub fn should_apply_entity_update( let this_client_updates_received = partial_entity_infos .updates_received - .get(&minecraft_entity_id) + .get(minecraft_entity_id) .copied(); let can_update = if let Some(updates_received) = updates_received { diff --git a/azalea-entity/src/plugin/mod.rs b/azalea-entity/src/plugin/mod.rs index 7c4f3ed4..bedb03b0 100644 --- a/azalea-entity/src/plugin/mod.rs +++ b/azalea-entity/src/plugin/mod.rs @@ -231,6 +231,7 @@ pub fn update_dimensions( } } +#[allow(clippy::type_complexity)] pub fn update_crouching( query: Query<(&mut Crouching, &Pose), (Without, With)>, ) { diff --git a/azalea-world/src/bit_storage.rs b/azalea-world/src/bit_storage.rs index 44705f88..cefc0aeb 100644 --- a/azalea-world/src/bit_storage.rs +++ b/azalea-world/src/bit_storage.rs @@ -71,7 +71,7 @@ const MAGIC: [(i32, i32, u32); 64] = [ ]; /// A compact list of integers with the given number of bits per entry. -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Default, PartialEq)] pub struct BitStorage { pub data: Box<[u64]>, bits: usize, diff --git a/azalea-world/src/chunk_storage.rs b/azalea-world/src/chunk_storage.rs index 23da5af5..3f410773 100644 --- a/azalea-world/src/chunk_storage.rs +++ b/azalea-world/src/chunk_storage.rs @@ -79,7 +79,7 @@ pub struct Chunk { } /// A section of a chunk, i.e. a 16*16*16 block area. -#[derive(Clone, Debug, Default)] +#[derive(Clone, Debug, Default, PartialEq)] pub struct Section { /// The number of non-empty blocks in the section, as sent to us by the /// server. @@ -579,6 +579,7 @@ pub fn section_index(y: i32, min_y: i32) -> u32 { #[cfg(test)] mod tests { use super::*; + use crate::palette::SectionPos; #[test] fn test_section_index() { @@ -639,4 +640,33 @@ mod tests { ChunkPos::new(2, -1), ); } + + #[test] + fn serialize_and_deserialize_section() { + let mut states = PalettedContainer::new(); + + states.set( + SectionPos::new(1, 2, 3), + BlockState::try_from(BlockState::MAX_STATE).unwrap(), + ); + states.set( + SectionPos::new(4, 5, 6), + BlockState::try_from(BlockState::MAX_STATE).unwrap(), + ); + let biomes = PalettedContainer::new(); + let section = Section { + block_count: 2, + states, + biomes, + }; + + let mut buf = Vec::new(); + section.azalea_write(&mut buf).unwrap(); + + let mut cur = Cursor::new(buf.as_slice()); + let deserialized_section = Section::azalea_read(&mut cur).unwrap(); + assert_eq!(cur.position(), buf.len() as u64); + + assert_eq!(section, deserialized_section); + } } diff --git a/azalea-world/src/palette/container.rs b/azalea-world/src/palette/container.rs index 4e4e5595..43262a3d 100644 --- a/azalea-world/src/palette/container.rs +++ b/azalea-world/src/palette/container.rs @@ -12,7 +12,7 @@ use tracing::{debug, warn}; use super::{Palette, PaletteKind}; use crate::BitStorage; -#[derive(Clone, Debug)] +#[derive(Clone, Debug, PartialEq)] pub struct PalettedContainer { pub bits_per_entry: u8, /// This is usually a list of unique values that appear in the container so @@ -25,7 +25,9 @@ pub struct PalettedContainer { pub storage: BitStorage, } -pub trait PalletedContainerKind: Copy + Clone + Debug + Default + TryFrom + Into { +pub trait PalletedContainerKind: + Copy + Clone + Debug + Default + PartialEq + TryFrom + Into +{ type SectionPos: SectionPos; fn size_bits() -> usize; @@ -295,7 +297,10 @@ impl PalettedContainer { pub fn write(&self, buf: &mut impl Write) -> io::Result<()> { self.bits_per_entry.azalea_write(buf)?; self.palette.write(buf)?; - self.storage.data.azalea_write(buf)?; + for word in &self.storage.data { + word.azalea_write(buf)?; + } + Ok(()) } } diff --git a/azalea-world/src/palette/mod.rs b/azalea-world/src/palette/mod.rs index 11b38f45..067c68c4 100644 --- a/azalea-world/src/palette/mod.rs +++ b/azalea-world/src/palette/mod.rs @@ -12,7 +12,7 @@ use azalea_buf::{AzBufVar, BufReadError}; pub use container::*; /// A representation of the different types of chunk palettes Minecraft uses. -#[derive(Clone, Debug)] +#[derive(Clone, Debug, PartialEq)] pub enum Palette { /// ID of the corresponding entry in its global palette SingleValue(S), -- cgit v1.2.3