Quests/Creation
This is a step-by-step guide on building your own quests!
Contents
Blank Quest
This blank quest has had all details removed. For the purpose of this guide, it will be used as a reference and starting point to building your own quests.
Quest Information
At the top of all quests, there will be four fields which need to be set.
radiant
The radiant is used to specify if the quest uses inserters to make it available for completion by players. Inserters will be covered in in Quest Stages.
If the radiant is set to true
, inserters (#!
) will be used by the quest. If set to false
, inserters will not be used - typically used by Instantaneous quests. An example of what this looks like in the quest file is "radiant": true
.
In the Blank Quest, it has been set to true
as it will use inserters in the stages.
rarity
The rarity is used to specify the color of the ring around the Poké Ball's color for the quest's quest markers. This is purely a cosmetic option - the rarity of quest is specify by the inserters.
The colors available for the rarity are shown below. The rarity name (for example, Epic
) would need to be specified rather than the color (for example, purple
). An example of what this looks like in the quest file is "rarity": "Epic"
.
Rarity | Color |
---|---|
Common | White |
Uncommon | Green |
Rare | Blue |
Epic | Purple |
Legendary | Orange |
type
The type is used to specify which of the following types the quest will be. This is used to change the logic of the quest (for example, if the quest type is Repeatable, it will be made available to complete multiple times) and the color of the quest markers.
The types available are shown below. The type (for example, Legendary
) would need to be specified rather than the color (for example, Red
). An example of what this looks like in the quest file is "type": "Legendary"
.
Type | Color |
---|---|
Standard | Yellow |
Repeatable | Blue |
Instantaneous | Green |
Legendary | Red |
activeStage
The activeStage is used to specify the stage number at which the quest will appear in the player's quest log.
The activeStage will need to be a number which corresponds to one of the stage's numbers (for example, "stage": 0
).
Quests that use the DIALOGUE
objective on the first stage (stage 0) to ask the player if they wish to accept the quest or not will have the activeStage set to the next stage (stage 10) as the player has to accept the quest before it is available in their quest log.
In the Blank Quest, it has been set to 10
as the player will have to accept the quest.
strings
The strings are used to specify names and messages that will appear in the player's quest log.
As a minimum, quests require the strings name
, desc-#
(#
being a stage number), desc-X
, and stage-##-#
(##
being a stage number). If the quest has multiple stages, there can be additional strings for desc-#
and stage-##-#
with the appropriate stage number to help direct the player.
String Name | Description |
---|---|
name | This is the name of the quest which is displayed. |
desc-# | This is the message describing the quest in the player's quest log. # would represent the stage number.
|
desc-X | This is the message shown for the quest in the history log. |
npcName | This is the name of the NPC which is displayed. |
start | This is the message given by the DIALOGUE objective to the player before they either accept or decline the quest.
|
startYes | This is the message given by the DIALOGUE objective to the NPC when the player accept the quest.
|
startNo | This is the message given by the DIALOGUE objective to the NPC when the player decline the quest.
|
stage-#-## | This is a message the player receives in chat when they start the stage directing them what to do. # would represent the stage number whereas the ## would represent the objective. For example: stage-10-0 is the 0th objective whereas stage-10-1 is the first objective.
|
end | This is the message given by the DIALOGUE objective to the player when they end the quest.
|
goodbye | This is the message given by the DIALOGUE objective to the NPC when the player finishes the quest.
|
Quest Stages
All quests will have stages, these are what the player will progress through.
stage
The stage is used to specify different parts of the quest and what the player will need to progress through. Stages are given a unique number, these are located by the "stage":
.
It is recommended to have the general rule of a quest's first stage being stage 0 ("stage": 0
), the next being 10 ("stage": 10
), the next being 20 ("stage": 20
) and so fourth.
nextStage
The nextStage is used to specify the next stage which will follow after the current one. As previously explained, stages are given unique numbers, located by the "stage":
.
If there is a stage after the current one, the "nextStage":
would have specified the number of that next stage ("nextStage":10
). This number would be next to the "stage":
field. If the current stage if the final one, the "nextStage":
would have specified "-1":
. For example: "nextStage": -1
.
objectives
Objectives are goals in which the player has to complete to progress.
Objectives follow the format of <executor> <objective name> <arguments>
. The <objective name>
and <arguments>
can be found in the table below.
The <executor>
is used to specify when the action is ran. For example 0 APRICORN_HARVEST item=pixelmon:red_apricorn count=1
. In this example, the executor has been set to 0
which means that once objective 0 of this stage has been complete, perform this action.
Executors can also have multiple values specified. For example, 0,1,2 APRICORN_HARVEST item=pixelmon:red_apricorn count=1
. This means that once objective 0 or 1 or 2 have been completed in this stage, perform this action. Additionally, an AND condition can be used which means that all objectives specified have to be completed for the action to be performed. For example, +0,1 APRICORN_HARVEST item=pixelmon:red_apricorn count=1
. This means that once both objectives 0 and 1 have been completed, perform this action
Objective Name | Required Arguments | Optional Arguments | Description |
---|---|---|---|
ABSOLUTE_POSITION | <x1> [y1] <z1> <x2> [y2] <z2> <dimension> |
None | This objective completes once the player is within an area specified by <x1> , <z1> , <x2> and <z2> in <dimension> . The optional arguments of [y1] and [y2] can also be added. For example: ABSOLUTE_POSITION 8412 75 7767 8401 80 7758 3 .
|
APRICORN_HARVEST | item= count= |
mod= tag= name= damage= |
This objective completes once the player harvests the Apricorn amount specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: APRICORN_HARVEST item=pxielmon:red_apricorn count=1 .
|
BATTLE_MOVE_TARGET | soundbase=[true/false] count=[number] category=[physical/special/status] type=[any of the 17 types] move=[attack name],[attack name],[attack name],[attack name] result=[proceed/hit/ignore/killed/succeeded/charging/unable/failed/missed/notarget] damage[=/</>][number] fulldamage[=/</>][number] accuracy[=/</>][number] |
None | This objective completes once the target Pokémon of a battle meet the conditions specified by soundbase=[true/false] count=[number] category=[physical/special/status] type=[any of the 17 types] move=[attack name],[attack name],[attack name],[attack name] result=[proceed/hit/ignore/killed/succeeded/charging/unable/failed/missed/notarget] damage[=/</>][number] fulldamage[=/</>][number] accuracy[=/</>][number] .
|
BATTLE_MOVE_USER | soundbase=[true/false] count=[number] category=[physical/special/status] type=[any of the 17 types] move=[attack name],[attack name],[attack name],[attack name] result=[proceed/hit/ignore/killed/succeeded/charging/unable/failed/missed/notarget] damage[=/</>][number] fulldamage[=/</>][number] accuracy[=/</>][number] |
None | This objective completes once the user Pokémon of a battle meet the conditions specified by soundbase=[true/false] count=[number] category=[physical/special/status] type=[any of the 17 types] move=[attack name],[attack name],[attack name],[attack name] result=[proceed/hit/ignore/killed/succeeded/charging/unable/failed/missed/notarget] damage[=/</>][number] fulldamage[=/</>][number] accuracy[=/</>][number] .
|
BLOCK_BREAK | item= count= |
mod= tag= name= damage= |
This objective completes once the player breaks the block specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: BLOCK_BREAK item=minecraft:stone count=1 .
|
BLOCKER | None | None | This objective can't be completed. It is intended to be used alongside the SET_STAGE objective. If the quest is started by something else (for example, an Instantaneous quest or a plugin), a BLOCKER objective is required in the first stage.
|
BLOCK_PLACE | item= count= |
mod= tag= name= damage= |
This objective completes once the player places the block specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: BLOCK_PLACE item=minecraft:stone count=1 .
|
BLOCK_USE | item= count= |
mod= tag= name= damage= |
This objective completes once the player uses the block specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: BLOCK_USE item=minecraft:stone_button count=1 .
|
DIALOGUE | <uuid or inserter> name= text= |
choice= | This objective can't be completed. It causes the the NPC specified by <uuid|inserter> with the specified name string name= to display the message string specified by text= . The optional addition of choice= can be added multiple times so the player can pick responses. For example: "DIALOGUE NPCExample name=npcName text=start choice=startYes choice=startNo" .
|
DIMENSION | <dimension> | None | This objective completes once the player is within the dimension specified by <dimension> . For example: DIMENSION 1 .
|
ENTITY_INTERACT | <uuid or class name> <count> |
None | This objective completes once the player has interacted an entity specified by <uuid|class name> and <count> . For example: ENTITY_INTERACT Creeper 1 .
|
ENTITY_VICINITY | <uuid or class name> <count> <distance> |
None | This objective completes once the player is within an area specified by <distance> of an entity specified by <uuid|class name> and <count> . For example: ENTITY_VICINITY Creeper 1 10 .
|
FOLLOWTHROUGH | None | None | This objective will automatically complete. |
ITEM_CRAFT | item= count= |
mod= tag= name= damage= |
This objective completes once the player crafts the item specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: ITEM_CRAFT item=minecraft:enchanting_table count=1 mod=minecraft tag=TagA tag=TagB name=Crafting Example damage=100 .
|
ITEM_DROP | item= count= |
mod= tag= name= damage= |
This objective completes once the player drops the item specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: ITEM_DROP item=minecraft:enchanting_table count=1 mod=minecraft tag=TagA tag=TagB name=Crafting Example damage=100 .
|
ITEM_PICKUP | item= count= |
mod= tag= name= damage= |
This objective completes once the player picks up the item specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: ITEM_PICKUP item=minecraft:enchanting_table count=1 mod=minecraft tag=TagA tag=TagB name=Crafting Example damage=100 .
|
ITEM_SMELT | item= count= |
mod= tag= name= damage= |
This objective completes once the player smelts the the item specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: ITEM_SMELT item=minecraft:iron_ore count=1 mod=minecraft tag=TagA tag=TagB name=Crafting Example damage=100 .
|
ITEM_USE | item= count= |
mod= tag= name= damage= |
This objective completes once the player uses the item specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: ITEM_USE item=minecraft:enchanting_table count=1 mod=minecraft tag=TagA tag=TagB name=Crafting Example damage=100 .
|
NPC_RESPOND | <uuid> | [index] | This objective is used alongside the DIALOGUE objective. This objective is used is give a response to the NPC specified by <uuid> or * from the player. The optional argument of [index] can also be added to specify the position of the reply given. Not specifying an index would give it a value of 0.
|
POKEMON_CAPTURE | <pokémon specs or inserter> <count> |
None | This objective completes once the player captures the Pokémon specified by <pokémon specs or inserter> and <count> . For example: POKEMON_CAPTURE #!Types,any,any,any 30 .
|
POKEMON_DEFEAT | <pokémon specs or inserter> <count> |
None | This objective completes once the player defeats the Pokémon specified by <pokémon specs or inserter> and <count> . For example: POKEMON_DEFEAT #!Types,any,any,any 30 .
|
POKEMON_EVOLVE_POST | <pokémon specs or inserter> <count> |
None | This objective completes once the player evolves the Pokémon specified by <pokémon specs or inserter> and <count> . For example, POKEMON_EVOLVE_PRE Charamander 1 would complete before the Pokémon evolves.
|
POKEMON_EVOLVE_PRE | <pokémon specs or inserter> <count> |
None | This objective completes once the player evolves the Pokémon specified by <pokémon specs or inserter> and <count> . For example, POKEMON_EVOLVE_POST Charmeleon1 would complete after the Pokémon evolves.
|
POKEMON_HAS | <pokémon specs or inserter> <count> |
None | This objective completes once the player has the Pokémon specified by <pokémon specs or inserter> and <count> . For example: POKEMON_HAS #!Types,any,any,any 1 .
|
POKEMON_HATCH | <pokémon specs or inserter> <count> |
None | This objective completes once the player hatches the Pokémon specified by <pokémon specs or inserter> and <count> . For example: POKEMON_HATCH #!Types,any,any,any 30 .
|
POKEMON_TRADE_GET | <pokémon specs or inserter> <count> |
None | This objective completes once the player received via a trade the Pokémon specified by <pokémon specs or inserter> and <count> . For example: POKEMON_TRADE_GET #!Types,any,any,any 1 .
|
POKEMON_TRADE_GIVE | <pokémon specs or inserter> <count> |
None | This objective completes once the player gives via a trade the Pokémon specified by <pokémon specs or inserter> and <count> . For example: POKEMON_TRADE_GIVE #!Types,any,any,any 1 .
|
RANDOM | <ActionA>:<actionB> <PercentageA>:<PercentageB> |
None | This objective automatically completes and randomly selects an action specified by <ActionA>:<actionB> and <PercentageA>:<PercentageB> . For example: RANDOM 1:0 99:1 , 1% to activate action 0, 99% to activate action 1.
|
SERVER_TIME | <time> | [range] | This objective completes once the server has hit a time specified by <time> . The optional arguments of [range] can also be added to specify a time range before and after. For example: SERVER_TIME 12:00 .
|
STRUCTURE | <structure name> | None | This objective completes once the player is within the structure specified by <structure name> . For example: STRUCTURE Stronghold .
|
TILEENTITY_VICINITY | <uuid or class name> <count> <distance> |
None | This objective completes once the player is within an area specified by <distance> of an tile entity specified by <uuid|class name> and <count> . For example: TILEENTITY_VICINITY TileEntityChest 1 10 .
|
WORLD_TIME | <time> | [range] | This objective completes once the world has hit a time specified by <time> . The optional arguments of [range] can also be added to specify a time range before and after. For example: WORLD_TIME 12:00 .
|
actions
Actions are rewards which the player receives once they have completed an objective.
Action Name | Required Arguments | Optional Arguments | Description |
---|---|---|---|
COMMAND | <command> | None | Runs the command specified by <command> as the console. @p can be used as a placeholder for the player's username. For example COMMAND megaring @p .
|
COMPLETE_QUEST | None | None | Finishes and completes the quest for the player. |
FAIL_QUEST | None | None | Stops and fails the quest for the player. |
ITEM_GIVE | item= count= |
mod= tag= name= damage= |
Gives the player the item specified by item= and count= . The optional arguments of mod= , multiple versions of tag=TagA and tag=TagB , name= and damage= can also be added. For example: ITEM_GIVE item=pixelmon:rare_candy count=1 mod=pixelmon tag=TagA tag=TagB name=Item Example damage=100 .
|
MESSAGE | <message> | None | Displays the message specified by <message> to the player in their chat. @p can be used as a placeholder for the player's username. MOTD Codes can be inserted before the <message> to give them some color. For example: MESSAGE \u00A7eHello @p! .
|
POKEMON_GIVE | <Pokémon Spec> | None | Gives the player the Pokémon specified by <Pokémon Spec> . For example: POKEMON_GIVE Dragonite shiny:true nature:jolly growth:microscopic unbreedable .
|
POKEMON_SPAWN | <x> <y> <z> <Pokémon Spec> |
None | Spawns the Pokémon specified by <Pokémon Spec> at the specified coordinates <x> , <y>, and <z> . ~ can be for the relative whilst r can be used for the radius. For example POKEMON_SPAWN 0 100 0 Dragonite shiny:true nature:jolly growth:microscopic unbreedable .
|
SET_STAGE | <stage number> | [Quest filename].json | Sets the player to the stage number specified by <stage number> . The optional argument of [Quest filename].json can also be added to set the player to the stage specified on a different quest. For example: SET_STAGE 10 Another Quest.json .
|
TELEPORT | X= Y= Z= YAW= PITCH= DIM= |
None | Teleports the player to the location specified by X= , Y= , Z= . YAW= can be used to specify the direction the player is looking, PITCH= can be used to specify if the player is looking up or down and DIM= can be used to specify the dimension ID. ~ can be for the relative whilst r can be used for the radius. For example: TELEPORT X=~0 Y=~100 Z=~0 YAW=0 PITCH=0 DIM=1 .
|