Pumpkin-MC/Pumpkin · error · TemplateError

Missing required field

Error message

Missing required field: {0}

What it means

Variant `MissingField` of `TemplateError` in pumpkin-world's structure template loader. It is thrown when a structure template's NBT is readable but lacks a required field (e.g. `size`, `palette`, `blocks`, `entities`) expected by the template schema.

Solutions

  1. The error names the missing field — add it to the template NBT with a valid value
  2. Re-export the structure in-game so all required fields are written
  3. Compare the file's fields against the vanilla structure template schema

Example fix

// before: template NBT missing a key
{ "palette": [...], "blocks": [...] }
// after: include required fields
{ "size": [3, 3, 3], "palette": [...], "blocks": [...], "entities": [] }
Defensive patterns

Strategy: validation

Validate before calling

const REQUIRED: &[&str] = &["size", "palette", "blocks"];
// after NBT parse, before constructing StructureTemplate:
for key in REQUIRED {
    if template_nbt.get(key).is_none() { return Err(format!("template missing {key}")); }
}

Type guard

fn template_has_required_fields(nbt: &NbtMap) -> bool {
    ["size", "palette", "blocks"].iter().all(|k| nbt.contains_key(*k))
}

Try / catch

match StructureTemplate::load(path) {
    Err(TemplateError::MissingField(f)) => error!("structure {path} missing field {f}"),
    other => other?,
}

Prevention

When it happens

Trigger: Parsing a structure template NBT that parses successfully but omits a required key the `StructureTemplate` deserializer demands.

Common situations: Hand-crafted or third-party-exported structure files missing fields, structure files from older game versions with different schemas, truncated custom datapack structures.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09). Data as JSON: /api/errors/7198a4dd3e4a5411. Report an issue: GitHub.

Appendix: source

Thrown at crates/pumpkin-world/src/generation/structure/template/structure_template.rs:22

//! into a runtime representation with palettes, entities, block info, and transformations.

use std::io::Cursor;

use pumpkin_data::{Mirror, Rotation};
use pumpkin_nbt::{compound::NbtCompound, nbt_compress::read_gzip_compound_tag, tag::NbtTag};
use pumpkin_util::math::{block_box::BlockBox, vector3::Vector3};
use thiserror::Error;

use super::processor::StructureProcessor;
use crate::generation::structure::structures::jigsaw::JigsawJointType;

/// Errors that can occur when loading or saving a structure template.
#[derive(Debug, Error)]
pub enum TemplateError {
    #[error("Failed to decompress NBT: {0}")]
    NbtError(#[from] pumpkin_nbt::Error),

    #[error("Missing required field: {0}")]
    MissingField(&'static str),

    #[error("Invalid field type for {0}")]
    InvalidFieldType(&'static str),

    #[error("Invalid palette index: {0}")]
    InvalidPaletteIndex(u32),
}

/// Settings used when placing, transforming, or querying a [`StructureTemplate`].
#[derive(Clone, Debug)]
pub struct StructurePlaceSettings {
    pub mirror: Mirror,
    pub rotation: Rotation,
    pub rotation_pivot: Vector3<i32>,
    pub bounding_box: Option<BlockBox>,
    pub ignore_entities: bool,
    pub apply_waterlogging: bool,

View on GitHub (pinned to 8d4639e25a)