Перейти к содержимому
Mineforgian

Itematic

A mod that adds data-driven items to the game, and much more!

Загрузки
834
Подписчики
37
Обновлён
30 июня 2026 г.
Лицензия
Apache-2.0

Опубликован 7 мая 2025 г.

Itematic

The mod that adds data-driven items. You can easily add your own items to your world! Just define an item in your data pack and resource pack and you're all set! Features include:

  • Custom items
  • Customisable Creative inventory item stacks
  • Item events
  • Villager trades
  • Actions to use in various contexts

Tools and Examples

These are tools to help create your own items and more:

This is a repository with examples: https://github.com/ErrorCraft/Itematic-Examples

Ченджлог

0.6.0+1.21.5Релиз1.21.5 · 30 июня 2026 г.

There's no version for 1.21.1 this time because I want to be up-to-date during 26.x updates before the end of the year (ergo before 27.1 happens). This version overhauls the action context parameter system by using the vanilla context instead. It also introduces entity spawn rules, unifies spawn-related fields in item behaviour components that involve placing entities and changes the way buckets are defined.

For a few more details regarding the split and future you can look at the roadmap to 1.21! However, expect a small update on this sooner or later.

Changes

  • Removed smithing templates.
    • This only provided the tooltip and textures, of which the former has been extracted from the behaviour entirely.

Items

  • Removed #minecraft:prevent_mining_in_creative
    • Its functionality is now part of minecraft:tool.

Item Behaviour Components

  • Replaced usages of entity initialisers with entity types directly.

  • Removed the following item behaviour components:

    • minecraft:pointable
      • This should now be replicated with item assets in resource packs.
      • Setting the item pointer location should now be replicated with actions instead.
    • minecraft:saddle
      • This has been replaced entirely by minecraft:equipment.
    • minecraft:tinted
      • This should now be replicated with item assets in resource packs.
  • Renamed minecraft:smithing_template to minecraft:smithing_template_provider.

    • It now only references the type, which was previously present in smithing templates.
    • Now only determines the textures used in a Smithing Table.
    • The tooltip is also no longer provided by the behaviour and must be placed in the item display instead.

So if you had this:

{
  "minecraft:smithing_template": {
    "template": "minecraft:bolt_pattern"
  }
}

You now have to use this:

{
  "minecraft:smithing_template_provider": "minecraft:trim_pattern"
}

minecraft:attack_blocking

  • Blocks attacks when used.
  • The fields are the same as the minecraft:blocks_attacks data component.

Example:

{
  "minecraft:attack_blocking": {
    "block_delay_seconds": 0.25,
    "block_sound": "minecraft:item.shield.block",
    "bypassed_by": "#minecraft:bypasses_shield",
    "disabled_sound": "minecraft:item.shield.break",
    "item_damage": {
      "base": 1.0,
      "factor": 1.0,
      "threshold": 3.0
    }
  }
}

minecraft:bucket

  • Unified block and fluid placement for buckets.
  • The fluid, block and transforms_into fields have been replaced with world modifications in the new modification field.
    • This means that the previously hardcoded behaviour of the minecraft:empty fluid draining a fluid instead has been removed.
Previously set field World modification
Fluid minecraft:empty minecraft:drain_fluid
Any other fluid minecraft:place_fluid with the specified fluid
Any block minecraft:place_block with the specified block
  • Moved the placed entity up a level by replacing it with an entity spawner.
    • This means that the optional require_other_successful_placement field has been removed and now always requires a successful placement.
    • The field itself is still optional.

So if you had this:

{
  "minecraft:bucket": {
    "emptying_sound_event": "minecraft:item.bucket.empty_fish",
    "entity": {
      "entity": {
        "type": "minecraft:pufferfish"
      },
      "require_other_successful_placement": true
    },
    "fluid": "minecraft:water",
    "transforms_into": "minecraft:bucket"
  }
}

You now have to use this:

{
  "minecraft:bucket": {
    "entity": {
      "entity": "minecraft:pufferfish"
    },
    "modification": {
      "type": "minecraft:place_fluid",
      "fluid": "minecraft:water",
      "place_sound": "minecraft:item.bucket.empty_fish",
      "transforms_into": "minecraft:bucket"
    }
  }
}

minecraft:entity

  • Merged the entity and allow_item_data fields into a single entity field by using an entity spawner.
  • Added allow_spawner_modification.
    • Its value is an optional boolean defaulting to false.
    • Determines whether the item can modify a Spawner's entity type.

So if you had this:

{
  "minecraft:entity": {
    "allow_item_data": true,
    "entity": {
      "type": "minecraft:pig"
    },
    "passes": [
      "block",
      "fluid"
    ]
  }
}

You now have to use this:

{
  "minecraft:entity": {
    "allow_spawner_modification": true,
    "entity": {
      "allow_item_data": true,
      "entity": "minecraft:pig"
    },
    "passes": [
      "block",
      "fluid"
    ]
  }
}

minecraft:playable

  • Renamed instruments to default_instrument and now only accepts one instrument.

minecraft:projectile

  • The entity field now only accepts an entity type instead of an entity initialiser by making the entire component an entity spawner.
  • This means it also gains the other optional fields. So if you had this:
{
  "minecraft:projectile": {
    "entity": {
      "type": "minecraft:trident"
    }
  }
}

You now have to use this instead:

{
  "minecraft:projectile": {
    "entity": "minecraft:trident"
  }
}

Example using data components:

{
  "minecraft:projectile": {
    "components": {
      "minecraft:chicken/variant": "minecraft:cold"
    },
    "entity": "minecraft:egg"
  }
}

minecraft:spawn_egg

  • Is no longer required for Spawner entity type modification.
    • This field has instead been moved to the minecraft:entity item behaviour component.
  • The behaviour component is still used for spawning children when used on the specified entity type.

So if you had this:

{
  "minecraft:entity": {
    "allow_item_data": true,
    "entity": "minecraft:pig",
    "passes": [
      "block",
      "fluid"
    ]
  },
  "minecraft:spawn_egg": {}
}

You now have to use this:

{
  "minecraft:entity": {
    "allow_spawner_modification": true,
    "entity": {
      "allow_item_data": true,
      "entity": "minecraft:pig"
    },
    "passes": [
      "block",
      "fluid"
    ]
  },
  "minecraft:spawn_egg": {}
}

minecraft:text_holder

  • Now opens a book on use directly instead of needing an action.

minecraft:trim_material_provider

  • Provides a trim material for use in recipes.
  • Its value is an id pointing to a trim material.
  • This value can be changed for individual item stacks in the new minecraft:provides_trim_material data component.

Example:

{
  "minecraft:trim_material_provider": "minecraft:diamond"
}

minecraft:weapon

  • Renamed the damage_per_attack field to item_damage_per_attack.
  • Added the disable_blocking_for_seconds field.
    • Disables blocking when used on a target wielding an item that is attack blocking.
    • Its value is a non-negative float.

Actions

  • Removed action context parameters in favour of entity targets and new position targets.
    • These values need to be updated accordingly.
    • There is more information on this in the Entity Targets section below.

So if you had this:

{
  "type": "minecraft:play_sound",
  "category": "neutral",
  "pitch": 1.0,
  "position": "this",
  "sound": "minecraft:item.bottle.fill",
  "volume": 1.0
}

You now have to use this instead:

{
  "type": "minecraft:play_sound",
  "category": "neutral",
  "pitch": 1.0,
  "position": "origin",
  "sound": "minecraft:item.bottle.fill",
  "volume": 1.0
}
  • Various actions gained fields for entity targets.
  • Exchanging stacks now works in more places and in more contexts.
  • Simplified action requirements to only take a predicate due to the migration towards context parameters.

So if you had this:

{
  "requirements": {
    "conditions": {
      "condition": "minecraft:location_check",
      "predicate": {
        "block": {
          "blocks": "minecraft:respawn_anchor"
        }
      }
    },
    "context": {
      "entity": "this",
      "position": "target"
    }
  }
}

You now have to use this instead:

