Quick start¶
Let's build our first quest — "Escape": a required task "Find and pull the lever" and an optional one "Find out what became of the survivors". A quest here isn't just a checkbox in a list: it moves through stages and can end in success or failure.
There are two ways to do it — both produce the same quest:
- With commands — to try it out in-game right away, without creating files. This kind of quest (a dynamic quest) is saved inside the world and exists only as part of it.
- Through a datapack — when the quest becomes part of your content. A datapack can live in the world and, when needed, be detached and distributed on its own — as a standalone set of quests.
Start with commands if you just want to get a feel for the system.
Path 1. A quest from commands¶
InkQuest commands require operator level 2+. In a single-player world, turn on cheats for that.
We create the quest and its two tasks — one required, one optional:
/quest new example:escape "Escape"
/quest modify example:escape tasks add required push_the_lever "Find and pull the lever that opens the hatch"
/quest modify example:escape tasks add optional look_for_survivors "Find out what became of the survivors"
We give the quest to the player and pin it to the HUD:
After the quest is granted, the player sees a hint about the new quest, and the pinned quest appears in the HUD on screen. The full quest list opens with the J key — more in Player interface.
To complete the tasks, you can hide command blocks around the map with commands like these:
/quest complete PlayerName example:escape task push_the_lever success
/quest complete PlayerName example:escape task look_for_survivors success
Tasks added by command are completed only by the
quest completecommand. For a task to complete on its own — say, by a scoreboard score or a Minecraft predicate — you need a datapack quest (see below and Task completion conditions).
Path 2. The same quest in a datapack¶
A static quest is described in JSON and lives in a datapack — you can keep it together with the world or distribute it separately. Unlike the command version, its tasks can complete on their own — by the conditions you set. Put the files in the world's datapack:
pack.mcmeta — the datapack's metadata file (pack_format: 15 matches Minecraft 1.20.1):
escape.json — the quest itself. The file name (escape) and the folder (example) together give the identifier example:escape:
{
"version": 3,
"variant": 1,
"title": "Escape",
"description": "There's no staying here any longer — but how do I get out?",
"tasks": {
"push_the_lever": {
"title": "Find and pull the lever that opens the hatch",
"description": "When one of the guards stepped out, I caught a click somewhere at the far end of the room"
},
"look_for_survivors": {
"title": "Find out what became of the survivors",
"description": "I should search the cells — maybe I'll find someone else who made it out alive"
}
},
"stages": [
["push_the_lever", "look_for_survivors"]
]
}
A few things about the structure:
versionandvariantare required. They guard against loading in an incompatible mod version; the current values areversion: 3,variant: 1. The breakdown is in Quest file format.stagesis a list of stages, and each stage is a list of task IDs. The first task in a stage is required, the rest are optional. Here there's one stage:push_the_leverdrives progress,look_for_survivorsruns alongside.
Load the datapack with /reload and check that the quest was read:
If example:escape is in the list — you're all set; from here the quest is granted with the same quest give command. If it isn't — check the server log and Common questions and errors.
Not every quest has to be a "task with progress". You can make a note-quest with no tasks — a journal page, a rumor, a piece of lore — or an event with shared progress. Ready-made recipes are in Quest patterns.
What's next¶
The example quest is the simplest case. From here the documentation branches by interest:
- Understand the model. How stages and tasks add up to a playthrough — Quest structure, Active stage, Quest and task statuses.
- Automate tasks. So tasks complete on their own — Task completion conditions and Task lifecycle hooks.
- Tie quests into a story. One unlocks the next — Dependencies between quests and Quest chain.
- Reference at hand. All file fields — Quest file format, all commands — Command reference.
- Ready-made recipes. Whole mechanics off the shelf — Quest patterns.