Advancement



Advancements are a way to gradually guide new players into Minecraft and give them challenges to complete, similar to the more simple system of achievements available on certain consoles and devices running Pocket Edition.

Obtaining
Advancements can be completed in any game mode, and are obtained and saved per world. Advancements can also be granted (and revoked) using the command.

Although advancements guide players logically through the game, they are independent of each other; an advancement can be completed without having completed the advancements "before" it.

When an advancement is obtained, a sliding toast notification displays in the top right corner. The color of the header text in the notification depends on the advancement; normal advancements have yellow header text, while special "challenge" advancements have pink header text. When a final "goal" advancement is completed, the header text will display Goal Reached! instead of the typical Advancement Made! text.

Interface


The button to access the Advancements screen is found on the pause menu screen. You can also open this screen by pressing (this can be changed in the in-game options menu).

The advancement system involves several trees composed of advancements, each tree beginning with a root advancement and ending with goal or challenge advancements. By clicking and dragging, you can view different branches of an advancement tree. Each tree is categorized into different tabs (which are, themselves, advancements). There are currently five tabs in vanilla Minecraft (although more may possibly be added ):


 * Minecraft: The heart and story of the game.
 * Adventure: Adventure, exploration, and combat.
 * Nether: Bring summer clothes.
 * The End: Or the beginning?
 * Husbandry: The world is full of friends and food.

Each tab has a different background with a repeating texture.

Advancement icons display a header name and description when hovered over. They only appear in a tree when the advancement before it is completed, although, as stated before, advancements can be completed in any order.

The icon frames of advancements can vary in appearance based on difficulty, and whether or not it was completed. A legend is provided below:

Extra advancements and tabs can be added and customized with the use of JSON files, as detailed below.

JSON Format
Custom advancements in the 'data/advancements' folder of a Minecraft world store the advancement data for that world as separate JSON files:

These JSON files are structured according to the following format:


 * The root tag.
 * : The optional display data.
 * : The data for the icon.
 * : The item id.
 * : The damage value for the item.
 * : The title for this advancement.
 * : A JSON text component (containing text and formatting like used in /tellraw and various other commands. Also translate tag can be used here).
 * : The optional type of frame for the icon.  for a tile with a more fancy spiked border as it is used for the kill all mobs advancement,   for a tile with a rounded border as it is used for the full beacon advancement,   for a normal tile (default.)
 * : The optional directory for the background to use in this advancement tab (only for the root advancement).
 * : The description of the advancement.
 * : A JSON text component (containing text and formatting like used in /tellraw and various other commands. Also translate tag can be used here).
 * : Can be  or  . Whether or not to show the toast pop up after completing this advancement. Defaults to true.
 * : Can be  or  . Whether or not to announce in the chat when this advancement has been completed. Defaults to true.
 * : Can be  or  . Whether or not to hide this advancement and all its children from the advancement screen until this advancement have been completed. Has no effect on root advancements them self but will still affect all their children. Defaults to false.
 * : The optional parent advancement directory of this advancement (does not apply for the root advancement).
 * : The required criteria that have to be met.
 * : A name given to the criteria (can be any string, must be unique).
 * : The trigger for this advancement; specifies what the game should check for the advancement.
 * : All the conditions that need to be met when the trigger gets activated.
 * : An optional list of requirements (all the  ). If all criteria are required, this may be omitted. With multiple criteria: requirements contains a list of lists with criteria (all criteria need to be mentioned). If all the criteria within any of the lists is met, it will complete the advancement. (basically AND grouping and OR grouping the criteria.)
 * : An optional collection of the rewards provided when this advancement is obtained.
 * : A list of crafting recipes (strings).
 * : A list of loot tables (strings).
 * : An amount of experience.
 * : A function to run. Functions are text files with the file extension   in .minecraft\saves\XXXX\data\functions\ and can contain a list of commands to run in order.

List of triggers
Triggers when the player breeds 2 animals. Available conditions:
 * minecraft : bred_animals
 * : The child that results from the breeding.
 * : The parent.
 * : The partner (the entity the parent was bred with, useful for checking horses + donkey = mule breeding)
 * : The parent.
 * : The partner (the entity the parent was bred with, useful for checking horses + donkey = mule breeding)
 * : The partner (the entity the parent was bred with, useful for checking horses + donkey = mule breeding)

Triggers when the player takes a potion out of a brewing stand. Available conditions:
 * minecraft : brewed_potion
 * : A brewed potion ID.
 * : A brewed potion ID.

Triggers when the player travels between two dimensions. Available conditions:
 * minecraft : changed_dimension
 * : The dimension the entity traveled from. Accepts these 3 values.
 * : The dimension the entity traveled to. Same accepted values as above.
 * : The dimension the entity traveled to. Same accepted values as above.

