schematic_mesher/resolver/
mod.rs

1//! Block state and model resolution.
2//!
3//! This module handles resolving block states to concrete model variants
4//! and resolving model inheritance chains.
5
6pub mod state_resolver;
7pub mod model_resolver;
8pub mod multipart;
9
10pub use state_resolver::StateResolver;
11pub use model_resolver::ModelResolver;
12
13use crate::resource_pack::{BlockModel, BlockstateDefinition, ModelVariant, ResourcePack};
14use crate::types::InputBlock;
15use crate::error::Result;
16
17/// A resolved model ready for meshing.
18#[derive(Debug, Clone)]
19pub struct ResolvedModel {
20    /// The fully resolved block model (with inherited elements/textures).
21    pub model: BlockModel,
22    /// Block-level transform (x/y rotation, uvlock).
23    pub transform: crate::types::BlockTransform,
24}
25
26/// Resolve a block to its model(s).
27pub fn resolve_block(
28    pack: &ResourcePack,
29    block: &InputBlock,
30) -> Result<Vec<ResolvedModel>> {
31    let state_resolver = StateResolver::new(pack);
32    let model_resolver = ModelResolver::new(pack);
33
34    // Get model variants from blockstate
35    let variants = state_resolver.resolve(block)?;
36
37    // Resolve each variant's model inheritance
38    let mut resolved = Vec::new();
39    for variant in variants {
40        let model = model_resolver.resolve(&variant.model)?;
41        resolved.push(ResolvedModel {
42            model,
43            transform: crate::types::BlockTransform::new(
44                variant.x,
45                variant.y,
46                variant.uvlock,
47            ),
48        });
49    }
50
51    Ok(resolved)
52}