{
  "requirements": {
    "condition": "minecraft:location_check",
    "position": "interacted",
    "predicate": {
      "block": {
        "blocks": "minecraft:respawn_anchor"
      }
    }
  }
}
  • Removed the following actions:
    • minecraft:open_book_from_item
      • This is now part of the minecraft:text_holder item behaviour component.
    • minecraft:saddle_entity_at_position
      • This has been replaced by equipment and minecraft:equip_entity_at_position should be used instead.
    • minecraft:set_item_pointer_location
      • This has been moved to an item modifier.

minecraft:attach_leashed_entities_on_block

  • Added a new field called position:
    • Its value is a position target and determines the position the leashed entities will be attached to.

minecraft:damage_item

  • Removed the ignore_game_mode field.
    • The action now always takes the game mode into account.

minecraft:drop_item_from_block

  • Changed the item field to take an item stack instead of an item.

minecraft:exchange_item

  • Changed the item field to take an item stack instead of an item.
  • Removed the components field.
    • The components are now defined in the item field instead.

So if you had this:

{
  "type": "minecraft:exchange_item",
  "components": {
    "minecraft:potion_contents": {
      "potion": "minecraft:water"
    }
  },
  "item": "minecraft:potion"
}

You now have to use this instead:

{
  "type": "minecraft:exchange_item",
  "item": {
    "id": "minecraft:potion",
    "components": {
      "minecraft:potion_contents": {
        "potion": "minecraft:water"
      }
    },
    "count": 1
  }
}

minecraft:fertilize

  • Added a new field called position:
    • Its value is a position target and determines the position to fertilize.

minecraft:modify_item

  • Removed the context field.
    • The item modifier now uses the exact same context as the action.
    • Added the stack field, which is an item stack target to use a specific item stack from the context.

minecraft:place_block

  • Removed the decrement_count field.
    • This should be replaced by a sequence with a minecraft:decrement_item action.

So if you had this:

{
  "type": "minecraft:place_block",
  "block": "minecraft:fire",
  "decrement_count": true,
  "position": "interacted"
}

You now have to use this instead:

{
  "type": "minecraft:sequence",
  "handler": "minecraft:passing",
  "entries": [
    {
      "type": "minecraft:place_block",
      "block": "minecraft:fire",
      "position": "interacted"
    },
    {
      "type": "minecraft:decrement_item",
      "amount": 1
    }
  ]
}
  • Added an optional place_sound field.
    • When specified, this sound will be played instead of the normal block place sound.

minecraft:prime_tnt

  • Does not prime tnt when the tntExplodes game rule is disabled.
  • Turns any block into primed TNT now instead of just TNT.
    • The block that is primed is used for the display.
  • Checking for the TNT block must be done in the action requirements now.

So if you had this:

{
  "action": {
    "type": "minecraft:prime_tnt",
    "position": "target"
  }
}

You now have to use this instead:

{
  "action": {
    "type": "minecraft:prime_tnt",
    "position": "interacted"
  },
  "requirements": {
    "condition": "minecraft:location_check",
    "position": "interacted",
    "predicate": {
      "block": {
        "blocks": "minecraft:tnt"
      }
    }
  }
}

minecraft:run_function

  • Moved the entity and position fields up due to the removal of action context parameters.

So if you had this:

{
  "type": "minecraft:run_function",
  "function": "example:function",
  "context": {
    "entity": "this",
    "position": "this"
  }
}

You now have to use this instead:

{
  "type": "minecraft:run_function",
  "function": "example:function",
  "entity": "this",
  "position": "origin"
}
  • Both fields are optional now and will never try to pass the parameter if not specified.

So if you only want the position context you can use this:

{
  "type": "minecraft:run_function",
  "function": "example:function",
  "position": "origin"
}

minecraft:sequence

  • Now no longer incorrectly reports duplicate actions defined in the same sequence as recursive.

minecraft:swing_hand

  • Added a new field called entity:
    • Its value is an entity target and determines whose hand to swing.

World Modifications

Can modify the world by adding or removing something from it.

minecraft:drain_fluid

  • Drains a fluid from the world.
  • Has no additional fields.
  • Leaves an item stack specified by the drained fluid.

minecraft:place_fluid

  • Places a fluid in the world.
  • Fields:
    • fluid: A fluid. The fluid to place.
    • place_sound: A sound event. The sound to play when placed.
    • transforms_into: An item. The item to leave when successfully placed.
  • Leaves the item stack specified in the transforms_into field.

minecraft:place_block

  • Places a block in the world.
  • Fields:
    • block: A block picker. The block to place.
    • place_sound: A sound event. The sound to play when placed.
    • transforms_into: An item. The item to leave when successfully placed.
  • Leaves the item stack specified in the transforms_into field.

Entity Spawners

  • Spawns an entity using the specified rules.
  • Fields:
    • entity: An entity type. The entity type to spawn.
      • If allow_item_data is set to true, the entity type may additionally be determined via the minecraft:entity_data data component from the used item stack, which takes precedence over the entity field.
    • spawn_rules: An optional list of spawn rules. The spawn rules to apply in the specified order.
    • components: An optional set of components. The components to apply to the spawned entity.
    • spawn_sound: An optional sound event. The sound to play when the entity is spawned.
    • allow_item_data: An optional boolean defaulting to false. Whether to allow item data from the minecraft:entity_data data component from the used item stack.

Entity Spawn Rules

  • Determines whether to place the entity or not and if so, its position and rotation.
  • Rules are applied when the condition passes or when no condition is specified.
  • Common fields:
    • condition: An optional predicate. Determines whether to apply the rule or not.

minecraft:align_yaw

  • Aligns the entity's yaw based on the placer's own yaw using the specified amount of steps.
  • Fields:
    • step: An integer ranging from 2 to 360. The amount of steps.
      • For example, a value of 8 rounds to the nearest 45 degree as 360 / 8 = 45.

Example:

{
  "type": "minecraft:align_yaw",
  "steps": 8
}

minecraft:discard

  • Discards the entity entirely.
  • Has no additional fields.

Example:

{
  "type": "minecraft:discard",
  "condition": {
    "condition": "minecraft:side_check",
    "sides": [
      "down"
    ]
  }
}

minecraft:fits_in_volume

  • Checks whether the specified hitbox or otherwise entity's default hitbox fits in the specified volume.
  • The hitbox to check for is centred around the entity spawner's current spawn position.
  • Fields:
    • blocks: An optional boolean. Defaults to true. Whether to check if the entity fits inside the surrounding blocks.
    • entities: An optional boolean. Defaults to true. Whether to check if the entity fits inside the surrounding entities.
    • volume: An optional list of three doubles. The volume to use instead of the entity's hitbox.

Example:

{
  "type": "minecraft:fits_in_volume",
  "blocks": false,
  "volume": [
    1.0,
    2.0,
    1.0
  ]
}

minecraft:offset_spawn_position

  • Offsets the entity's spawn position by the specified amount.
  • Fields:
    • offset: A list of three doubles. The position offset.
{
  "type": "minecraft:offset_spawn_position",
  "offset": [
    0.0,
    0.0625,
    0.0
  ]
}

Predicates

  • Added a minecraft:villager entity sub-predicate, which is a temporary solution that will be removed once a component predicate for a Villager's type has been added (alongside data-driven trades as those will be part of vanilla by then)
    • Fields:
      • variant, which is a Villager variant, list of Villager variants or hash-prefixed Villager variant tag and the Villager's variant must match in order to pass.

Example:

{
  "type": "minecraft:villager",
  "variant": [
    "minecraft:swamp",
    "minecraft:snow",
    "minecraft:plains"
  ]
}

minecraft:location_check

  • Added a new optional field called position:
    • Its value is a position target and is the position to retrieve to use for the check.
    • Its default value is "origin" to match existing behaviour.
    • Fails if the position defined is not present in the context.

Example:

{
  "condition": "minecraft:location_check",
  "position": "interacted",
  "predicate": {
    "block": {
      "blocks": "minecraft:tnt"
    }
  }
}

Item Modifiers

minecraft:set_item_pointer_location

  • Sets the minecraft:lodestone_tracker data component to the provided position.
  • Fields:
    • position, which is a position target to use as the item pointer location.

Example:

{
  "function": "minecraft:set_item_pointer_location",
  "position": "interacted"
},

minecraft:split

  • Splits the item stack into the original and one with the provided count.
  • Fields:
    • count, which is a number provider to split the item stack into one with the provided new count.

Example:

{
  "count": 1.0,
  "function": "minecraft:split"
}

Context Parameters

Added the following context parameters from the migration:

  • minecraft:side, which is the side of a block that was interacted with.
    • Passed in the minecraft:bucket item behaviour.
    • Passed in the minecraft:entity item behaviour.
    • Used in dispense behaviour to interact with the Dispenser's facing direction.
    • Used in the minecraft:side_check predicate.
    • Used in the minecraft:drop_item_from_block action.
    • Used in the minecraft:fertilize action.
    • Used in the minecraft:use_bucket action.
  • minecraft:interacted_position, which is the position that the user interacted with.
    • Passed and used in various item behaviour.
    • Used in dispense behaviour to interact with the Dispenser's output position.
  • minecraft:equipment_slot, which is used when an item is broken.
  • minecraft:hand, which is the hand used to execute an action.
    • Passed to various item events when an item is being used.
    • Used in the minecraft:swing_hand action to swing the hand.
    • Used in the minecraft:open_book_from_item action to get the book from the executing entity.
  • minecraft:target_entity, which is the entity that was interacted with.
    • Used in the minecraft:entity and minecraft:throwable item behaviour for the spawned entities.
    • Passed to the minecraft:hit_entity and minecraft:use_weapon item events for the attacked entity.
    • Passed to the minecraft:use_on_entity item event for the interacted entity.

Action context parameters were replaced with new targets to be consistent with vanilla. This means that all parameters are now passed to loot tables, item modifiers and predicates instead of having to select specific ones using action context parameters, which were removed as well. This also means that you may need to update the value of certain fields. All changes are visible below.

Entity Targets

Old New Context Parameter
"this" "this" minecraft:this_entity
"target" "target_entity" minecraft:target_entity

So if you had this:

{
  "type": "minecraft:set_entity_name_from_item",
  "entity": "target"
}

You now have to use this instead:

{
  "type": "minecraft:set_entity_name_from_item",
  "entity": "target_entity"
}

Position Targets

Old New Context Parameter
"this" "origin" minecraft:origin
"target" "interacted" minecraft:interacted_position

So if you had this:

{
  "type": "minecraft:set_block_state",
  "position": "target",
  "state": {
    "Name": "minecraft:farmland",
    "Properties": {
      "moisture": "0"
    }
  }
}

You now have to use this instead:

{
  "type": "minecraft:set_block_state",
  "position": "interacted",
  "state": {
    "Name": "minecraft:farmland",
    "Properties": {
      "moisture": "0"
    }
  }
}

Item Stack Targets

These are new and point to item stacks to use from the context. Currently the only available value is tool, which points to the minecraft:tool context parameter.

Trades

  • Added an optional merchant_predicate field, which is a predicate that must pass in order for the trade to be considered of a merchant's trade set.

Fixes

  • The minecraft:charge_type property now works correctly again on item assets.
  • Exchanging item stacks now works correctly again by dropping the exchanged item stack instead of the current item stack.
  • Fixed the world modification type registry name.
0.6.0-preview.3+1.21.5Бета1.21.5 · 23 июня 2026 г.

This preview introduces entity spawn rules and unifies the spawn-related fields in item behaviour components that involve placing entities.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

Changes

Item Behaviour Components

minecraft:bucket

  • Replaced the entity field with an entity spawner instead of just the entity type.

So if you had this:

{
  "minecraft:bucket": {
    "entity": "minecraft:pufferfish",
    "modification": {
      "type": "minecraft:place_fluid",
      "fluid": "minecraft:water",
      "place_sound": "minecraft:item.bucket.empty_fish",
      "transforms_into": "minecraft:bucket"
    }
  }
}

You now have to use this:

{
  "minecraft:bucket": {
    "entity": {
      "entity": "minecraft:pufferfish"
    },
    "modification": {
      "type": "minecraft:place_fluid",
      "fluid": "minecraft:water",
      "place_sound": "minecraft:item.bucket.empty_fish",
      "transforms_into": "minecraft:bucket"
    }
  }
}

minecraft:entity

  • Merged the entity and allow_item_data fields into a single entity field by using an entity spawner.
  • Added allow_spawner_modification.
    • Its value is an optional boolean defaulting to false.
    • Determines whether the item can modify a Spawner's entity type.

So if you had this:

{
  "minecraft:entity": {
    "allow_item_data": true,
    "entity": "minecraft:pig",
    "passes": [
      "block",
      "fluid"
    ]
  }
}

You now have to use this:

{
  "minecraft:entity": {
    "allow_spawner_modification": true,
    "entity": {
      "allow_item_data": true,
      "entity": "minecraft:pig"
    },
    "passes": [
      "block",
      "fluid"
    ]
  }
}

minecraft:projectile

  • Expanded the entity field by adding optional spawn rules, an optional spawn sound and whether to allow item data or not.

minecraft:spawn_egg

  • Is no longer required for Spawner entity type modification.
    • This field has instead been moved to the minecraft:entity item behaviour component.
  • The behaviour component is still used for spawning children when used on the specified entity type.

So if you had this:

{
  "minecraft:entity": {
    "allow_item_data": true,
    "entity": "minecraft:pig",
    "passes": [
      "block",
      "fluid"
    ]
  },
  "minecraft:spawn_egg": {}
}

You now have to use this:

{
  "minecraft:entity": {
    "allow_spawner_modification": true,
    "entity": {
      "allow_item_data": true,
      "entity": "minecraft:pig"
    },
    "passes": [
      "block",
      "fluid"
    ]
  },
  "minecraft:spawn_egg": {}
}

Entity Spawners

  • Spawns an entity using the specified rules.
  • Fields:
    • entity: An entity type. The entity type to spawn.
      • If allow_item_data is set to true, the entity type may additionally be determined via the minecraft:entity_data data component from the used item stack, which takes precedence over the entity field.
    • spawn_rules: An optional list of spawn rules. The spawn rules to apply in the specified order.
    • components: An optional set of components. The components to apply to the spawned entity.
    • spawn_sound: An optional sound event. The sound to play when the entity is spawned.
    • allow_item_data: An optional boolean defaulting to false. Whether to allow item data from the minecraft:entity_data data component from the used item stack.

Entity Spawn Rules

  • Determines whether to place the entity or not and if so, its position and rotation.
  • Rules are applied when the condition passes or when no condition is specified.
  • Common fields:
    • condition: An optional predicate. Determines whether to apply the rule or not.

minecraft:align_yaw

  • Aligns the entity's yaw based on the placer's own yaw using the specified amount of steps.
  • Fields:
    • step: An integer ranging from 2 to 360. The amount of steps.
      • For example, a value of 8 rounds to the nearest 45 degree as 360 / 8 = 45.

Example:

{
  "type": "minecraft:align_yaw",
  "steps": 8
}

minecraft:discard

  • Discards the entity entirely.
  • Has no additional fields.

Example:

{
  "type": "minecraft:discard",
  "condition": {
    "condition": "minecraft:side_check",
    "sides": [
      "down"
    ]
  }
}

minecraft:fits_in_volume

  • Checks whether the specified hitbox or otherwise entity's default hitbox fits in the specified volume.
  • The hitbox to check for is centred around the entity spawner's current spawn position.
  • Fields:
    • blocks: An optional boolean. Defaults to true. Whether to check if the entity fits inside the surrounding blocks.
    • entities: An optional boolean. Defaults to true. Whether to check if the entity fits inside the surrounding entities.
    • volume: An optional list of three doubles. The volume to use instead of the entity's hitbox.

Example:

{
  "type": "minecraft:fits_in_volume",
  "blocks": false,
  "volume": [
    1.0,
    2.0,
    1.0
  ]
}

minecraft:offset_spawn_position

  • Offsets the entity's spawn position by the specified amount.
  • Fields:
    • offset: A list of three doubles. The position offset.
{
  "type": "minecraft:offset_spawn_position",
  "offset": [
    0.0,
    0.0625,
    0.0
  ]
}