Triggers when the player changes the structure of a beacon. (When the beacon updates itself). Available conditions:
 * minecraft : construct_beacon
 * : The tier of the updated beacon structure.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.

Triggers when the player consumes an item. Available conditions:
 * minecraft : consume_item
 * : The item that was consumed
 * : The item that was consumed

Triggers when the player cures a zombie villager. Available conditions:
 * minecraft : cured_zombie_villager
 * : The villager that is the result of the conversion. The 'type' tag is redundant since it will always be "villager".
 * : The zombie villager the conversion started on. The 'type' tag is redundant since it will always be "zombie_villager".
 * : The zombie villager the conversion started on. The 'type' tag is redundant since it will always be "zombie_villager".
 * : The zombie villager the conversion started on. The 'type' tag is redundant since it will always be "zombie_villager".

Triggers after the player gets a status effect applied or taken from them. Available conditions:
 * minecraft : effects_changed
 * : A list of status effects the player has.
 * : A status effect with the key name being the status effect name.
 * : The effect amplifier.
 * : The maximum value.
 * : The minimum value.
 * : The effect duration in ticks.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The minimum value.

Triggers when the player enchants an item through an enchanting table (does not get triggered through an anvil, or through commands). Available conditions:
 * minecraft : enchanted_item
 * : The levels spent on the enchantment.
 * : The maximum value.
 * : The minimum value.
 * : The levels spent on the enchantment.
 * : The maximum value.
 * : The minimum value.
 * : The minimum value.

Triggers when the player stands in a block. Checks every tick and will try to trigger for each successful match (up to 8 times, the maximum amount of blocks a player can stand in), which only works if the advancement is revoked from within the advancement using a function reward. Available conditions:
 * minecraft : enter_block
 * : The block that the player is standing in. Accepts block IDs.
 * : The block states of the block.
 * : A single block state, with the key name being the state name and the value being the required value of that state.
 * : A single block state, with the key name being the state name and the value being the required value of that state.

Triggers when an entity hurts a player. Available conditions:
 * minecraft : entity_hurt_player
 * : Checks the damage the entity did to the player.
 * : Checks if the damage was successfully blocked.
 * : Checks the amount of incoming damage against the entity before damage reduction.
 * : A maximum value.
 * : A minimum value.
 * : The entity that was the direct cause of the damage.
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow).
 * : Checks the amount of incoming damage against the entity after damage reduction.
 * : A maximum value.
 * : A minimum value.
 * : Checks if the damage bypasses the armor of a entity.
 * : Checks if the damage bypasses the invulnerability status of a entity.
 * : Checks if the damage is caused by starvation.
 * : Redundant but still possible.
 * : Checks if the damage originates from an explosion.
 * : Checks if the damage originates from fire.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow). Redundant but still possible.
 * : Redundant but still possible.
 * : Checks if the damage originates from an explosion.
 * : Checks if the damage originates from fire.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow). Redundant but still possible.
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow). Redundant but still possible.

Triggers when an entity kills a player. Available conditions:
 * minecraft : entity_killed_player
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow)
 * : The type of damage that killed an entity.
 * : Checks if the damage bypasses the armor of a entity.
 * : Checks if the damage bypasses the invulnerability status of a entity.
 * : Checks if the damage is caused by starvation.
 * : The entity that was the direct cause of the damage.
 * : Checks if the damage originates from an explosion.
 * : Checks if the damage originates from fire.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow). Redundant but still possible.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage (for example: The skeleton that shot the arrow). Redundant but still possible.

Triggers only using commands.
 * minecraft : impossible

Triggers when any changes happen to the player's inventory. Available conditions:
 * minecraft : inventory_changed
 * : A list of items in the player's inventory.
 * : The amount of slots empty in the inventory.
 * : The maximum value.
 * : The minimum value.
 * : The amount of slots completely filled (stacksize) in the inventory.
 * : The maximum value.
 * : The minimum value.
 * : The amount of slots occupied in the inventory.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The amount of slots occupied in the inventory.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.

Triggers after any item in the inventory has been damaged in any form. Available conditions:
 * minecraft : item_durability_changed
 * : The difference in durability.
 * : The maximum value.
 * : The minimum value.
 * : The remaining durability of the item.
 * : The maximum value.
 * : The minimum value.
 * : The item before it was damaged, allows you to check durability before the item was damaged.
 * : The maximum value.
 * : The minimum value.
 * : The item before it was damaged, allows you to check durability before the item was damaged.

Triggers when the player has the levitation status effect. Available conditions:
 * minecraft : levitation
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The duration of the levitation.
 * : The maximum value.
 * : The minimum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The duration of the levitation.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.

Triggers every 20 ticks (1 second) and checks where the player is. Available conditions:
 * minecraft : location

