Skip to main content

Layer JSON Format

An Origin Layer is a collection of origins. Players choose one origin per enabled layer.

File Location

Layer JSON files go in data/<namespace>/origins/layer/ within your data pack.

For example, data/origins/origins/layer/origin.json has the ID origins:origin (this is the default layer).

Fields

FieldTypeDefaultDescription
orderIntegerInteger.MAX_VALUESort order in the selection screen; lower numbers appear first
originsList of Identifier / #tag / Conditioned Origin objectsrequiredOrigins included in this layer. Supports direct IDs, tags, and conditioned origins
enabledBooleantrueWhether this layer is enabled
gui_titleGUI TitleoptionalCustom titles for the selection/view screens
allow_randomBooleanfalseWhether to show a "random pick" option
allow_random_unchoosableBooleanfalseWhether the random pick includes unchoosable origins
exclude_randomList of Identifier[]Origin IDs excluded from the random pick
default_originIdentifieroptionalDefault origin ID for new players
auto_chooseBooleanfalseIf only one origin is available, whether to auto-choose it
hiddenBooleanfalseWhether to hide this layer from the "View Origin" screen

GUI Title

FieldTypeDefaultDescription
choose_originText ComponentoptionalOverrides the title text shown when choosing an origin
view_originText ComponentoptionalOverrides the title text shown when viewing an origin

Translation Key

Layer names use the language key: layer.<namespace>.<path>.name

Conditioned Origins

Not yet implemented

Conditioned Origins are not yet implemented in the Origins (NeoForge). They will be available in a future update. The documentation below is from the Fabric version and may change.

Within the origins List, you can mix string IDs with conditioned origin objects:

{
"condition": {
"type": "origins:and",
"conditions": [...]
},
"origins": [
"origins:special_origin"
]
}

Conditioned origin fields:

FieldTypeDescription
conditionEntity ConditionThe condition the player must fulfill
originsList of IdentifierOrigins shown when the condition is met

Examples

{
"order": 0,
"enabled": true,
"origins": [
"#origins:origin"
],
"allow_random": true,
"exclude_random": [
"origins:human"
]
}

A layer with a conditioned origin:

{
"order": 1,
"origins": [
"origins:human",
{
"condition": {
"type": "origins:origin",
"origin": "origins:human"
},
"origins": [
"origins:special_human_upgrade"
]
}
]
}
note

Key differences from the old version:

  • name field removed; use translation keys
  • replace field removed (the new registry system handles data overriding automatically)
  • missing_name and missing_description removed
  • loading_priority removed
  • gui_title sub-fields renamed to choose_origin / view_origin