pub enum StateJudgement {
Valid,
InvalidAtPin(BlockError),
PrePin(BlockError),
}Expand description
The verdict on one block state, judged against the pin and the
DataVersion of the file that carries it.
Minecraft datafixes every structure .nbt it loads, against the
DataVersion the file declares — so “this id does not exist at the pin” is
only a defect when no datafix will run. A file declaring the pinned
DataVersion (or later) gets no fixes at all: its unknown block really does
load as AIR, which is how tk-bell-tower.nbt shipped a bell tower with no
bell ropes. A file declaring an older DataVersion is DataFixerUpper’s
business: prefabs/hero-temple-ruin-arch.nbt (DataVersion 2975) carries
minecraft:chain, which schema 4541 renames iron_chain, and loads
correctly — refusing it is a false positive, not rigor.
The rule is deliberately conservative in the one direction that stays
sound: an invalid id in a file whose DataVersion sits between the
responsible fixer’s schema and the pin would also load as air, but the
fixer schedule lives inside the proprietary jar and nothing in this repo
can read it — so pre-pin invalidity is a warning (DW0734), loud
enough to catch a typo that no fixer will ever map, and never a refusal of
a file the game loads fine.
Variants§
Valid
The pin has this exact state.
InvalidAtPin(BlockError)
Not a pinned state, and the file claims the pin (or later): no datafix will run, so the block loads as air. An error.
PrePin(BlockError)
Not a pinned state, but the file pre-dates the pin: load-time
datafixing is expected to migrate it. A warning (DW_STATE_PRE_PIN).