Triggers when the player travels to the Nether and then returns to the Overworld. Available conditions:
 * minecraft : nether_travel
 * : The Overworld distance between where the player entered the Nether and where the played exited the Nether.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.
 * : The maximum value.
 * : The minimum value.

Triggers when the player placed a block. Available conditions:
 * minecraft : placed_block
 * : The block that was placed. Accepts block IDs.
 * : The item that was used to place the block before the item was consumed.
 * : The location of the block that was placed.
 * : The block states of the block.
 * : A single block state, with the key name being the state name and the value being the required value of that state.
 * : The block states of the block.
 * : A single block state, with the key name being the state name and the value being the required value of that state.
 * : A single block state, with the key name being the state name and the value being the required value of that state.

Triggers when the player hurts an entity (including itself). Available conditions:
 * minecraft : player_hurt_entity
 * : The damage that was dealt
 * : Checks if the damage was successfully blocked.
 * : Checks the amount of incoming damage against the entity before damage reduction.
 * : A maximum value.
 * : A minimum value.
 * : The entity that was the direct cause of the damage.
 * : Checks the entity that was the source of the damage. Redundant because it will always be the player.
 * : Checks the amount of incoming damage against the entity after damage reduction.
 * : A maximum value.
 * : A minimum value.
 * : Checks if the damage bypasses the armor of a entity.
 * : Checks if the damage bypasses the invulnerability status of a entity.
 * : Checks if the damage is caused by starvation.
 * : Redundant but still possible.
 * : Checks if the damage originates from an explosion.
 * : Checks if the damage originates from fire.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage. Redundant but still possible.
 * : Redundant but still possible.
 * : Checks if the damage originates from an explosion.
 * : Checks if the damage originates from fire.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage. Redundant but still possible.
 * : Checks the entity that was the source of the damage. Redundant but still possible.

Triggers when the player kills an entity. Available conditions:
 * minecraft : player_killed_entity
 * : The entity that was killed.
 * : The type of damage that killed an entity.
 * : Checks if the damage bypasses the armor of a entity.
 * : Checks if the damage bypasses the invulnerability status of a entity.
 * : Checks if the damage is caused by starvation.
 * : The entity that was the direct cause of the damage.
 * : Checks if the damage originates from an explosion.
 * : Checks if the damage originates from fire.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage. Redundant because it will always be the player.
 * : Checks if the damage originates from magic.
 * : Checks if the damage originates from a projectile.
 * : Checks the entity that was the source of the damage. Redundant because it will always be the player.

Triggers when the player unlocks a recipe (using a knowledge book for example). Available conditions:
 * minecraft : recipe_unlocked
 * : The recipe that was unlocked.
 * : The recipe that was unlocked.

Triggers when the player enters a bed. Available conditions:
 * minecraft : slept_in_bed

Triggers when an entity has been summoned. Works with iron golems (pumpkin and iron blocks), snow golems (pumpkin and snow blocks), the ender dragon (ender crystals) and the wither (wither skulls and soul sand). Using dispensers to place the wither skulls or pumpkins will still activate this trigger. Spawn eggs, commands and mob spawners will not work however. Available conditions:
 * minecraft : summoned_entity

Triggers when the player tames an animal. Available conditions:
 * minecraft : tame_animal

Triggers every tick (20 times a second).
 * minecraft : tick

Triggers when the player uses an ender eye (in a world where strongholds generate). Available conditions:
 * minecraft : used_ender_eye
 * : The horizontal distance between the player and the stronghold.
 * : A maximum value.
 * : A minimum value.
 * : A maximum value.
 * : A minimum value.

Triggers when the players uses a totem. Available conditions:
 * minecraft : used_totem
 * : The item, only works with totem items.
 * : The item, only works with totem items.

Triggers when the player trades with a villager. Available conditions:
 * minecraft : villager_trade
 * : The item that was purchased.
 * : The villager the item was purchased from. The 'type' tag is redundant since it will always be "villager".
 * : The villager the item was purchased from. The 'type' tag is redundant since it will always be "villager".
 * : The villager the item was purchased from. The 'type' tag is redundant since it will always be "villager".

Trivia

 * Seventeen of the old computer edition achievements were re-implemented as advancements: Benchmarking (called Minecraft), Time to Mine! (called Stone Age), Getting an Upgrade, Acquire Hardware, We Need to Go Deeper, The End?, The End. (called Free the End), Return to Sender, Into Fire, Local Brewery, The Beginning? (called Withering Heights), Beaconator, Diamonds!, Enchanter, Adventuring Time, Monster Hunter and Sniper Duel.
 * Six achievements from other editions were re-implemented as advancements: Body Guard (called Hired Help), Cheating Death (called Postmortal), Zombie Doctor, You Need a Mint, The End... Again... and Great View From Up Here