From df557ed4111fc7d1b3786783f42cdbfcffcadcb2 Mon Sep 17 00:00:00 2001 From: GStudiosX2 <76548041+GStudiosX2@users.noreply.github.com> Date: Wed, 3 Jun 2026 07:28:40 +0100 Subject: [PATCH 1/3] [fix] palette remove_block not updating count as it's copied --- src/world/format/src/palette.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/world/format/src/palette.rs b/src/world/format/src/palette.rs index 7fc9fbf7..e16993d6 100644 --- a/src/world/format/src/palette.rs +++ b/src/world/format/src/palette.rs @@ -163,7 +163,7 @@ impl BlockPalette { idx, ); - let (_, count) = &mut self.palette[idx].unwrap(); + let (_, count) = self.palette[idx].as_mut().unwrap(); if count.get() == 1 { self.palette[idx] = None; From 8626a56cba7181a7ad6bad44fbd06a4109a62edd Mon Sep 17 00:00:00 2001 From: GStudiosX2 <76548041+GStudiosX2@users.noreply.github.com> Date: Wed, 3 Jun 2026 07:47:59 +0100 Subject: [PATCH 2/3] [chore] add tests --- src/world/format/src/palette.rs | 36 ++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/world/format/src/palette.rs b/src/world/format/src/palette.rs index e16993d6..aae1bb3d 100644 --- a/src/world/format/src/palette.rs +++ b/src/world/format/src/palette.rs @@ -201,7 +201,12 @@ impl BlockPalette { #[cfg(test)] mod tests { - use crate::palette::BlockPalette; + use std::num::NonZeroU16; + + use temper_macros::block; + + use crate::palette::{BlockPalette, BlockPaletteResult}; + use temper_core::block_state_id::BlockStateId; #[test] fn test_bit_width_calc() { @@ -217,4 +222,33 @@ mod tests { assert_eq!(BlockPalette::bit_width_for_len(len_d), 4); assert_eq!(BlockPalette::bit_width_for_len(len_e), 8); } + + #[test] + fn test_add_block() { + let mut palette = BlockPalette::new(); + match palette.add_block_with_count(block!("stone"), NonZeroU16::new(2).unwrap()) { + BlockPaletteResult::Normal(idx) => { + assert_eq!(idx, 1); + assert_eq!(palette.len(), 2); + assert_eq!(palette.block_count(), 2); + }, + BlockPaletteResult::ShouldResize(_, _) => unreachable!(), + BlockPaletteResult::ConvertToUniform(_) => unreachable!(), + } + } + + #[test] + fn test_remove_block() { + let mut palette = BlockPalette::new(); + match palette.add_block_with_count(block!("stone"), NonZeroU16::new(2).unwrap()) { + BlockPaletteResult::Normal(idx) => { + assert_eq!(idx, 1); + assert_eq!(palette.block_count(), 2); + palette.remove_block(idx); + assert_eq!(palette.block_count(), 1, "expected block count to be 1 after remove_block"); + }, + BlockPaletteResult::ShouldResize(_, _) => unreachable!(), + BlockPaletteResult::ConvertToUniform(_) => unreachable!(), + } + } } From 1f4d7cce0ea5e465019d1eb257516635078d22c8 Mon Sep 17 00:00:00 2001 From: GStudiosX2 <76548041+GStudiosX2@users.noreply.github.com> Date: Wed, 3 Jun 2026 07:49:16 +0100 Subject: [PATCH 3/3] [chore] cargo fmt --- src/world/format/src/palette.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/world/format/src/palette.rs b/src/world/format/src/palette.rs index aae1bb3d..ac68bd33 100644 --- a/src/world/format/src/palette.rs +++ b/src/world/format/src/palette.rs @@ -231,7 +231,7 @@ mod tests { assert_eq!(idx, 1); assert_eq!(palette.len(), 2); assert_eq!(palette.block_count(), 2); - }, + } BlockPaletteResult::ShouldResize(_, _) => unreachable!(), BlockPaletteResult::ConvertToUniform(_) => unreachable!(), } @@ -245,8 +245,12 @@ mod tests { assert_eq!(idx, 1); assert_eq!(palette.block_count(), 2); palette.remove_block(idx); - assert_eq!(palette.block_count(), 1, "expected block count to be 1 after remove_block"); - }, + assert_eq!( + palette.block_count(), + 1, + "expected block count to be 1 after remove_block" + ); + } BlockPaletteResult::ShouldResize(_, _) => unreachable!(), BlockPaletteResult::ConvertToUniform(_) => unreachable!(), }