Entity, trade & variant registries
Registries that describe mobs’ appearance variants, what villagers sell, and the spawners that challenge players.
Overview
Each field table below is inferred from every vanilla definition in the game data rather than transcribed, so “required” means the field appears in all vanilla entries and a fraction means it is optional in practice. Examples are real vanilla files. Regenerate with tools/registry_pages.py.
This page documents 10 registries. For the complete list of ids in every registry see Every registry; for the component system these often plug into see Item data components.
wolf_variant 1.20.5+
A wolf appearance variant: textures and biome spawn conditions. The first mob to get data-driven variants.
Confirmed against game data: the registry first appears in 1.20.5. See Registry version matrix.
Vanilla ships 9 wolf_variant definitions. Files live at data/<namespace>/wolf_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
assets | object | required |
baby_assets | object | required |
spawn_conditions | list | required |
Vanilla example
data/minecraft/wolf_variant/ashen.json
{
"assets": {
"angry": "minecraft:entity/wolf/wolf_ashen_angry",
"tame": "minecraft:entity/wolf/wolf_ashen_tame",
"wild": "minecraft:entity/wolf/wolf_ashen"
},
"baby_assets": {
"angry": "minecraft:entity/wolf/wolf_ashen_angry_baby",
"tame": "minecraft:entity/wolf/wolf_ashen_tame_baby",
"wild": "minecraft:entity/wolf/wolf_ashen_baby"
},
"spawn_conditions": [
{
"condition": {
"type": "minecraft:biome",
"biomes": "minecraft:snowy_taiga"
},
"priority": 1
}
]
}
cat_variant 1.21.5+
A cat appearance variant: texture and spawn conditions. Mob variants are data-driven from 1.21.
The cat_variant registry itself is present as far back as 1.19; the version chip above is when it became data-pack writable. Measured from game data — see Registry version matrix.
Vanilla ships 11 cat_variant definitions. Files live at data/<namespace>/cat_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
asset_id | string | required e.g. minecraft:entity/cat/cat_all_black |
baby_asset_id | string | required e.g. minecraft:entity/cat/cat_all_black_baby |
spawn_conditions | list | required |
Vanilla example
data/minecraft/cat_variant/all_black.json
{
"asset_id": "minecraft:entity/cat/cat_all_black",
"baby_asset_id": "minecraft:entity/cat/cat_all_black_baby",
"spawn_conditions": [
{
"condition": {
"type": "minecraft:structure",
"structures": "#minecraft:cats_spawn_as_black"
},
"priority": 1
},
{
"condition": {
"type": "minecraft:moon_brightness",
"range": {
"min": 0.9
}
},
"priority": 0
}
]
}
pig_variant 1.21.5+
A pig appearance variant. Part of the variant rollout.
Confirmed against game data: the registry first appears in 1.21.5. See Registry version matrix.
Vanilla ships 3 pig_variant definitions. Files live at data/<namespace>/pig_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
asset_id | string | required e.g. minecraft:entity/pig/pig_cold |
baby_asset_id | string | required e.g. minecraft:entity/pig/pig_cold_baby |
spawn_conditions | list | required |
model | string | 1/3 entries e.g. cold |
Vanilla example
data/minecraft/pig_variant/cold.json
{
"asset_id": "minecraft:entity/pig/pig_cold",
"baby_asset_id": "minecraft:entity/pig/pig_cold_baby",
"model": "cold",
"spawn_conditions": [
{
"condition": {
"type": "minecraft:biome",
"biomes": "#minecraft:spawns_cold_variant_farm_animals"
},
"priority": 1
}
]
}
cow_variant 1.21.5+
A cow appearance variant. Part of the variant rollout.
Confirmed against game data: the registry first appears in 1.21.5. See Registry version matrix.
Vanilla ships 3 cow_variant definitions. Files live at data/<namespace>/cow_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
asset_id | string | required e.g. minecraft:entity/cow/cow_cold |
baby_asset_id | string | required e.g. minecraft:entity/cow/cow_cold_baby |
spawn_conditions | list | required |
model | string | 2/3 entries e.g. cold |
Vanilla example
data/minecraft/cow_variant/cold.json
{
"asset_id": "minecraft:entity/cow/cow_cold",
"baby_asset_id": "minecraft:entity/cow/cow_cold_baby",
"model": "cold",
"spawn_conditions": [
{
"condition": {
"type": "minecraft:biome",
"biomes": "#minecraft:spawns_cold_variant_farm_animals"
},
"priority": 1
}
]
}
chicken_variant 1.21.5+
A chicken appearance variant. Part of the variant rollout.
Confirmed against game data: the registry first appears in 1.21.5. See Registry version matrix.
Vanilla ships 3 chicken_variant definitions. Files live at data/<namespace>/chicken_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
asset_id | string | required e.g. minecraft:entity/chicken/chicken_cold |
baby_asset_id | string | required e.g. minecraft:entity/chicken/chicken_cold_baby |
spawn_conditions | list | required |
model | string | 1/3 entries e.g. cold |
Vanilla example
data/minecraft/chicken_variant/cold.json
{
"asset_id": "minecraft:entity/chicken/chicken_cold",
"baby_asset_id": "minecraft:entity/chicken/chicken_cold_baby",
"model": "cold",
"spawn_conditions": [
{
"condition": {
"type": "minecraft:biome",
"biomes": "#minecraft:spawns_cold_variant_farm_animals"
},
"priority": 1
}
]
}
frog_variant 1.21.5+
A frog appearance variant. The original variant registry.
The frog_variant registry itself is present as far back as 1.19; the version chip above is when it became data-pack writable. Measured from game data — see Registry version matrix.
Vanilla ships 3 frog_variant definitions. Files live at data/<namespace>/frog_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
asset_id | string | required e.g. minecraft:entity/frog/frog_cold |
spawn_conditions | list | required |
Vanilla example
data/minecraft/frog_variant/cold.json
{
"asset_id": "minecraft:entity/frog/frog_cold",
"spawn_conditions": [
{
"condition": {
"type": "minecraft:biome",
"biomes": "#minecraft:spawns_cold_variant_frogs"
},
"priority": 1
}
]
}
painting_variant 1.21+
A painting: its texture asset, dimensions and whether it appears in the creative menu. Custom paintings are pure data plus a texture.
The painting_variant registry itself is present as far back as 1.19; the version chip above is when it became data-pack writable. Measured from game data — see Registry version matrix.
Vanilla ships 51 painting_variant definitions. Files live at data/<namespace>/painting_variant/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
asset_id | string | required e.g. minecraft:alban |
height | integer | required e.g. 1 |
title | object | required |
width | integer | required e.g. 1 |
author | object | 46/51 entries |
Vanilla example
data/minecraft/painting_variant/alban.json
{
"asset_id": "minecraft:alban",
"author": {
"color": "gray",
"translate": "painting.minecraft.alban.author"
},
"height": 1,
"title": {
"color": "yellow",
"translate": "painting.minecraft.alban.title"
},
"width": 1
}
villager_trade 26.1+
A single villager trade definition, extracted out of hardcoded trade tables. Villager economies became editable data rather than Java code.
Confirmed against game data: the registry first appears in 26.1. See Registry version matrix.
Vanilla ships 391 villager_trade definitions. Files live at data/<namespace>/villager_trade/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
gives | object | required |
reputation_discount | float | required e.g. 0.2 |
wants | object | required |
max_uses | integer | 374/391 entries e.g. 12 |
xp | integer | 266/391 entries e.g. 5 |
given_item_modifier | list, object | 41/391 entries |
merchant_predicate | object | 27/391 entries |
additional_wants | object | 18/391 entries |
double_trade_price_enchantments | string | 4/391 entries e.g. #minecraft:double_trade_price |
Vanilla example
data/minecraft/villager_trade/armorer/1/emerald_iron_boots.json
{
"gives": {
"id": "minecraft:iron_boots"
},
"max_uses": 12,
"reputation_discount": 0.2,
"wants": {
"count": 4,
"id": "minecraft:emerald"
}
}
trade_set 26.1+
A named group of villager trades offered together at a profession level. Lets a pack restructure what each profession sells.
Confirmed against game data: the registry first appears in 26.1. See Registry version matrix.
Vanilla ships 68 trade_set definitions. Files live at data/<namespace>/trade_set/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
amount | integer | required e.g. 2 |
random_sequence | string | required e.g. minecraft:trade_set/armorer/level_1 |
trades | string | required e.g. #minecraft:armorer/level_1 |
Vanilla example
data/minecraft/trade_set/armorer/level_1.json
{
"amount": 2,
"random_sequence": "minecraft:trade_set/armorer/level_1",
"trades": "#minecraft:armorer/level_1"
}
trial_spawner 1.21.2+
A trial-spawner configuration: mobs, timing, player scaling and rewards. Drives trial chambers and any custom challenge room.
Confirmed against game data: the registry first appears in 1.21.2. See Registry version matrix.
Vanilla ships 28 trial_spawner definitions. Files live at data/<namespace>/trial_spawner/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
simultaneous_mobs_added_per_player | float | required e.g. 0.5 |
spawn_potentials | list | required |
ticks_between_spawn | integer | required e.g. 20 |
simultaneous_mobs | float | 25/28 entries e.g. 1.0 |
loot_tables_to_eject | list | 14/28 entries |
total_mobs | float | 6/28 entries e.g. 2.0 |
total_mobs_added_per_player | float | 2/28 entries e.g. 1.0 |
Vanilla example
data/minecraft/trial_spawner/trial_chamber/breeze/normal.json
{
"simultaneous_mobs": 1.0,
"simultaneous_mobs_added_per_player": 0.5,
"spawn_potentials": [
{
"data": {
"entity": {
"id": "minecraft:breeze"
}
},
"weight": 1
}
],
"ticks_between_spawn": 20,
"total_mobs": 2.0,
"total_mobs_added_per_player": 1.0
}