Skip to content

Variant Reference

TL;DR

variants/<name>.json is a named, reusable weighted block list. A palette entry reaches it through its variant key. The same 128-slot rule applies as for an inline blocks list. code review game test

Keys

Key code review Required Meaning
blocks yes A list of {random, block} entries. See the 128-slot rule

Example

variants/stonebrick.json, shipped with the mod
{
  "blocks": [
    { "random": 9, "block": "minecraft:cracked_stone_bricks" },
    { "random": 8, "block": "minecraft:mossy_stone_bricks" },
    { "random": 1000, "block": "minecraft:stone_bricks" }
  ]
}

That gives mostly plain stone bricks, with the occasional cracked or mossy one. A palette reaches it like this:

{ "char": "θ", "variant": "stonebrick" }

Why a variant beats an inline blocks list

Reuse. Ten palettes can name stonebrick instead of repeating the same weighted list ten times, and changing the variant changes all ten.

A variant name that does not resolve throws

CompiledPalette throws Invalid palette entry for '<char>'! when the named variant is missing. The character, not the variant, is what the message names, so the file to look at is the palette rather than the variant. Check the namespace as well as the spelling. code review

The weights are slots, not odds

A variant's random numbers fill a 128-entry table. Once the table is full the remaining entries are unreachable, and nothing is logged. The 1000 above is not a probability, it is "take every slot the first two did not". game test

See also