Is there a way to see how far you are in an advancement in Minecraft?

Me and some of my friends are taking on a challenge to get all of the advancements you can get in minecraft, and while I was trying to get the "A Balanced Diet" advancement I realized that you cannot see which foods you have eaten and which ones you still need to eat. After looking at some of the other advancements (such as "Two by Two" and "Discover Every Biome".)It would be very helpful to know how much of the advancement I have done, and how much I still need to do.

Is there a way to do this? I am hoping that if you press a button on your keyboard or or something similar to show it. Sadly, so far I am at a dead end.

7

5 Answers

It is important to understand how Advancements work internally before trying to track your progress on different Advancements.

Where are Advancements stored?

Advancements are stored in the world data folder as a JSON file. The path to reach the file that stores your progress is as follows.

  • Windows: C:\Users\<user>\AppData\Roaming\.minecraft\saves\<world>\advancements
  • macOS: /Library/Application Support/minecraft/saves/<world>/advancements
  • Linux: /home/<user>/.minecraft/saves/<world>/advancements

Upon reaching the folder, a JSON file with your UUID can be found. In my case, the file name is 1f2481d2-9e43-4417-b103-667abb948bfd.json. You can open the file using your favourite text editor.

How are Advancements tracked?

For every action performed in Minecraft, a certain trigger is "activated". The game then records the actions you have performed by updating info stored in the Advancements JSON file mentioned above.

For instance, on initial world creation, the Advancement file is blank.

Then, I join the world. Immediately on join, the following is written into the file:

{ "minecraft:adventure/adventuring_time": { "criteria": { "minecraft:jungle": "2019-01-21 17:27:40 +0800" }, "done": false }
}

It is easy to understand the tree of text as below:

minecraft:adventure/adventuring_time is the internal name that the game uses to identify different Advancements.

criteria denotes what objectives needs to be completed in order to finish an Advancement. Only objectives that have already been met will be shown. This can be seen later in this answer. On a new criterion completion, the details are immediately written into the file. In my case, I spawned in the Jungle biome for the first time (its internal name is minecraft:jungle) at the time 2019/01/21 17:27:40 GMT+8 (which is stored as 2019-01-21 17:27:40 +0800).

done denotes whether the entire Advancement has been finished. It has a value of false by default, meaning the Advancement has not yet been finished. When all criteria has been completed, the value becomes true and a toast that congratulates the player on completing an Advancement is correspondingly shown on the game screen.

After joining the game, I randomly walked around and ventured into another biome. The file is immediately updated to the following:

{ "minecraft:adventure/adventuring_time": { "criteria": { "minecraft:jungle": "2019-01-21 17:27:40 +0800", "minecraft:jungle_hills": "2019-01-21 17:32:28 +0800" }, "done": false }
}

which reflects that I have entered the Jungle Hills biome for the first time at 5:32pm.

As seen from above, the file is constantly edited to keep the game up to date on your progress. So, we can always obtain the most updated information on Advancement progress through this file.

So how do I know the detailed progress of each Advancement?

Give me a tl;dr!

You have to cross-reference the Advancements JSON file with the Advancements page on the Minecraft wiki.

So how should I do that?

Let's say we want to track the Monsters Hunted Advancement. This Advancement requires a player to kill one of every hostile monster.

  1. Visit the Advancements page on the Minecraft wiki (linked below). Navigate to the Monsters Hunted Advancement section in the list of Advancements.
  2. Open the Advancements JSON file. Use the search function to quickly find the section minecraft:adventure/kill_all_mobs.
  3. Check the criteria section and see the list of completed criteria. Remember what criteria you have completed. If needed, jot them down on a blank document or a piece of paper.
  4. Now look at the Advancements page on the Minecraft wiki. The actual requirements state that you have to

    Kill each of these 24 mobs. In 1.14,‌[upcoming] also kill each of these 2 mobs. Other mobs may be killed, but are ignored for the advancement.

  5. So, hover your mouse over "these 24 mobs". Check if your list of completed criteria contains each mob. If not, write the missing criterion down.
  6. When you have finished checking the 24 or 26 mobs, you should now hold a list of criteria that you have yet to complete. Congratulations! You now know what mobs you should focus on killing.
  7. For extra accuracy, count if the number of items on your list of incomplete criteria matches the number shown in the Advancements GUI in-game.

I can't find a certain Advancement ID!

If you are unable to find the Advancement ID in the file, that means you either made a typo, or have made no progress on that Advancement at all.

Are there less obnoxious ways?

At current stage, no.

The main issue is that the criteria that you have never met before is not stored in the file. There is no way to check detailed progress grouped by each Advancement in-game.

Do note that Fabian's answer provides an in-game way to manually check if a very specific criterion is met. It may be easier when only a few criteria are left and you have a vague idea on what you have not yet done. However, this method only works when commands are enabled.

Links

For a list of Advancements and their internal IDs, criteria for specific Advancements, the general structure of the Advancements JSON file and more, visit the Minecraft wiki.

4

I totally missed this in the release notes, but there's actually a target selector argument "advancements"! It works like this:

@a[advancements={story/form_obsidian=false,story/shiny_gear={diamond_helmet=true}}]

This selects every player who has not gotten the "ice bucket challenge" advancement in the "Minecraft tab", but have worn a diamond helmet, therefore completing that part of the "cover me with diamonds" advancement.

You can use this to check for all criteria individually. Sadly they are not documented in the wiki, so you'll have to get them out of the version's .jar file in .minecraft/versions/<version> (not the path set in the launcher, the one chosen when installing Minecraft, if you had the option, otherwise the default). Inside that .jar file there's the path data/minecraft/advancements with sub-folders for all the advancements, containing the advancements in JSON format.

This answer works, but there are two much better ones, one by me. Link and link.


I wasn't able to find where this is stored, otherwise you could just look it up there with an NBT editor.

The best I was able to find is running /advancement (grant|revoke) @s only <advancement> <criterion> and then the opposite again, if necessary. The feedback message will tell you whether you had that criterion already. Based on that, you can undo that command again.

I made a small Python program which returns the missing biomes, foods, mobs, etc. Currently only tested for the 1.16_20w14. This Program uses the file described in this answer above.

1

Just hover over the advancement... It works for me. So simple!

1

You Might Also Like