Skip to content
This repository has been archived by the owner on Mar 7, 2024. It is now read-only.
GamerCoder edited this page May 22, 2023 · 6 revisions

A list of potential Frequently Asked Questions about SuperAdvancements and Advancements in Minecraft.

More in-depth and technical explanations for Vanilla Minecraft-specific topics are available at Advancement/JSON format on the Minecraft Wiki.

Why can't multiple root advancements exist in the same tab?

Minecraft sees each advancement without a parent as its own Advancement Tab. Thus, it creates a new Advancement Tab for every advancement that doesn't have a parent, or is a "root advancement." Without mods, it is currently impossible in Vanilla Minecraft to have multiple root advancements in the same advancement tab.

Why do Advancements Require Criteria?

Advancements without criteria, by default, can't be granted, even manually with AProgress#grant. Thus, you cannot construct Advancements through SuperAdvancements without specifying at least one criterion. If you plan on having a custom progress for reaching your advancement, it is recommended you add the criteria ATrigger.impossible()

ATrigger.tick() vs ATrigger.location()

Both Triggers exist in Vanilla Minecraft. ATrigger.tick() will cause the advancement criteria to be marked as complete within 1 tick of the Advancement being added to the player. ATrigger.location() will cause the advancement criteria to be marked as complete within 1 second of the Advancement being added to the player. 1 Minecraft Tick is equal to about 1/20 of a second, or 50ms, the fastest processing speed at which Vanilla Minecraft computes server updates.

Real-life usage in Vanilla Minecraft is to automatically grant an Advancement upon joining or loading the game, albeit either trigger can be used based on loading task time.

Why don't advancement displays fetched from BukkitAdvancementManager#getAdvancement match an API display?

Because of the way Advancements are passed through packets, completion data written in player data, and converting to and from NMS and the SuperAdvancement API, it is not possible to sustain the original display object in the NMS Advancement Object.

When fetching Advancements through BukkitAdvancementManager#getAdvancement, the Advancement Display cannot be cast to PaperDisplay, SpigotDisplay, or BukkitDisplay, and is instead a Wrapper around the NMS Display Info for an NMS Advancement.

If you need the original display used in the Advancement, recreate it using ADisplay#getTitleAsString and ADisplay#getDescriptionAsString.