mirror of
https://github.com/neocturne/MinedMap.git
synced 2025-03-04 17:23:33 +01:00
world: fix deserialize of unpopulated 1.18+ sections
This commit is contained in:
parent
42a800e08c
commit
003b48951b
2 changed files with 51 additions and 28 deletions
|
@ -112,27 +112,36 @@ impl<'a> Chunk<'a> {
|
|||
let mut section_map = BTreeMap::new();
|
||||
|
||||
for section in sections {
|
||||
section_map.insert(
|
||||
SectionY(section.y),
|
||||
(
|
||||
SectionV1_13::new(
|
||||
data_version,
|
||||
section.block_states.data.as_deref(),
|
||||
§ion.block_states.palette,
|
||||
block_types,
|
||||
)
|
||||
.with_context(|| format!("Failed to load section at Y={}", section.y))?,
|
||||
BiomesV1_18::new(
|
||||
section.biomes.data.as_deref(),
|
||||
§ion.biomes.palette,
|
||||
biome_types,
|
||||
)
|
||||
.with_context(|| format!("Failed to load section biomes at Y={}", section.y))?,
|
||||
BlockLight::new(section.block_light.as_deref()).with_context(|| {
|
||||
format!("Failed to load section block light at Y={}", section.y)
|
||||
})?,
|
||||
),
|
||||
);
|
||||
match §ion.section {
|
||||
de::SectionV1_18Variants::V1_18 {
|
||||
block_states,
|
||||
biomes,
|
||||
block_light,
|
||||
} => {
|
||||
section_map.insert(
|
||||
SectionY(section.y),
|
||||
(
|
||||
SectionV1_13::new(
|
||||
data_version,
|
||||
block_states.data.as_deref(),
|
||||
&block_states.palette,
|
||||
block_types,
|
||||
)
|
||||
.with_context(|| {
|
||||
format!("Failed to load section at Y={}", section.y)
|
||||
})?,
|
||||
BiomesV1_18::new(biomes.data.as_deref(), &biomes.palette, biome_types)
|
||||
.with_context(|| {
|
||||
format!("Failed to load section biomes at Y={}", section.y)
|
||||
})?,
|
||||
BlockLight::new(block_light.as_deref()).with_context(|| {
|
||||
format!("Failed to load section block light at Y={}", section.y)
|
||||
})?,
|
||||
),
|
||||
);
|
||||
}
|
||||
de::SectionV1_18Variants::Empty {} => {}
|
||||
};
|
||||
}
|
||||
|
||||
Ok(Chunk::V1_18 { section_map })
|
||||
|
|
|
@ -28,19 +28,33 @@ pub struct BiomesV1_18 {
|
|||
pub data: Option<fastnbt::LongArray>,
|
||||
}
|
||||
|
||||
/// Variable part of a [SectionV1_18]
|
||||
#[derive(Debug, Deserialize)]
|
||||
#[serde(untagged)]
|
||||
pub enum SectionV1_18Variants {
|
||||
/// Populated 1.18+ section
|
||||
V1_18 {
|
||||
/// Block type data
|
||||
block_states: BlockStatesV1_18,
|
||||
/// Biome data
|
||||
biomes: BiomesV1_18,
|
||||
/// Block light data
|
||||
#[serde(rename = "BlockLight")]
|
||||
block_light: Option<fastnbt::ByteArray>,
|
||||
},
|
||||
/// Empty section
|
||||
Empty {},
|
||||
}
|
||||
|
||||
/// Element of the 1.18+ `sections` list found in a [Chunk]
|
||||
#[derive(Debug, Deserialize)]
|
||||
pub struct SectionV1_18 {
|
||||
/// Y coordinate
|
||||
#[serde(rename = "Y")]
|
||||
pub y: i32,
|
||||
/// Block type data
|
||||
pub block_states: BlockStatesV1_18,
|
||||
/// Biome data
|
||||
pub biomes: BiomesV1_18,
|
||||
/// Block light data
|
||||
#[serde(rename = "BlockLight")]
|
||||
pub block_light: Option<fastnbt::ByteArray>,
|
||||
/// Variable part of section
|
||||
#[serde(flatten)]
|
||||
pub section: SectionV1_18Variants,
|
||||
}
|
||||
|
||||
/// Version-specific part of a pre-1.18 [Section](SectionV0)
|
||||
|
|
Loading…
Add table
Reference in a new issue