Fixes

  • Fixed the world modification type registry name.
0.6.0-preview.2+1.21.5Бета1.21.5 · 26 мая 2026 г.

It's been a bit, but here's a new preview! This preview changes the way buckets are defined with some minor action changes.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

Changes

Item Behaviour Components

minecraft:bucket

  • Unified block and fluid placement for buckets.
  • The fluid, block and transforms_into fields have been replaced with world modifications in the new modification field.
    • This means that the previously hardcoded behaviour of the minecraft:empty fluid draining a fluid instead has been removed.
Previously set field World modification
Fluid minecraft:empty minecraft:drain_fluid
Any other fluid minecraft:place_fluid with the specified fluid
Any block minecraft:place_block with the specified block
  • Moved the placed entity up a level by only specifying the entity type.
    • This means that the optional require_other_successful_placement field has been removed and now always requires a successful placement.
    • The field itself is still optional.

So if you had this:

{
  "minecraft:bucket": {
    "emptying_sound_event": "minecraft:item.bucket.empty_fish",
    "entity": {
      "entity": "minecraft:pufferfish",
      "require_other_successful_placement": true
    },
    "fluid": "minecraft:water",
    "transforms_into": "minecraft:bucket"
  }
}

You now have to use this instead:

{
  "minecraft:bucket": {
    "entity": "minecraft:pufferfish",
    "modification": {
      "type": "minecraft:place_fluid",
      "fluid": "minecraft:water",
      "place_sound": "minecraft:item.bucket.empty_fish",
      "transforms_into": "minecraft:bucket"
    }
  }
}

Actions

minecraft:place_block

  • Removed the decrement_count field.
    • This should be replaced by a sequence with a minecraft:decrement_item action.

So if you had this:

{
  "type": "minecraft:place_block",
  "block": "minecraft:fire",
  "decrement_count": true,
  "position": "interacted"
}

You now have to use this instead:

{
  "type": "minecraft:sequence",
  "handler": "minecraft:passing",
  "entries": [
    {
      "type": "minecraft:place_block",
      "block": "minecraft:fire",
      "position": "interacted"
    },
    {
      "type": "minecraft:decrement_item",
      "amount": 1
    }
  ]
}
  • Added an optional place_sound field.
    • When specified, this sound will be played instead of the normal block place sound.

World Modifications

Can modify the world by adding or removing something from it.

minecraft:drain_fluid

  • Drains a fluid from the world.
  • Has no additional fields.
  • Leaves an item stack specified by the drained fluid.

minecraft:place_fluid

  • Places a fluid in the world.
  • Fields:
    • fluid: A fluid. The fluid to place.
    • place_sound: A sound event. The sound to play when placed.
    • transforms_into: An item. The item to leave when successfully placed.
  • Leaves the item stack specified in the transforms_into field.

minecraft:place_block

  • Places a block in the world.
  • Fields:
    • block: A block picker. The block to place.
    • place_sound: A sound event. The sound to play when placed.
    • transforms_into: An item. The item to leave when successfully placed.
  • Leaves the item stack specified in the transforms_into field.

Fixes

  • Exchanging item stacks now works correctly again by dropping the exchanged item stack instead of the current item stack.
0.6.0-preview.1+1.21.5Бета1.21.5 · 14 апреля 2026 г.

We're skipping an entire Minecraft drop and ended up on 1.21.5! This preview overhauls the action context parameter system by using the vanilla context instead. This version took a second because of some additional changes in Minecraft.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

Changes

  • Removed smithing templates.
    • This only provided the tooltip and textures, of which the former has been extracted from the behaviour entirely.

Items

  • Removed #minecraft:prevent_mining_in_creative
    • Its functionality is now part of minecraft:tool.

Item Behaviour Components

  • Replaced usages of entity initialisers with entity types directly.

  • Removed the following item behaviour components:

    • minecraft:pointable
      • This should now be replicated with item assets in resource packs.
      • Setting the item pointer location should now be replicated with actions instead.
    • minecraft:saddle
      • This has been replaced entirely by minecraft:equipment.
    • minecraft:tinted
      • This should now be replicated with item assets in resource packs.
  • Renamed minecraft:smithing_template to minecraft:smithing_template_provider.

    • It now only references the type, which was previously present in smithing templates.
    • Now only determines the textures used in a Smithing Table.
    • The tooltip is also no longer provided by the behaviour and must be placed in the item display instead.

So if you had this:

{
  "minecraft:smithing_template": {
    "template": "minecraft:bolt_pattern"
  }
}

You now have to use this:

{
  "minecraft:smithing_template_provider": "minecraft:trim_pattern"
}

minecraft:attack_blocking

  • Blocks attacks when used.
  • The fields are the same as the minecraft:blocks_attacks data component.

Example:

{
  "minecraft:attack_blocking": {
    "block_delay_seconds": 0.25,
    "block_sound": "minecraft:item.shield.block",
    "bypassed_by": "#minecraft:bypasses_shield",
    "disabled_sound": "minecraft:item.shield.break",
    "item_damage": {
      "base": 1.0,
      "factor": 1.0,
      "threshold": 3.0
    }
  }
}

minecraft:bucket

  • The entity target in the entity field now only accepts an entity type instead of an entity initialiser.

So if you had this:

{
  "minecraft:bucket": {
    "emptying_sound_event": "minecraft:item.bucket.empty_fish",
    "entity": {
      "entity": {
        "type": "minecraft:pufferfish"
      },
      "require_other_successful_placement": true
    },
    "fluid": "minecraft:water",
    "transforms_into": "minecraft:bucket"
  }
}

You now have to use this instead:

{
  "minecraft:bucket": {
    "emptying_sound_event": "minecraft:item.bucket.empty_fish",
    "entity": {
      "entity": "minecraft:pufferfish",
      "require_other_successful_placement": true
    },
    "fluid": "minecraft:water",
    "transforms_into": "minecraft:bucket"
  }
}

minecraft:entity

  • The entity field now only accepts an entity type instead of an entity initialiser.

So if you had this:

{
  "minecraft:entity": {
    "entity": {
      "type": "minecraft:oak_boat"
    }
  }
}

You now have to use this instead:

{
  "minecraft:entity": {
    "entity": "minecraft:oak_boat"
  }
}

minecraft:playable

  • Renamed instruments to default_instrument and now only accepts one instrument.

minecraft:projectile

  • The entity field now only accepts an entity type instead of an entity initialiser.

So if you had this:

{
  "minecraft:projectile": {
    "entity": {
      "type": "minecraft:trident"
    }
  }
}

You now have to use this instead:

{
  "minecraft:projectile": {
    "entity": "minecraft:trident"
  }
}
  • Added an optional components field, which is a set of components to apply to the spawned entity.

Example:

{
  "minecraft:projectile": {
    "components": {
      "minecraft:chicken/variant": "minecraft:cold"
    },
    "entity": "minecraft:egg"
  }
}

minecraft:text_holder

  • Now opens a book on use directly instead of needing an action.

minecraft:trim_material_provider

  • Provides a trim material for use in recipes.
  • Its value is an id pointing to a trim material.
  • This value can be changed for individual item stacks in the new minecraft:provides_trim_material data component.

Example:

{
  "minecraft:trim_material_provider": "minecraft:diamond"
}

minecraft:weapon

  • Renamed the damage_per_attack field to item_damage_per_attack.
  • Added the disable_blocking_for_seconds field.
    • Disables blocking when used on a target wielding an item that is attack blocking.
    • Its value is a non-negative float.

Actions

  • Removed action context parameters in favour of entity targets and new position targets.
    • These values need to be updated accordingly.
    • There is more information on this in the Entity Targets section below.

So if you had this:

{
  "type": "minecraft:play_sound",
  "category": "neutral",
  "pitch": 1.0,
  "position": "this",
  "sound": "minecraft:item.bottle.fill",
  "volume": 1.0
}

You now have to use this instead:

{
  "type": "minecraft:play_sound",
  "category": "neutral",
  "pitch": 1.0,
  "position": "origin",
  "sound": "minecraft:item.bottle.fill",
  "volume": 1.0
}
  • Various actions gained fields for entity targets.
  • Exchanging stacks now works in more places and in more contexts.
  • Simplified action requirements to only take a predicate due to the migration towards context parameters.

