Entity, trade & variant registries

Registries that describe mobs’ appearance variants, what villagers sell, and the spawners that challenge players.

Overview

📌 Note

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

FieldTypePresence in vanilla
assetsobjectrequired
baby_assetsobjectrequired
spawn_conditionslistrequired

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

FieldTypePresence in vanilla
asset_idstringrequired e.g. minecraft:entity/cat/cat_all_black
baby_asset_idstringrequired e.g. minecraft:entity/cat/cat_all_black_baby
spawn_conditionslistrequired

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

FieldTypePresence in vanilla
asset_idstringrequired e.g. minecraft:entity/pig/pig_cold
baby_asset_idstringrequired e.g. minecraft:entity/pig/pig_cold_baby
spawn_conditionslistrequired
modelstring1/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

FieldTypePresence in vanilla
asset_idstringrequired e.g. minecraft:entity/cow/cow_cold
baby_asset_idstringrequired e.g. minecraft:entity/cow/cow_cold_baby
spawn_conditionslistrequired
modelstring2/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

FieldTypePresence in vanilla
asset_idstringrequired e.g. minecraft:entity/chicken/chicken_cold
baby_asset_idstringrequired e.g. minecraft:entity/chicken/chicken_cold_baby
spawn_conditionslistrequired
modelstring1/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

FieldTypePresence in vanilla
asset_idstringrequired e.g. minecraft:entity/frog/frog_cold
spawn_conditionslistrequired

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

FieldTypePresence in vanilla
asset_idstringrequired e.g. minecraft:alban
heightintegerrequired e.g. 1
titleobjectrequired
widthintegerrequired e.g. 1
authorobject46/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

FieldTypePresence in vanilla
givesobjectrequired
reputation_discountfloatrequired e.g. 0.2
wantsobjectrequired
max_usesinteger374/391 entries e.g. 12
xpinteger266/391 entries e.g. 5
given_item_modifierlist, object41/391 entries
merchant_predicateobject27/391 entries
additional_wantsobject18/391 entries
double_trade_price_enchantmentsstring4/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

FieldTypePresence in vanilla
amountintegerrequired e.g. 2
random_sequencestringrequired e.g. minecraft:trade_set/armorer/level_1
tradesstringrequired 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

FieldTypePresence in vanilla
simultaneous_mobs_added_per_playerfloatrequired e.g. 0.5
spawn_potentialslistrequired
ticks_between_spawnintegerrequired e.g. 20
simultaneous_mobsfloat25/28 entries e.g. 1.0
loot_tables_to_ejectlist14/28 entries
total_mobsfloat6/28 entries e.g. 2.0
total_mobs_added_per_playerfloat2/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
}

Sources