Skip to content


The advancement API is based around AdvancementTabs which represent a tree of Advancements for one or more players. Each player viewing a single AdvancementTab will see the same progress as all of the others. If per player Advancements are needed, individual AdvancementTabs will need to be created.

Advancements represent a completable advancement in an AdvancementTab.


AdvancementTabs can be created and retrieved from the AdvancementManager.

// Create
AdvancementManager#createTab(String /* namespaced id */, AdvancementRoot);

// Retrieve
AdvancementManager#getTab(String /* namespaced id */);

Namespaced IDs follow the format of namespace:id, and may not have any upper case letters.

An AdvancementRoot is the origin Advancement for a tab, and has the same creation method as a regular Advancement (see below) with the exception of the background. A background is a reference to a texture file on the client, for example minecraft:textures/block/stone.png for stone block.

AdvancementRoot#<init>(Component, Component, Material, FrameType, int, int, String /* background */);

Once created, an AdvancementTab may be added and removed from players as follows:



Advancements can be created with their constructor and added to an AdvancementTab with an associated parent.

Advancement#<init>(Component /* title */, Component /* description */, Material, FrameType, int /* x */, int /* y */);

AdvancementTab#createAdvancement(String /* namespaced id */, Advancement /* to add */, Advancement /* parent */);

The parent of an Advancement may not be null, and it must have been added to the tab already. The AdvancementRoot is a valid parent.

Once an Advancement is registered, it can be completed.


To make an advancement show a toast, use Advancement#showToast(Boolean) before setting it to achieved.