So if you had this:

{
  "requirements": {
    "conditions": {
      "condition": "minecraft:location_check",
      "predicate": {
        "block": {
          "blocks": "minecraft:respawn_anchor"
        }
      }
    },
    "context": {
      "entity": "this",
      "position": "target"
    }
  }
}

You now have to use this instead:

{
  "requirements": {
    "condition": "minecraft:location_check",
    "position": "interacted",
    "predicate": {
      "block": {
        "blocks": "minecraft:respawn_anchor"
      }
    }
  }
}
  • Removed the following actions:
    • minecraft:open_book_from_item
      • This is now part of the minecraft:text_holder item behaviour component.
    • minecraft:saddle_entity_at_position
      • This has been replaced by equipment and minecraft:equip_entity_at_position should be used instead.
    • minecraft:set_item_pointer_location
      • This has been moved to an item modifier.

minecraft:attach_leashed_entities_on_block

  • Added a new field called position:
    • Its value is a position target and determines the position the leashed entities will be attached to.

minecraft:damage_item

  • Removed the ignore_game_mode field.
    • The action now always takes the game mode into account.

minecraft:drop_item_from_block

  • Changed the item field to take an item stack instead of an item.

minecraft:exchange_item

  • Changed the item field to take an item stack instead of an item.
  • Removed the components field.
    • The components are now defined in the item field instead.

So if you had this:

{
  "type": "minecraft:exchange_item",
  "components": {
    "minecraft:potion_contents": {
      "potion": "minecraft:water"
    }
  },
  "item": "minecraft:potion"
}

You now have to use this instead:

{
  "type": "minecraft:exchange_item",
  "item": {
    "id": "minecraft:potion",
    "components": {
      "minecraft:potion_contents": {
        "potion": "minecraft:water"
      }
    },
    "count": 1
  }
}

minecraft:fertilize

  • Added a new field called position:
    • Its value is a position target and determines the position to fertilize.

minecraft:modify_item

  • Removed the context field.
    • The item modifier now uses the exact same context as the action.
    • Added the stack field, which is an item stack target to use a specific item stack from the context.

minecraft:prime_tnt

  • Does not prime tnt when the tntExplodes game rule is disabled.
  • Turns any block into primed TNT now instead of just TNT.
    • The block that is primed is used for the display.
  • Checking for the TNT block must be done in the action requirements now.

So if you had this:

{
  "action": {
    "type": "minecraft:prime_tnt",
    "position": "target"
  }
}

You now have to use this instead:

{
  "action": {
    "type": "minecraft:prime_tnt",
    "position": "interacted"
  },
  "requirements": {
    "condition": "minecraft:location_check",
    "position": "interacted",
    "predicate": {
      "block": {
        "blocks": "minecraft:tnt"
      }
    }
  }
}

minecraft:run_function

  • Moved the entity and position fields up due to the removal of action context parameters.

So if you had this:

{
  "type": "minecraft:run_function",
  "function": "example:function",
  "context": {
    "entity": "this",
    "position": "this"
  }
}

You now have to use this instead:

{
  "type": "minecraft:run_function",
  "function": "example:function",
  "entity": "this",
  "position": "origin"
}
  • Both fields are optional now and will never try to pass the parameter if not specified.

So if you only want the position context you can use this:

{
  "type": "minecraft:run_function",
  "function": "example:function",
  "position": "origin"
}

minecraft:sequence

  • Now no longer incorrectly reports duplicate actions defined in the same sequence as recursive.

minecraft:swing_hand

  • Added a new field called entity:
    • Its value is an entity target and determines whose hand to swing.

Predicates

  • Added a minecraft:villager entity sub-predicate, which is a temporary solution that will be removed once a component predicate for a Villager's type has been added (alongside data-driven trades as those will be part of vanilla by then)
    • Fields:
      • variant, which is a Villager variant, list of Villager variants or hash-prefixed Villager variant tag and the Villager's variant must match in order to pass.

Example:

{
  "type": "minecraft:villager",
  "variant": [
    "minecraft:swamp",
    "minecraft:snow",
    "minecraft:plains"
  ]
}

minecraft:location_check

  • Added a new optional field called position:
    • Its value is a position target and is the position to retrieve to use for the check.
    • Its default value is "origin" to match existing behaviour.
    • Fails if the position defined is not present in the context.

Example:

{
  "condition": "minecraft:location_check",
  "position": "interacted",
  "predicate": {
    "block": {
      "blocks": "minecraft:tnt"
    }
  }
}

Item Modifiers

minecraft:set_item_pointer_location

  • Sets the minecraft:lodestone_tracker data component to the provided position.
  • Fields:
    • position, which is a position target to use as the item pointer location.

Example:

{
  "function": "minecraft:set_item_pointer_location",
  "position": "interacted"
},

minecraft:split

  • Splits the item stack into the original and one with the provided count.
  • Fields:
    • count, which is a number provider to split the item stack into one with the provided new count.

Example:

{
  "count": 1.0,
  "function": "minecraft:split"
}

Context Parameters

Added the following context parameters from the migration:

  • minecraft:side, which is the side of a block that was interacted with.
    • Passed in the minecraft:bucket item behaviour.
    • Passed in the minecraft:entity item behaviour.
    • Used in dispense behaviour to interact with the Dispenser's facing direction.
    • Used in the minecraft:side_check predicate.
    • Used in the minecraft:drop_item_from_block action.
    • Used in the minecraft:fertilize action.
    • Used in the minecraft:use_bucket action.
  • minecraft:interacted_position, which is the position that the user interacted with.
    • Passed and used in various item behaviour.
    • Used in dispense behaviour to interact with the Dispenser's output position.
  • minecraft:equipment_slot, which is used when an item is broken.
  • minecraft:hand, which is the hand used to execute an action.
    • Passed to various item events when an item is being used.
    • Used in the minecraft:swing_hand action to swing the hand.
    • Used in the minecraft:open_book_from_item action to get the book from the executing entity.
  • minecraft:target_entity, which is the entity that was interacted with.
    • Used in the minecraft:entity and minecraft:throwable item behaviour for the spawned entities.
    • Passed to the minecraft:hit_entity and minecraft:use_weapon item events for the attacked entity.
    • Passed to the minecraft:use_on_entity item event for the interacted entity.

Action context parameters were replaced with new targets to be consistent with vanilla. This means that all parameters are now passed to loot tables, item modifiers and predicates instead of having to select specific ones using action context parameters, which were removed as well. This also means that you may need to update the value of certain fields. All changes are visible below.

Entity Targets

Old New Context Parameter
"this" "this" minecraft:this_entity
"target" "target_entity" minecraft:target_entity

So if you had this:

{
  "type": "minecraft:set_entity_name_from_item",
  "entity": "target"
}

You now have to use this instead:

{
  "type": "minecraft:set_entity_name_from_item",
  "entity": "target_entity"
}

Position Targets

Old New Context Parameter
"this" "origin" minecraft:origin
"target" "interacted" minecraft:interacted_position

So if you had this:

{
  "type": "minecraft:set_block_state",
  "position": "target",
  "state": {
    "Name": "minecraft:farmland",
    "Properties": {
      "moisture": "0"
    }
  }
}

You now have to use this instead:

{
  "type": "minecraft:set_block_state",
  "position": "interacted",
  "state": {
    "Name": "minecraft:farmland",
    "Properties": {
      "moisture": "0"
    }
  }
}

Item Stack Targets

These are new and point to item stacks to use from the context. Currently the only available value is tool, which points to the minecraft:tool context parameter.

Trades

  • Added an optional merchant_predicate field, which is a predicate that must pass in order for the trade to be considered of a merchant's trade set.

Fixes

  • The minecraft:charge_type property now works correctly again on item assets.
0.5.0+1.21.3Релиз1.21.2, 1.21.3 · 10 марта 2026 г.

This version has a big change for 1.21.3 by renaming the root fields for items. It also moves crafting remainders to recipes and adds brewing recipes.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

