From 1a3f097680b70ea912dc9e1734c123b3d105fc85 Mon Sep 17 00:00:00 2001 From: ice_iix Date: Thu, 30 Dec 2021 15:34:47 -0800 Subject: [PATCH] world: support single-valued palettes --- src/world/mod.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/world/mod.rs b/src/world/mod.rs index 123bfca..7542ebd 100644 --- a/src/world/mod.rs +++ b/src/world/mod.rs @@ -1060,9 +1060,15 @@ impl World { println!("bit_size = {:?}", bit_size); let mut mappings: HashMap> = HashMap::with_hasher(BuildHasherDefault::default()); + let mut single_value: Option = None; if bit_size == 0 { - bit_size = 13; - // TODO: handle single-valued palette (bits per entry is equal to 0) for protocol_version >= 757 + if self.protocol_version >= 757 { + // Single-valued palette + single_value = Some(VarInt::read_from(&mut data)?.0.try_into().unwrap()); + println!("single_value = {:?}", single_value); + } else { + bit_size = 13; + } } else { let count = VarInt::read_from(&mut data)?.0; // TODO: handle direct palettes, bit_size >= 9 for block states @@ -1086,7 +1092,7 @@ impl World { println!("m = {:?}", m); for bi in 0..4096 { - let id = m.get(bi); + let id = single_value.unwrap_or_else(|| m.get(bi)); println!("bi={:?} id={:?}", bi, id); section.blocks.set( bi,