World, damage & system registries
Registries that hook into core game systems: how damage is attributed, how chat renders, and the newer scheduling and testing primitives.
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 8 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.
damage_type 1.19.4+
Defines a kind of damage: its death message key, scaling behaviour, exhaustion cost and knockback effects. Custom damage types let a data pack attribute deaths to its own sources and drive damage_type tags used by predicates and immunity.
Confirmed against game data: the registry first appears in 1.19.4. See Registry version matrix.
Vanilla ships 51 damage_type definitions. Files live at data/<namespace>/damage_type/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
exhaustion | float | required e.g. 0.1 |
message_id | string | required e.g. arrow |
scaling | string | required e.g. when_caused_by_living_non_player |
effects | string | 12/51 entries e.g. burning |
death_message_type | string | 3/51 entries e.g. intentional_game_design |
Vanilla example
data/minecraft/damage_type/arrow.json
{
"exhaustion": 0.1,
"message_id": "arrow",
"scaling": "when_caused_by_living_non_player"
}
chat_type 1.19+
A chat message template: how a message is rendered in chat and in the narrator. Custom chat types let a pack format its own message channels with proper narration.
Confirmed against game data: the registry first appears in 1.19. See Registry version matrix.
Vanilla ships 7 chat_type definitions. Files live at data/<namespace>/chat_type/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
chat | object | required |
narration | object | required |
Vanilla example
data/minecraft/chat_type/chat.json
{
"chat": {
"parameters": [
"sender",
"content"
],
"translation_key": "chat.type.text"
},
"narration": {
"parameters": [
"sender",
"content"
],
"translation_key": "chat.type.text.narrate"
}
}
dialog 1.21.6+
A server-defined dialog screen: title, body, inputs and the actions its buttons run. Dialogs give data packs a real GUI without a resource pack or a plugin.
Confirmed against game data: the registry first appears in 1.21.6. See Registry version matrix.
Vanilla ships 3 dialog definitions. Files live at data/<namespace>/dialog/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
button_width | integer | required e.g. 310 |
columns | integer | required e.g. 1 |
exit_action | object | required |
external_title | object | required |
title | object | required |
type | string | required e.g. minecraft:dialog_list |
dialogs | string | 2/3 entries e.g. #minecraft:pause_screen_additions |
Vanilla example
data/minecraft/dialog/custom_options.json
{
"type": "minecraft:dialog_list",
"button_width": 310,
"columns": 1,
"dialogs": "#minecraft:pause_screen_additions",
"exit_action": {
"label": {
"translate": "gui.back"
},
"width": 200
},
"external_title": {
"translate": "menu.custom_options"
},
"title": {
"translate": "menu.custom_options.title"
}
}
timeline 1.21.11+
A scheduled sequence of events on a timeline. The registry ships as data from 1.21.11 with period_ticks and tracks only; clock and time_markers - and the world_clock registry a clock refers to - arrive in 26.1, so the field table below is the 26.x shape, not the 1.21.11 one. New scheduling primitive beyond /schedule.
Confirmed against game data: the registry first appears in 1.21.11. See Registry version matrix.
Vanilla ships 4 timeline definitions. Files live at data/<namespace>/timeline/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
clock | string | required e.g. minecraft:overworld |
tracks | object | required |
period_ticks | integer | 3/4 entries e.g. 24000 |
time_markers | object | 1/4 entries |
Vanilla example
data/minecraft/timeline/day.json
{
"clock": "minecraft:overworld",
"period_ticks": 24000,
"time_markers": {
"minecraft:day": {
"show_in_commands": true,
"ticks": 1000
},
"minecraft:midnight": {
"show_in_commands": true,
"ticks": 18000
},
"minecraft:night": {
"show_in_commands": true,
"ticks": 13000
},
"minecraft:noon": {
"show_in_commands": true,
"ticks": 6000
},
"minecraft:roll_village_siege": 18000,
"minecraft:wake_up_from_sleep": 0
},
"tracks": {
"minecraft:audio/firefly_bush_sounds": {
"keyframes": [
{
"ticks": 12600,
"value": true
},
{
"ticks": 23401,
"value": false
}
],
"modifier": "or"
},
"minecraft:gameplay/bees_stay_in_hive": {
"keyframes": [
{
"ticks": 12542,
"value": true
},
{
"ticks": 23460,
"value": false
}
],
"modifier": "or"
},
"minecraft:gameplay/cat_waking_up_gift_chance": {
"ease": "constant",
"keyframes": [
{
"ticks": 362,
"value": 0.0
},
{
"ticks": 23667,
"value": 0.7
}
],
"modifier": "maximum"
},
"minecraft:gameplay/creaking_active": {
"keyframes": [
{
"ticks": 12600,
"value": true
},
{
"ticks": 23401,
"value": false
}
],
"modifier": "or"
},
"minecraft:gameplay/eyeblossom_open": {
"keyframes": [
{
"ticks": 12600,
"value": true
},
{
"ticks": 23401,
"value": false
}
]
},
"minecraft:gameplay/monsters_burn": {
"keyframes": [
{
"ticks": 12542,
"value": false
},
{
"ticks": 23460,
"value": true
}
],
"modifier": "or"
},
"minecraft:gameplay/sky_light_level": {
"keyframes": [
{
"ticks": 133,
"value": 1.0
},
{
"ticks": 11867,
"value": 1.0
... (truncated)
world_clock 26.1+
A named clock driving time-based behaviour independent of the day cycle. Lets packs run their own cycles.
Confirmed against game data: the registry first appears in 26.1. See Registry version matrix.
Vanilla ships 2 world_clock definitions. Files live at data/<namespace>/world_clock/<name>.json.
Fields
Entries are not objects; see the example.
Vanilla example
data/minecraft/world_clock/overworld.json
{}
test_instance 1.21.5+
A game-test instance: the structure to load and the function that asserts on it. Automated in-game testing for data packs.
Confirmed against game data: the registry first appears in 1.21.5. See Registry version matrix.
Vanilla ships 1 test_instance definition. Files live at data/<namespace>/test_instance/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
environment | string | required e.g. minecraft:default |
function | string | required e.g. minecraft:always_pass |
max_ticks | integer | required e.g. 1 |
required | boolean | required e.g. False |
setup_ticks | integer | required e.g. 1 |
structure | string | required e.g. minecraft:empty |
type | string | required e.g. minecraft:function |
Vanilla example
data/minecraft/test_instance/always_pass.json
{
"type": "minecraft:function",
"environment": "minecraft:default",
"function": "minecraft:always_pass",
"max_ticks": 1,
"required": false,
"setup_ticks": 1,
"structure": "minecraft:empty"
}
test_environment 1.21.5+
The environment a game test runs in - weather, time, game rules. Makes tests deterministic.
Confirmed against game data: the registry first appears in 1.21.5. See Registry version matrix.
Vanilla ships 1 test_environment definition. Files live at data/<namespace>/test_environment/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
definitions | list | required |
type | string | required e.g. minecraft:all_of |
Vanilla example
data/minecraft/test_environment/default.json
{
"type": "minecraft:all_of",
"definitions": []
}
sulfur_cube_archetype 26.2+
An archetype for the sulfur cube entity. New in the 26.x line; schema still settling.
Confirmed against game data: the registry first appears in 26.2. See Registry version matrix.
Vanilla ships 12 sulfur_cube_archetype definitions. Files live at data/<namespace>/sulfur_cube_archetype/<name>.json.
Fields
| Field | Type | Presence in vanilla |
|---|---|---|
attribute_modifiers | list | required |
items | string | required e.g. #minecraft:sulfur_cube_archetype/bouncy |
knockback_modifiers | object | required |
sound_settings | object | required |
buoyant | boolean | 5/12 entries e.g. True |
contact_damage | object | 1/12 entries |
explosion | object | 1/12 entries |
Vanilla example
data/minecraft/sulfur_cube_archetype/bouncy.json
{
"attribute_modifiers": [
{
"amount": -2.0,
"attribute": "minecraft:knockback_resistance",
"id": "minecraft:bouncy_add_knockback_resistance",
"operation": "add_value"
},
{
"amount": -2.0,
"attribute": "minecraft:explosion_knockback_resistance",
"id": "minecraft:bouncy_add_explosion_knockback_resistance",
"operation": "add_value"
},
{
"amount": 0.8999999761581421,
"attribute": "minecraft:bounciness",
"id": "minecraft:bouncy_add_bounciness",
"operation": "add_value"
},
{
"amount": -0.699999988079071,
"attribute": "minecraft:friction_modifier",
"id": "minecraft:bouncy_mul_friction_modifier",
"operation": "add_multiplied_total"
},
{
"amount": -0.9900000002235174,
"attribute": "minecraft:air_drag_modifier",
"id": "minecraft:bouncy_mul_air_drag_modifier",
"operation": "add_multiplied_total"
}
],
"buoyant": true,
"items": "#minecraft:sulfur_cube_archetype/bouncy",
"knockback_modifiers": {
"horizontal_power": 0.4125,
"vertical_power": 0.105
},
"sound_settings": {
"hit_sound": "minecraft:entity.sulfur_cube.bouncy.hit",
"push_sound": "minecraft:entity.sulfur_cube.bouncy.push",
"push_sound_cooldown": 0.7,
"push_sound_impulse_threshold": 0.3
}
}