Questlines - Quest System for Minecraft
Note: This modification is in early development stage, and its API may change.
Questlines is a Minecraft modification that introduces a complete quest chain system into the game. The unique feature of this solution is that all quests are created using data packs, allowing configuration without the need for programming code.
How the Quest System Works
Each quest chain consists of several individual quests. These quests can follow each other sequentially or branch out, creating different progression paths. Within each quest, there are one or more objectives. Once the player completes all set objectives, the quest is marked as completed, and subsequent quests in the chain become available.
Integration with Arc Lib
For registering player actions, Questlines uses the Arc Lib library, also developed by DAQEM Studios. This library significantly simplifies the process of defining actions required for completing objectives. You only need to specify to Arc Lib which objective the action is for, describe the conditions for its execution, and set the reward as an "objective occurrence".
Configuration Example
Let's consider an example where the objective is to mine 10 grass blocks with a reward of 10 stone blocks.
Quest Chain Configuration
File: data/namespace/questlines/questlines/questline_name.json
{
"is_unlocked_by_default": true
}
Individual Quest Configuration
File: data/namespace/questlines/quests/quest_name.json
{
"questline": "namespace:questline_name",
"objectives": [
{
"id": "objective_name",
"goal": 10
}
],
"rewards": [
{
"type": "arc:item",
"item": "minecraft:stone",
"amount": 10
}
]
}
Objective Actions Configuration (Arc Lib)
File: data/namespace/arc/quest_name/objective_name.json
{
"holder": {
"type": "questlines:objective",
"id": "namespace:quest_name/objective_name"
},
"type": "arc:on_break_block",
"conditions": [
{
"type": "arc:block",
"block": "minecraft:grass_block"
}
],
"rewards": [
{
"type": "questlines:objective_occurrence"
}
]
}
Localization
File: assets/namespace/lang/en_us.json
{
"questlines.questline.namespace.questline_name": "The Best Quest Chain!",
"questlines.quest.namespace.quest_name": "Touch Grass",
"questlines.quest.namespace.quest_name.description": "Break 10 grass blocks and receive 10 stone blocks.",
"questlines.objective.namespace.quest_name.objective_name.description": "Break grass block"
}