Die Form eines Baums
Ein Fortschritt ohne parent ist eine Wurzel, und eine Wurzel bekommt ihren eigenen Reiter im Fortschrittsbildschirm. Alles, was sie als Elternteil nennt, wird zu einem Knoten in diesem Reiter, und diese Knoten können eigene Kinder haben. Das ist das gesamte Baummodell — es gibt kein eigenes Konzept von Kapitel oder Questreihe, nur Abstammung.
harbor:harbor_quest_1 (Wurzel, eigener Reiter)
└─ harbor:harbor_hunt "parent": "harbor:harbor_quest_1"
└─ harbor:harbor_end "parent": "harbor:harbor_hunt"
Nur die Wurzel trägt ein background, die hinter dem Reiter gekachelte Textur. Auf einem Kind gesetzt bewirkt es nichts — weshalb ein Builder, der den Unterschied kennt, mehr wert ist als eine Vorlage.
Der impossible-Auslöser ist der eigentliche Punkt
Jeder Fortschritt braucht mindestens ein Kriterium, und ein Kriterium braucht einen Auslöser. Vanilla liefert reichlich davon — etwas töten, irgendwo hingelangen, ein Item aufheben — aber eine echte Quest passt selten auf genau einen davon. „Den Brief zum Hafenmeister bringen“ ist kein Vanilla-Ereignis.
Also nimmt man den Auslöser, der nie feuert:
"criteria": {
"delivered": {
"trigger": "minecraft:impossible"
}
}
Nichts in der Welt schließt ihn ab. Das machst du, aus deiner eigenen Logik heraus:
/advancement grant @s only harbor:harbor_quest_1
Dieser Befehl steht dort, wo die Quest tatsächlich endet: ein Befehlsblock an der Pier, eine aus einem Dorfbewohner-Handel aufgerufene Funktion, eine Prüfung in deiner tick-Funktion. Der Fortschritt hört auf, ein Detektor zu sein, und wird zu einem Eintrag: dem, was sich merkt, dass dieser Spieler so weit gekommen ist, Neustarts übersteht und das Nächste freigibt.
Auf diesem Muster beruht so gut wie jedes eigene Questsystem auf einem Vanilla-Server.
Belohnungen — und die eine, die überrascht
Vier Arten von Belohnung lassen sich an einen Fortschritt hängen:
"rewards": {
"experience": 50,
"recipes": ["harbor:reinforced_block"],
"loot": ["harbor:quest_bundle"],
"function": "harbor:on_quest_complete"
}
Die function-Belohnung ist die mächtigste, weil sie einen Fortschritt in einen Haken verwandelt: abgeschlossen, und beliebige Befehle laufen. Ein Item geben, eine Bossbar starten, ein Scoreboard setzen, ein Tor öffnen.
Die recipes-Belohnung ist die überraschende, und sie klärt ein Rätsel von der anderen Seite der Website: ein eigenes Rezept erscheint nicht im Rezeptbuch, bis es etwas freischaltet — und das ist dieses Etwas. Vanilla führt für jedes einzelne seiner Rezepte einen versteckten Fortschritt, der nichts anderes tut. Wenn dein Rezept sich herstellen lässt, aber nie im Buch auftaucht, fehlt genau diese Datei.
Testen, ohne die Quest zu spielen
Zwei Befehle decken den ganzen Kreislauf ab:
/advancement grant @s only harbor:harbor_quest_1
/advancement revoke @s only harbor:harbor_quest_1
Tausche only gegen until, from oder through, um einen ganzen Ast auf einmal zu bewegen — das spart beim Testen einer fünfstufigen Kette viele Klicks. Mit revoke lässt sich derselbe Schritt erneut durchspielen, ohne eine neue Welt anzulegen.
Zwei Umbenennungen, die alte Beispiele brechen
| Änderung | Vorher | Nachher |
|---|---|---|
| Ordner, in 1.21 | advancements/ | advancement/ |
| Anzeige-Icon, in 1.20.5 | {"item": "minecraft:map"} | {"id": "minecraft:map"} |
Die Ordner-Umbenennung ist die üblere von beiden, genau wie bei Loot-Tabellen: das Pack lädt, gilt als aktiviert, und der Fortschritt ist schlicht nicht da. Die Icon-Umbenennung meldet sich immerhin meist im Log.
Kleinigkeiten, die einen Abend kosten
- Ein Fortschritt ohne
criteriaist ungültig, selbst wenn du ihn nur per Befehl vergibst. Gib ihm einimpossible-Kriterium. - Ein
parent, das auf eine nicht existierende ID zeigt, lässt das Kind verschwinden, statt laut zu meckern. hiddenverbirgt nur bis zum Erreichen, und nur wenn es keine Wurzel ist.- Der Reiter erscheint überhaupt nicht, solange kein Fortschritt darin für diesen Spieler sichtbar ist.
Wie es weitergeht
Der Fortschritts-Builder schreibt die Datei und den passenden Vergabe-Befehl und weiß, welche Felder zu einer Wurzel und welche zu einem Kind gehören. Für den Container siehe den Datapack-Generator; damit die Quest etwas zu überreichen hat, decken der Loot-Tabellen-Generator und der Rezept-Generator Belohnungen und Freischaltungen ab.