A Brewing Stand with an open recipe book

Changes

  • Removed armour materials entirely.
    • Its values are now inlined in the minecraft:armor item behaviour component instead.

Assets

  • Added four textures for the Brewing Stand recipe book filter button.
  • Added four textures for the Brewing Stand recipe book alternatives overlay.

Items

  • Renamed the base field to display.
    • It only contains data related to the item's display.
  • Renamed the components field to behavior.
    • It only contains (or should only contain) item behaviour. Everything else must be moved elsewhere.

These two changes have been made due to a new required field in the item display, which already breaks all existing item definitions.

  • Added the optional attribute_modifiers field to the item.
    • Its value is the same as the list form of the minecraft:attribute_modifiers data component.
  • Added the model field to the item display.
    • Its value is an id referencing an item model in a resource pack.
    • This value can be changed for individual item stacks in the minecraft:item_model data component.

So if you had this:

{
  "base": {
    "translation_key": "item.minecraft.stick"
  },
  "components": {
    "minecraft:fuel": {
      "ticks": 100
    },
    "minecraft:stackable": 64
  }
}

You now have to use this instead:

{
  "display": {
    "translation_key": "item.minecraft.stick",
    "model": "minecraft:stick"
  },
  "behavior": {
    "minecraft:fuel": {
      "ticks": 100
    },
    "minecraft:stackable": 64
  }
}
  • Added the optional tooltip_style field to the item display.
    • Its value is an id referencing a texture in a resource pack.
    • This value can be changed for individual item stacks in the minecraft:tooltip_style data component.
  • Added the minecraft:before_death_holder item event.
  • Added new item tags:
    • #minecraft:brewing_inputs, which is used for the accepted items for the Brewing Stand input slots.
    • #minecraft:mundane_potion_reagents, which is used to convert Water Bottles to Mundane Potions in a brewing recipe.

Item Behaviour Components

  • Added the following item behaviour components:
    • minecraft:glider
  • Removed the following item behaviour components:
    • minecraft:attribute_modifiers
      • This has been replaced with the attribute_modifiers field on the item and entries should be moved there.

So if you had this:

{
  "behavior": {
    "minecraft:attribute_modifiers": [
      {
        "id": "example:tool.heavy",
        "type": "minecraft:gravity",
        "amount": 0.01,
        "operation": "add_value",
        "slot": "hand"
      }
    ]
  }
}

You now have to use this instead:

{
  "attribute_modifiers": [
    {
      "id": "example:tool.heavy",
      "type": "minecraft:gravity",
      "amount": 0.01,
      "operation": "add_value",
      "slot": "hand"
    }
  ]
}
  • minecraft:armor
    • This has been replaced with the attribute_modifiers field on the item and entries should be moved there.

So if you had this:

{
  "behavior": {
    "minecraft:armor": {
      "attribute_id": "minecraft:armor.chestplate",
      "defense": 8,
      "knockback_resistance": 0.0,
      "toughness": 2.0
    }
  }
}

You now have to use this instead:

{
  "attribute_modifiers": [
    {
      "id": "minecraft:armor.chestplate",
      "type": "minecraft:armor",
      "amount": 8.0,
      "operation": "add_value",
      "slot": "chest"
    },
    {
      "id": "minecraft:armor.chestplate",
      "type": "minecraft:armor_toughness",
      "amount": 2.0,
      "operation": "add_value",
      "slot": "chest"
    }
  ]
}
  • minecraft:life_saving
    • This has been replaced with the new minecraft:before_death_holder item event.
    • To replicate the previous behaviour, the minecraft:clear_status_effects and minecraft:add_status_effects actions can be used.
    • Note that this means that the minecraft:death_protection data component is unused as a result.
    • The reason this was moved to an item event is to support the newly added 'consume effects' from the minecraft:death_protection data component from vanilla in 1.21.3, which the action system accommodates for with even more possibilities.
  • minecraft:recipe_remainder
    • This has been replaced by remainders in recipe ingredients directly and the new remainder field in the minecraft:fuel item behaviour component.
  • minecraft:useable_on_fluid
    • This has been replaced in favour of passes in their respective behaviour components.

minecraft:consumable

  • Moved the result_item field to remainder in minecraft:useable.

minecraft:cooldown

  • Added an optional group field, which is the id to use as the cooldown group. If not specified, it will use the item id

minecraft:entity

  • Added an optional passes field, which is a list of strings that allows its user to place an entity given a certain context.
    • block: Allows the user to place the entity on a block.
    • fluid: Allows the user to place the entity on a fluid.
  • Its default value is ["block"].

Example:

{
  "allow_item_data": true,
  "entity": {
    "type": "minecraft:pig"
  },
  "passes": [
    "block",
    "fluid"
  ]
}

minecraft:equipment

  • Updated to match the minecraft:equippable data component.
  • Note that the dispensable field is unused as it has been replaced by the minecraft:dispensable item behaviour.

minecraft:food

  • Removed the effects field.
  • This should now be applied with the minecraft:consume_item or minecraft:eat_item item event combined with predicates and the new minecraft:add_status_effects action.

So if you had this:

{
  "components": {
    "minecraft:food": {
      "effects": [
        {
          "effect": {
            "id": "minecraft:hunger",
            "duration": 600,
            "show_icon": true
          },
          "probability": 0.8
        }
      ],
      "nutrition": 4,
      "saturation": 0.8
    }
  }
}

You now have to use this instead:

{
  "components": {
    "minecraft:food": {
      "nutrition": 4,
      "saturation": 0.8
    }
  },
  "events": {
    "minecraft:consume_item": {
      "action": {
        "type": "minecraft:add_status_effects",
        "effects": [
          {
            "id": "minecraft:hunger",
            "duration": 600,
            "show_icon": true
          }
        ],
        "entity": "this"
      },
      "requirements": {
        "conditions": {
          "chance": 0.8,
          "condition": "minecraft:random_chance"
        },
        "context": {
          "entity": "this",
          "position": "this"
        }
      }
    }
  }
}

minecraft:fuel

  • Added an optional remainder field, which is the item stack to leave when used as a fuel.
  • This replaces the minecraft:recipe_remainder item behaviour that was used previously for this.

Example:

{
  "remainder": {
    "id": "minecraft:bucket",
    "count": 1
  },
  "ticks": 20000
}

minecraft:glider

  • Allows its user to glide in the air and use Firework Rockets to boost themselves forwards.
  • Fields:
    • useable_if: An optional item predicate. Checks whether its user can use the glider. If not specified, the user can always use the glider.

minecraft:useable

  • Added an optional remainder field, which is the item stack to leave when finished using, whether instantaneous or over a specified duration.

Example:

{
  "animation": "eat",
  "remainder": {
    "id": "minecraft:bowl",
    "count": 1
  },
  "ticks": {
    "type": "minecraft:constant",
    "amount": 32
  }
}
  • Changed the way the use duration in the ticks field works:
  • If not specified, the item will be used instantly instead of being used indefinitely.
  • To reproduce the previous behaviour, use the new minecraft:indefinite use duration provider.
  • This makes the field in the behaviour component the same as the data component in all cases.
  • A positive integer can still be used as a direct usage of minecraft:constant.

So if you had this:

{
  "minecraft:useable": {
    "animation": "block"
  }
}

You now have to use this instead:

{
  "minecraft:useable": {
    "animation": "block",
    "ticks": {
      "type": "minecraft:indefinite"
    }
  }
}

Data Components

  • Removed the following data components:
    • minecraft:immune_to_damage
      • This has been replaced by minecraft:damage_resistant from vanilla.
      • Entries are datafixed properly.
  • Made the following data components unused:
    • minecraft:death_protection
      • This has been replaced by the minecraft:before_death_holder item event to accommodate more actions.
      • The reason the data component itself still exists is to not break existing worlds.

minecraft:equippable

  • No longer uses the dispensable field as it has been replaced by the minecraft:dispensable item behaviour.

minecraft:glider

  • Now has an optional useable_if field, which is an item predicate to check whether its user can use the glider.
  • If not specified, the user can always use the glider.

minecraft:use_duration

  • You now no longer specify a ticks field, making it consistent with the way it is used in the minecraft:useable behaviour.

