Each child of the top level object is an array of vein types. The key for each array of vein types should be a string containing the dimension they should spawn in (e.g.
"0" is the key for the overworld array and
"-1" is the key for the nether array).
Each element of the array is an entry for a vein type. Each vein type has several properties:
ore: The ore blockstate (e.g. coal ore, see Blockstate Representation)
toReplace: The blockstate to replace in the world (e.g. stone, see Blockstate Representation)
minY: The minimum Y level that the ore can generate at.
maxY: The maximum Y level that the ore can generate at.
size: The size of the ore vein. (Note: This is not the number of blocks that will generate in the vein)
chance: The chance that the large vein will generate in a given chunk (
1/chance% chance per chunk). The higher the
chancenumber, the less often the ore will generate.
toReplace properties of each vein type are blockstates. They contain two sub-properties:
id: The ID of the block in the form of
state: An object containing all the properties of the blockstate. These properties can be seen by using F3 to open the debug menu and looking a the block you want. The properties will appear below the ID of the block. If there are no properties displayed, the
stateproperty should be an empty object.