So if you had this:

{
  "ticks": {
    "type": "minecraft:constant",
    "amount": 32
  }
}

You now have to use this instead:

{
  "type": "minecraft:constant",
  "amount": 32
}
  • You can no longer specify an empty map to specify an indefinite use duration and you must use the minecraft:indefinite use duration provider instead.

So if you had this:

{}

You must now use this:

{
  "type": "minecraft:indefinite"
}
  • A positive integer can still be used as a direct usage of the minecraft:constant use duration provider.

minecraft:weapon_attack_damage

  • When determining whether to add the base minecraft:attack_damage attribute or not, it now defaults to true instead of false and must be explicitly set by rules accordingly.

Use Durations

  • Added the following use durations:
    • minecraft:indefinite

minecraft:indefinite

  • Always uses the item indefinitely.
  • Has no additional fields.

Actions

  • Added the following actions:
    • minecraft:add_status_effects

minecraft:add_status_effects

  • Adds status effects to an entity.
  • The action is unsuccessful if the entity does not exist, is not a living entity or if no effect is added.
  • Fields:
    • effects: A list of status effects. The effects to apply to the entity.
    • entity: An action context parameter. The entity to target.

Example:

{
  "type": "minecraft:add_status_effects",
  "effects": [
    {
      "id": "minecraft:regeneration",
      "amplifier": 1,
      "duration": 100,
      "show_icon": true
    },
    {
      "id": "minecraft:absorption",
      "duration": 2400,
      "show_icon": true
    }
  ],
  "entity": "this"
}

Entity Initialisers

  • Removed the variant field from minecraft:boat as its variant has been split up into separate entity types.

So if you had this:

{
  "type": "minecraft:boat",
  "variant": "minecraft:oak"
}

You must now use this instead:

{
  "type": "minecraft:oak_boat"
}
  • Removed the prevent_spawn_from_riptide field from minecraft:trident.

Recipes

  • Added the following recipe types:
    • minecraft:brewing_amplify
    • minecraft:brewing_modify
  • Removed the following recipe types:
  • minecraft:item_coloring
    • This has been replaced by minecraft:crafting_transmute from vanilla.
  • Added remainders to ingredients.
    • Replaces the minecraft:recipe_remainder item behaviour component.
    • The existing format still works.
    • Currently only in use for shaped and shapeless recipes.
    • Fields:
      • items: An item, list of items or hash-prefixed item tag. The items to allow for this ingredient.
      • remainder: An optional item stack. The item stack to leave when the ingredient is consumed.

Example:

{
  "items": "minecraft:milk_bucket",
  "remainder": {
    "id": "minecraft:bucket",
    "count": 1
  }
}

minecraft:brewing_amplify

  • Transforms the item into another one after brewing.
  • Format:
    • group: An optional string. Used to group recipes together.
    • base: An item. The item to transform.
    • reagent: An ingredient. The items to accept to modify the item.
    • result: An item. The item to transform into.
    • brewing_time: An optional positive integer. The number of ticks the recipe takes to complete.
      • Its default value is 400.
  • A remainder may be specified for the reagent that is left in the slot or dropped in the world after brewing.

Example:

{
  "type": "minecraft:brewing_amplify",
  "reagent": {
    "items": "minecraft:dragon_breath",
    "remainder": {
      "id": "minecraft:glass_bottle",
      "count": 1
    }
  },
  "base": "minecraft:splash_potion",
  "result": "minecraft:lingering_potion"
}

minecraft:brewing_modify

  • Changes the potion present on the item into another one after brewing.
  • Format:
    • group: An optional string. Used to group recipes together.
    • base: A potion. The potion to modify.
    • reagent: An ingredient. The items to accept to modify the potion.
    • result: A potion. The potion to leave.
  • A remainder may be specified for the reagent that is left in the slot or dropped in the world after brewing.

Example:

{
  "type": "minecraft:brewing_modify",
  "reagent": "minecraft:sugar",
  "base": "minecraft:awkward",
  "result": "minecraft:swiftness"
}

Colour Providers

  • Added the following colour provider types:
    • minecraft:first_to_pass_condition

minecraft:first_to_pass_condition

  • Uses the first colour provider whose condition passes or uses the fallback otherwise.
  • Fields:
    • entries: A non-empty list of colour providers. The colours to pick from depending on their conditions.
    • fallback: The fallback colour provider to use when all entries fail.
  • Entry fields:
    • color: A colour provider.
    • condition: An entry condition. The condition that needs to pass in order to use this colour provider.
  • Entry condition fields:
    • progress: A number range that checks for the progress.

Example:

{
  "type": "minecraft:first_to_pass_condition",
  "entries": [
    {
      "color": {
        "type": "minecraft:constant",
        "color": -43948
      },
      "condition": {
        "progress": 1.0
      }
    }
  ],
  "fallback": {
    "type": "minecraft:constant",
    "color": -9402369
  }
}
0.5.0+1.21.1Релиз1.21, 1.21.1 · 10 марта 2026 г.

This version moves crafting remainders to recipes and adds brewing recipes.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

A Brewing Stand with an open recipe book

Changes

Assets

  • Added four textures for the Brewing Stand recipe book filter button.
  • Added four textures for the Brewing Stand recipe book alternatives overlay.

Items

  • Added the optional attribute_modifiers field to the item.
    • Its value is the same as the list form of the minecraft:attribute_modifiers data component.
  • Added the minecraft:before_death_holder item event.
  • Added new item tags:
    • #minecraft:brewing_inputs, which is used for the accepted items for the Brewing Stand input slots.
    • #minecraft:mundane_potion_reagents, which is used to convert Water Bottles to Mundane Potions in a brewing recipe.

Item Behaviour Components

  • Removed the following item behaviour components:
    • minecraft:attribute_modifiers
      • This has been replaced with the attribute_modifiers field on the item and entries should be moved there.

So if you had this:

{
  "behavior": {
    "minecraft:attribute_modifiers": [
      {
        "id": "example:tool.heavy",
        "type": "minecraft:gravity",
        "amount": 0.01,
        "operation": "add_value",
        "slot": "hand"
      }
    ]
  }
}

You now have to use this instead:

{
  "attribute_modifiers": [
    {
      "id": "example:tool.heavy",
      "type": "minecraft:gravity",
      "amount": 0.01,
      "operation": "add_value",
      "slot": "hand"
    }
  ]
}
  • minecraft:life_saving
    • This has been replaced with the new minecraft:before_death_holder item event.
    • To replicate the previous behaviour, the minecraft:clear_status_effects and minecraft:add_status_effects actions can be used.
    • Note that this means that the minecraft:death_protection data component is unused as a result.
    • The reason this was moved to an item event is to support the newly added 'consume effects' from the minecraft:death_protection data component from vanilla in 1.21.3, which the action system accommodates for with even more possibilities.
  • minecraft:recipe_remainder
    • This has been replaced by remainders in recipe ingredients directly and the new remainder field in the minecraft:fuel item behaviour component.
  • minecraft:useable_on_fluid
    • This has been replaced in favour of passes in their respective behaviour components.

minecraft:consumable

  • Moved the result_item field to remainder in minecraft:useable.

minecraft:entity

  • Added an optional passes field, which is a list of strings that allows its user to place an entity given a certain context.
    • block: Allows the user to place the entity on a block.
    • fluid: Allows the user to place the entity on a fluid.
  • Its default value is ["block"].

Example:

{
  "allow_item_data": true,
  "entity": {
    "type": "minecraft:pig"
  },
  "passes": [
    "block",
    "fluid"
  ]
}

minecraft:food

  • Removed the effects field.
  • This should now be applied with the minecraft:consume_item or minecraft:eat_item item event combined with predicates and the new minecraft:add_status_effects action.

So if you had this:

{
  "components": {
    "minecraft:food": {
      "effects": [
        {
          "effect": {
            "id": "minecraft:hunger",
            "duration": 600,
            "show_icon": true
          },
          "probability": 0.8
        }
      ],
      "nutrition": 4,
      "saturation": 0.8
    }
  }
}

You now have to use this instead:

{
  "components": {
    "minecraft:food": {
      "nutrition": 4,
      "saturation": 0.8
    }
  },
  "events": {
    "minecraft:consume_item": {
      "action": {
        "type": "minecraft:add_status_effects",
        "effects": [
          {
            "id": "minecraft:hunger",
            "duration": 600,
            "show_icon": true
          }
        ],
        "entity": "this"
      },
      "requirements": {
        "conditions": {
          "chance": 0.8,
          "condition": "minecraft:random_chance"
        },
        "context": {
          "entity": "this",
          "position": "this"
        }
      }
    }
  }
}

minecraft:fuel

  • Added an optional remainder field, which is the item stack to leave when used as a fuel.
  • This replaces the minecraft:recipe_remainder item behaviour that was used previously for this.

Example:

{
  "remainder": {
    "id": "minecraft:bucket",
    "count": 1
  },
  "ticks": 20000
}

minecraft:useable

  • Added an optional remainder field, which is the item stack to leave when finished using, whether instantaneous or over a specified duration.

Example:

{
  "animation": "eat",
  "remainder": {
    "id": "minecraft:bowl",
    "count": 1
  },
  "ticks": {
    "type": "minecraft:constant",
    "amount": 32
  }
}
  • Changed the way the use duration in the ticks field works:
  • If not specified, the item will be used instantly instead of being used indefinitely.
  • To reproduce the previous behaviour, use the new minecraft:indefinite use duration provider.
  • This makes the field in the behaviour component the same as the data component in all cases.
  • A positive integer can still be used as a direct usage of minecraft:constant.

So if you had this:

{
  "minecraft:useable": {
    "animation": "block"
  }
}

You now have to use this instead:

{
  "minecraft:useable": {
    "animation": "block",
    "ticks": {
      "type": "minecraft:indefinite"
    }
  }
}

Data Components

  • Removed the following data components:
    • minecraft:immune_to_damage
      • This has been replaced by minecraft:damage_resistant from vanilla.
      • Entries are datafixed properly.

minecraft:use_duration

  • You now no longer specify a ticks field, making it consistent with the way it is used in the minecraft:useable behaviour.

So if you had this:

{
  "ticks": {
    "type": "minecraft:constant",
    "amount": 32
  }
}

You now have to use this instead:

{
  "type": "minecraft:constant",
  "amount": 32
}
  • You can no longer specify an empty map to specify an indefinite use duration and you must use the minecraft:indefinite use duration provider instead.

So if you had this:

{}

You must now use this:

{
  "type": "minecraft:indefinite"
}
  • A positive integer can still be used as a direct usage of the minecraft:constant use duration provider.

minecraft:weapon_attack_damage

  • When determining whether to add the base minecraft:attack_damage attribute or not, it now defaults to true instead of false and must be explicitly set by rules accordingly.

Use Durations

  • Added the following use durations:
    • minecraft:indefinite

minecraft:indefinite

  • Always uses the item indefinitely.
  • Has no additional fields.

Actions

  • Added the following actions:
    • minecraft:add_status_effects

minecraft:add_status_effects

  • Adds status effects to an entity.
  • The action is unsuccessful if the entity does not exist, is not a living entity or if no effect is added.
  • Fields:
    • effects: A list of status effects. The effects to apply to the entity.
    • entity: An action context parameter. The entity to target.

Example:

{
  "type": "minecraft:add_status_effects",
  "effects": [
    {
      "id": "minecraft:regeneration",
      "amplifier": 1,
      "duration": 100,
      "show_icon": true
    },
    {
      "id": "minecraft:absorption",
      "duration": 2400,
      "show_icon": true
    }
  ],
  "entity": "this"
}

Recipes

  • Added the following recipe types:
    • minecraft:brewing_amplify
    • minecraft:brewing_modify
  • Added remainders to ingredients.
    • Replaces the minecraft:recipe_remainder item behaviour component.
    • The existing format still works.
    • Currently only in use for shaped and shapeless recipes.
    • Fields:
      • items: An ingredient entry or list of ingredient entries.
      • remainder: An optional item stack. The item stack to leave when the ingredient is consumed.

Example:

{
  "items": {
    "item": "minecraft:milk_bucket"
  },
  "remainder": {
    "id": "minecraft:bucket",
    "count": 1
  }
}

minecraft:brewing_amplify

  • Transforms the item into another one after brewing.
  • Format:
    • group: An optional string. Used to group recipes together.
    • base: An item. The item to transform.
    • reagent: An ingredient. The items to accept to modify the item.
    • result: An item. The item to transform into.
    • brewing_time: An optional positive integer. The number of ticks the recipe takes to complete.
      • Its default value is 400.
  • A remainder may be specified for the reagent that is left in the slot or dropped in the world after brewing.

Example:

{
  "type": "minecraft:brewing_amplify",
  "reagent": {
    "items": {
      "item": "minecraft:dragon_breath"
    },
    "remainder": {
      "id": "minecraft:glass_bottle",
      "count": 1
    }
  },
  "base": "minecraft:splash_potion",
  "result": "minecraft:lingering_potion"
}

minecraft:brewing_modify

  • Changes the potion present on the item into another one after brewing.
  • Format:
    • group: An optional string. Used to group recipes together.
    • base: A potion. The potion to modify.
    • reagent: An ingredient. The items to accept to modify the potion.
    • result: A potion. The potion to leave.
  • A remainder may be specified for the reagent that is left in the slot or dropped in the world after brewing.

Example:

{
  "type": "minecraft:brewing_modify",
  "reagent": {
    "item": "minecraft:sugar"
  },
  "base": "minecraft:awkward",
  "result": "minecraft:swiftness"
}
0.5.0-preview.3+1.21.3Бета1.21.2, 1.21.3 · 4 марта 2026 г.

This preview version adds an optional duration field to brewing recipes and previews for recipe alternatives.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

Changes

Assets

  • Added four textures for the Brewing Stand recipe book alternatives overlay.

Items

  • Renamed the #minecraft:mundane_potion_additions item tag to #minecraft:mundane_potion_reagents.

Recipes

  • Renamed the addition field to reagent for brewing recipes.

So if you had this:

{
  "type": "minecraft:brewing_modify",
  "addition": "minecraft:sugar",
  "base": "minecraft:awkward",
  "result": "minecraft:swiftness"
}

You now have to use this instead:

{
  "type": "minecraft:brewing_modify",
  "base": "minecraft:awkward",
  "reagent": "minecraft:sugar",
  "result": "minecraft:swiftness"
}
  • Added an optional brewing_duration field to brewing recipes, which is a positive integer representing the number of ticks the recipe takes to complete.
    • Its default value is 400.

Example:

{
  "type": "minecraft:brewing_modify",
  "base": "minecraft:awkward",
  "reagent": "minecraft:sugar",
  "result": "minecraft:swiftness",
  "brewing_time": 200
}
0.5.0-preview.3+1.21.1Бета1.21, 1.21.1 · 4 марта 2026 г.

This preview version adds an optional duration field to brewing recipes and previews for recipe alternatives.

For a few more details regarding the split and future you can look at the roadmap to 1.21!

Changes

Assets

  • Added four textures for the Brewing Stand recipe book alternatives overlay.

Items

  • Renamed the #minecraft:mundane_potion_additions item tag to #minecraft:mundane_potion_reagents.

Recipes

  • Renamed the addition field to reagent for brewing recipes.

So if you had this:

{
  "type": "minecraft:brewing_modify",
  "addition": "minecraft:sugar",
  "base": "minecraft:awkward",
  "result": "minecraft:swiftness"
}

You now have to use this instead:

{
  "type": "minecraft:brewing_modify",
  "base": "minecraft:awkward",
  "reagent": "minecraft:sugar",
  "result": "minecraft:swiftness"
}
  • Added an optional brewing_duration field to brewing recipes, which is a positive integer representing the number of ticks the recipe takes to complete.
    • Its default value is 400.

Example:

{
  "type": "minecraft:brewing_modify",
  "base": "minecraft:awkward",
  "reagent": "minecraft:sugar",
  "result": "minecraft:swiftness",
  "brewing_time": 200
}

Комментарии

Загружаем…