This guide is written for NotQuests 6.3.0 on Paper 26.1.2. Older versions and Spigot have fewer features and some different commands, so a few things might not line up there.
Let's discover NotQuests! The best way to learn it is to actually build something — so that's what we'll do. In the next few minutes we'll make a complete little quest from scratch: a display name and description, a requirement, two objectives, a trigger that spawns mobs, and some rewards. All with commands — no config files to wrestle with.
By the end you'll know your way around, and everything after that is just remixing these same building blocks.
A Quest in NotQuests can have different properties. Examples:
displayName: the Quest name which players will actually see
description: the Quest description
limits: the maximum amount of times a player can accept, complete or fail the Quest
and much more...
Additionally, we can attach the following to a Quest:
Objectives: An objective is basically "something the player needs to do". Once all objectives the Quest has are completed, the Quest itself is completed.
Requirements: These determine if the player can accept the Quest. If the player does not fulfill all requirements, they can not start the Quest. Internally, they are called conditions.
Rewards: Should be self-explanatory! Rewards are actions which will be "executed" once the Player completes the Quest.
Triggers: Triggers are a bit more complicated to understand. Basically, they "execute" an action once something happens.
/q/qPlayer commands for NotQuests or /notquests/notquestsPlayer commands for NotQuests for Player commands. All players will have access to this command.
/qa/qaAdmin commands for NotQuests or /notquestsadmin/notquestsadminAdmin commands for NotQuests for Admin commands. We're gonna use this to make and edit our Quests!
In NotQuests, we create all our Quests with commands. No need to edit complicated configuration files! Want the full list? Check out the Commands reference any time.
Each thing you write, separated by a space, is called an argument. In the following pictures, edit, and questname are the two arguments:
If you press space after the last argument, our intelligent command system will show you what argument comes "next". If you're stuck with a command, just make sure the last character is a space and read the command completions!
Still stuck?
If the command completions aren't enough and you still don't know how a command works, just press enter and run the command! It will show you a help menu. Just read it, and it will tell you what arguments it needs and what they do.
Now, the initial Quest Name cannot have any spaces. It's just an identifier for the Quest. However, we can give it a display name which can have spaces - and that's the name the player will actually see!
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusdisplayNamedisplayNameQuest display name shown in quest lists, quest previews, GUIs, and chat messages. Supports MiniMessage formatting.setsetSets the selected quest's display name shown in GUIs, previews, and chat.A Deadly Virus<display-name>New quest display name. Supports spaces and MiniMessage formatting.AcceptstextExampleA Deadly Virus
Next, we want to add a description to the Quest, which will be displayed in multiple places, for example if the player tries to preview or take the Quest:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusdescriptiondescriptionQuest description shown in quest previews, GUIs, and chat. Supports MiniMessage formatting.setsetSets the selected quest's description text shown to players.A deadly virus has infected the people of Winterfell. You have to murder the infected villagers to prevent the virus from spreading further.<description>Sets the new description of the Quest.AcceptstextExampleA deadly virus has infected the people of Winterfell. You have to murder the infected villagers to prevent the virus from spreading further.
Now, your players will see a beautiful description and display name after accepting the Quest:
Without any requirements, every single player will be able to accept your Quest. However, that Quest we're gonna make will be quite tricky! Let's require the player to have at least 10 Quest Points until they can accept the Quest:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrequirementsrequirementsManages requirements that must pass before a quest can be taken.addaddAdds a requirement that must pass before players can take the selected quest.QuestPointsQuestPointsSelects the QuestPoints variable for this action, condition, objective, or variable check.moreOrEqualThan<operator>How to compare the QuestPoints number variable against the expression.AcceptstextExamplemoreOrEqualThan10<amount>Number expression to compare with the current QuestPoints value.Acceptsnumber or numeric expressionExample10
Quest Points can be earned by completing Quests, or they can be given out manually.
This is what Players will now see if they try to accept the Quest but don't fulfill the requirements.
In order for us to be able to test our own Quest, give yourself 10 Quest Points:
/qa/qaAdmin commands for NotQuestsquestpointsquestpointsShows or changes a player's quest points.putyourminecraftnamehere<player>Player whose questpoints amount you want to change.Acceptsonline player nameExampleputyourminecraftnamehereaddaddAdds quest points to the selected player.10<amount>Amount of questpoints to addAcceptswhole numberExample10
Objectives are the heart of every Quest. Let's add our first one!
First, the player has to free up the road from all the shit the infected Zombies made:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.BreakBlocksBreakBlocksCreates a new BreakBlocks objective.dirt<materials>Material of the block which needs to be brokenAcceptsmaterial, custom item, hand, any, or comma-separated materialsExampledirt64<amount>Amount of blocks which need to be brokenAcceptsnumber or numeric expressionExample64
This objective will be completed once the player breaks 64 dirt 👍 If you want to, you can specify multiple materials there. For example, if both dirt or stone is fine for the player to break, just enter dirt,stone there.
Now, let's add a description for that objective:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1descriptiondescriptionObjective description shown in objective lists, progress output, and GUIs. Supports MiniMessage formatting.setsetSets the selected objective's description text.The infected Zombies shat on the street. Clean it up by breaking 64 dirt blocks!<Objective Description>Task text shown to players for this objective. Supports spaces and MiniMessage formatting.AcceptstextExampleThe infected Zombies shat on the street. Clean it up by breaking 64 dirt blocks!
And a name:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1displayNamedisplayNameObjective display name shown in quest progress, objective lists, GUIs, and task messages. Supports MiniMessage formatting.setsetSets the selected objective's display name shown in GUIs and progress output.Stinky Street<DisplayName>New objective display name. Supports spaces and MiniMessage formatting.AcceptstextExampleStinky Street
Let's accept our Quest by using /q/qPlayer commands for NotQueststaketakeTakes or accepts a quest.TheVirus<questName>Identifier of the quest you want to start.Acceptsquest nameExampleTheVirus:
Onto our next objective! The street is clear! The player should now kill all the infected villagers:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.KillMobsKillMobsCreates a new KillMobs objective.zombie_villager<entityType>Type of Entity the player has to kill.Acceptsentity type or anyExamplezombie_villager15<amount>Amount of kills neededAcceptsnumber or numeric expressionExample15
After 15 kills of Zombie Villagers, that objective will be completed! Now let's add an objective description and name:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.2<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample2descriptiondescriptionObjective description shown in objective lists, progress output, and GUIs. Supports MiniMessage formatting.setsetSets the selected objective's description text.You can see the infected villagers in front of you! Murder them all to stop the virus from spreading!<Objective Description>Task text shown to players for this objective. Supports spaces and MiniMessage formatting.AcceptstextExampleYou can see the infected villagers in front of you! Murder them all to stop the virus from spreading!
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.2<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample2displayNamedisplayNameObjective display name shown in quest progress, objective lists, GUIs, and task messages. Supports MiniMessage formatting.setsetSets the selected objective's display name shown in GUIs and progress output.Zombies ahead!<DisplayName>New objective display name. Supports spaces and MiniMessage formatting.AcceptstextExampleZombies ahead!
Now, after accepting this Quest, you will see this:
As you see, both objectives are visible. You can also complete them in no particular order.
However, we want the second Objective, "Zombies ahead!" to only be visible and complete-able after the first Objective is completed.
To accomplish that, we need to add a condition to the second objective which makes it so the player needs to complete objective 1 first. There's two ways to achieve this in NotQuests (choose just one):
Easy way: /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.predefinedProgressOrderpredefinedProgressOrderConfigures the predefined progress order for this category.setsetChanges the required progress order for objectives in this branch.firstToLastfirstToLastOrders category progress from the first quest to the last.. This also automatically sets the correct, same order for any future objectives you may add to this quest.
Harder way: /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.2<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample2conditionsconditionsManages conditions attached to the selected objective.unlockunlockManages conditions required before the objective can unlock.addaddAdds an unlock condition to the selected objective.CompletedObjectiveCompletedObjectiveCompletedObjective condition type.1<dependingObjectiveId>Objective ID that must be completed before this condition is fulfilled.Acceptsobjective idExample1. You'd need to set this for every single objective of that quest. However, this way may give you more flexibility.
Done! If we take the Quest now, the second objective is hidden:
It will be unlocked once you complete the first objective 😀
With Triggers, we can add some action to the Quest!
When the user reaches the second objective and has to kill the Zombie Villagers, he will notice one thing: There are no Zombie Villagers to kill. Why would they?
Let's make NotQuests spawn some Zombie Villagers for him once he reaches the second objective.
First, we need to create the action which spawns the zombie villagers. Actions can be created outside of Quests and re-used for every quest. Let's make a SpawnMob Action:
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.Spawn15ZombieVillagers<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleSpawn15ZombieVillagersSpawnMobSpawnMobSpawnMob action type.zombie_villager<entityType>Type of Entity which should be spawned.Acceptsentity type or anyExamplezombie_villager15<amount>Amount of mobs which should be spawnedAcceptswhole numberExample15PlayerLocationPlayerLocationUses the target player's current location.
This action spawns 15 zombie villagers at the location wherever the player taking this Quest currently is 😄
Now, let's add the trigger with this action to our Quest:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirustriggerstriggersManages triggers attached to this quest.addaddAdds a trigger that runs an action when the selected quest changes state.Spawn15ZombieVillagers<action>Action which will be executed when the Trigger triggers.Acceptssaved action nameExampleSpawn15ZombieVillagersBEGINBEGINBEGIN trigger type.--applyOn--applyOnQuest or objective target this trigger, action, or condition should apply to, such as Quest, O1, or O2.Acceptswhole numberO2Value for --applyOnQuest or objective target this trigger, action, or condition should apply to, such as Quest, O1, or O2.Acceptswhole numberExampleO2--world_name--world_nameWorld name filter for world enter/leave triggers, or ALL for every world.AcceptstextALLValue for --world_nameWorld name filter for world enter/leave triggers, or ALL for every world.AcceptstextExampleALL
This runs the action "Spawn15ZombieVillagers" once we BEGIN O2 (objective 2) in ALL worlds (not limited to any world). Feel free to test it out — it will work 👍
Your players will murder you if they waste their time on this super hard Quest without receiving any rewards. So let's add some:
+2 Quest Points: /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.QuestPointsQuestPointsSelects the QuestPoints variable for this action, condition, objective, or variable check.add<operator>How to change the QuestPoints number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd2<amount>Number expression used as the value for this QuestPoints action.Acceptsnumber or numeric expressionExample2
2 Swords: /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.GiveItemGiveItemGiveItem action type.hand<material>Material of the item which the player should receive. If you use 'hand', the item you are holding in your main hand will be used.Acceptsmaterial, custom item, hand, any, or comma-separated materialsExamplehand2<amount>Amount of items which the player will receive.Acceptswhole numberExample2
For this reward, you have to hold the item in your hand while running that command. Otherwise, you can also run /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.GiveItemGiveItemGiveItem action type.wooden_sword<material>Material of the item which the player should receive. If you use 'hand', the item you are holding in your main hand will be used.Acceptsmaterial, custom item, hand, any, or comma-separated materialsExamplewooden_sword2<amount>Amount of items which the player will receive.Acceptswhole numberExample2
+300 Money (if you have Vault installed): /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.MoneyMoneySelects the Money variable for this action, condition, objective, or variable check.add<operator>How to change the Money number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd300<amount>Number expression used as the value for this Money action.Acceptsnumber or numeric expressionExample300
Want to give a reward from some other plugin via commands? You can use the {PLAYER} placeholder there. Example: /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.ConsoleCommandConsoleCommandConsoleCommand action type.cr give to {PLAYER} DailyCrate 2<Console Command>Command which will be executed from the console as a reward. A '/' at the beginning is not required.Acceptscommand textExamplecr give to {PLAYER} DailyCrate 2
Once you complete the Quest, you will receive the rewards, but the player won't notice. That's because rewards are hidden (can be changed in the config) by default unless you give them a display name! So let's do that:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.editeditOpens subcommands for editing a specific quest reward.1<reward-id>Numeric reward ID shown by this quest's rewards list.Acceptswhole numberExample1displayNamedisplayNameReward display name shown in reward previews and reward lists. Only rewards with a display name are shown there. Supports MiniMessage formatting.setsetSets the selected reward's display name shown in reward previews and lists.+2 Quest Points<display-name>New reward display name. Supports spaces and MiniMessage formatting.AcceptstextExample+2 Quest Points
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.editeditOpens subcommands for editing a specific quest reward.2<reward-id>Numeric reward ID shown by this quest's rewards list.Acceptswhole numberExample2displayNamedisplayNameReward display name shown in reward previews and reward lists. Only rewards with a display name are shown there. Supports MiniMessage formatting.setsetSets the selected reward's display name shown in reward previews and lists.+2 handcrafted Wooden Swords<display-name>New reward display name. Supports spaces and MiniMessage formatting.AcceptstextExample+2 handcrafted Wooden Swords
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusrewardsrewardsManages rewards granted by this quest or objective.editeditOpens subcommands for editing a specific quest reward.3<reward-id>Numeric reward ID shown by this quest's rewards list.Acceptswhole numberExample3displayNamedisplayNameReward display name shown in reward previews and reward lists. Only rewards with a display name are shown there. Supports MiniMessage formatting.setsetSets the selected reward's display name shown in reward previews and lists.+300 Coins<display-name>New reward display name. Supports spaces and MiniMessage formatting.AcceptstextExample+300 Coins
Done! Once you finish the Quest, you will see the rewards:
We don't want the player to take this Quest over and over and over and over again after they completed it. Let's limit that.
First, let's make it, so they can only accept it only when it has not been completed less than 20 hours ago:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusacceptCooldownacceptCooldownConfigures the cooldown before this quest can be accepted again.completecompleteApplies this setting to quest completion cooldowns.setsetSets the cooldown players must wait after completing this quest before accepting it again.20h<duration>New accept cooldown measured by quest completion time.Acceptsduration such as 500ms, 1s, 5m, or 2hExample20h
20h = 20 hours. Now, let's give it a hard limit of 10 Quest completions. After 10 completions, the player cannot accept the Quest anymore, no matter how long they wait:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheViruslimitslimitsConfigures quest accept, completion, and fail limits.completionscompletionsConfigures how many times players may complete this quest.10<max-completions>Maximum amount of completions. Set to -1 for unlimited (default).Acceptswhole numberExample10
Wanna make it so they cannot accept the quest if they have failed or aborted it 3 times or more? Easy:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheViruslimitslimitsConfigures quest accept, completion, and fail limits.failsfailsConfigures how many times players may fail this quest.3<max-fails>Maximum amount of fails. Set to -1 for unlimited (default).Acceptswhole numberExample3
Alternatively, you could also prevent them from aborting the quest in the first place:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusabortEnabledabortEnabledControls whether players may abort this quest.false<abort-enabled>Enabled by default. Yes / noAcceptstrue or falseExamplefalse
At last, let's set takeEnabled to false:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirustakeEnabledtakeEnabledControls whether players may take this quest.false<take-enabled>Enabled by default. Yes / noAcceptstrue or falseExamplefalse
This will make it, so the player cannot take the Quest using the /q/qPlayer commands for NotQueststaketakeTakes or accepts a quest.TheVirus<questName>Identifier of the quest you want to start.Acceptsquest nameExampleTheVirus command. Instead, they have to take it by either right-clicking a Quest Giver NPC or a Quest Giver armor stand. More regarding that in the next section:
Use /q/qPlayer commands for NotQueststaketakeTakes or accepts a quest.TheVirus<questName>Identifier of the quest you want to start.Acceptsquest nameExampleTheVirus to take the Quest! You can also bind it to Citizens or FancyNPCs NPCs, or Armor stands using /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.<quest><quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest namenpcsnpcsManages NPCs attached to this quest or conversation.addaddAttaches the selected quest to an NPC or armor stand quest giver.citizens:<id><npc>ID of the Citizens NPC to whom the Quest should be attached.AcceptsNPC selector such as citizens:1, fancynpcs:<id>, none, or rightClickSelectExamplecitizens:5 (or fancynpcs:<id>) or /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusarmorstandsarmorstandsManages armor stands attached as quest givers.addaddGives a player the tool used to attach this quest to an armor stand..
The quest is saved in the plugins/NotQuests/default/quests.yml and plugins/NotQuests/default/actions.yml files.
You can group Quests together in categories. Categories are just a way to organize your Quests. Let's create a category called "Virus Quests":
/qa/qaAdmin commands for NotQuestscategoriescategoriesManages quest categories.createcreateCreates a new quest category.VirusQuests<categoryName>Name of your new categoryAcceptstextExampleVirusQuests
Now let's move our quest to that category (by default, it's in a category called "default").
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheViruscategorycategoryShows or changes the category assigned to the selected quest.setsetMoves the selected quest into another category.VirusQuests<category>New category for this Quest.Acceptscategory nameExampleVirusQuests
Done - that easy! Each Quest can only belong to one single category. Categories also determine the folder structure of NotQuests - and they'll even determine how it's displayed in the GUI!
Each category can also have sub-categories. There can be unlimited sub-categories, and you can nest them how deep you want. Example of creating a category "Zombies" as a sub-category of "VirusQuests": /qa/qaAdmin commands for NotQuestscategoriescategoriesManages quest categories.createcreateCreates a new quest category.VirusQuests.Zombies<categoryName>Name of your new categoryAcceptstextExampleVirusQuests.Zombies
The name we specified above is also just the categorie's identifier. You can add a display name (which is what the player will actually see). It can contain spaces, or even color codes, just like quest names! Example:
/qa/qaAdmin commands for NotQuestscategoriescategoriesManages quest categories.editeditOpens subcommands for editing a quest category.VirusQuests<category>Category to editAcceptscategory nameExampleVirusQuestsdisplayNamedisplayNameCategory display name shown in category GUIs and category lists. Supports MiniMessage formatting.setsetSets the selected category's display name.<dark_green>Virus Quests <main>(dangerous)<display-name>New category display name. Supports spaces and MiniMessage formatting.Acceptstext
Remember the predefinedProgressOrder trick we used to make objectives complete in order? Categories have the exact same thing — but for the quests inside them. This is perfect for story chapters: drop your quests into a category and force players to do them one after another, without manually chaining a condition onto every single quest.
/qa/qaAdmin commands for NotQuestscategoriescategoriesManages quest categories.editeditOpens subcommands for editing a quest category.VirusQuests<category>Category to editAcceptscategory nameExampleVirusQuestspredefinedProgressOrderpredefinedProgressOrderConfigures the predefined progress order for this category.setsetChanges the quest progress order for the selected category.firstToLastfirstToLastSets a predefined order in which the quests inside this category need to be progressed for your quest.
Now players have to finish the quests in this category from the first to the last. Your options:
set firstToLast - quests must be done top to bottom.
set lastToFirst - quests must be done bottom to top.
set custom <quest order> - you pick the exact order (quest names separated by spaces).
NotQuests supports sub-objectives! Each objective can have unlimited sub-objective. And each sub-objective can also have unlimited sub-sub-objectives.. and so on!
For that, there exists an "Objective" objective which is just meant as a holder for sub-objectives. In the screenshot, that would be "Improve soil quality".
Although any objective can have sub-objectives.
If you add sub-objectives to an "Objective" objective, it's completed once all its sub-objectives have been completed.
If you add sub-objectives to any other objective, you're only able to progress on it once all its sub-objectives have been completed.
Example:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.quest<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.ObjectiveObjectiveCreates a new Objective objective."<gold>Improve soil quality"<Objective Holder Name>Name of the objective holderAcceptstextExample"<gold>Improve soil quality"
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.quest<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1objectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a child objective to the selected objective.BreakBlocksBreakBlocksCreates a new BreakBlocks objective.dirt<materials>Material of the block which needs to be brokenAcceptsmaterial, custom item, hand, any, or comma-separated materialsExampledirt5<amount>Amount of blocks which need to be brokenAcceptsnumber or numeric expressionExample5
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.quest<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1objectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a child objective inside the selected objective.1<objectiveId2>Child objective ID shown inside the selected parent objective.Acceptsobjective idExample1displayNamedisplayNameObjective display name shown in quest progress, objective lists, GUIs, and task messages. Supports MiniMessage formatting.setsetSets the selected objective's display name shown in GUIs and progress output.Less dirt is good<DisplayName>New objective display name. Supports spaces and MiniMessage formatting.AcceptstextExampleLess dirt is good
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.quest<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1objectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a child objective to the selected objective.JumpJumpCreates a new Jump objective.3.0<amount>Amount of times the player needs to jump.Acceptsnumber or numeric expressionExample3.0--taskDescription--taskDescriptionCustom task text shown to players for this objective instead of the default description.AcceptsMiniMessage text"Jump on the soil to make it better"Value for --taskDescriptionCustom task text shown to players for this objective instead of the default description.AcceptsMiniMessage textExample"Jump on the soil to make it better"
Earlier in this tutorial, we've explained how you can add objective dependencies via conditions. The command was /qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.TheVirus<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleTheVirusobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.2<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample2conditionsconditionsManages conditions attached to the selected objective.unlockunlockManages conditions required before the objective can unlock.addaddAdds an unlock condition to the selected objective.CompletedObjectiveCompletedObjectiveCompletedObjective condition type..
However, there are different kinds of conditions you can add to Objectives. This condition is an unclock condition, which determines if the objective is Hidden (= no progress is counted and you cannot complete it) or not.
However, you can ALSO add objective conditions which check if you can progress, or complete the objective. Should be super useful!
Examples:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1conditionsconditionsManages conditions attached to the selected objective.unlockunlockManages conditions required before the objective can unlock.addaddAdds an unlock condition to the selected objective.FlyingFlyingSelects the Flying variable for this action, condition, objective, or variable check.equals<operator>How to compare the Flying boolean variable: and, equals, or.AcceptstextExampleequalsfalse<expression>Boolean expression to compare with the current Flying value.Acceptstrue/false value or boolean expressionExamplefalse - Unlock condition. That's what you are used to. If you are flying, the objective remains locked / "Hidden"
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1conditionsconditionsManages conditions attached to the selected objective.progressprogressManages conditions required while the objective is progressing.addaddAdds a progress condition to the selected objective.FlyingFlyingSelects the Flying variable for this action, condition, objective, or variable check.equals<operator>How to compare the Flying boolean variable: and, equals, or.AcceptstextExampleequalsfalse<expression>Boolean expression to compare with the current Flying value.Acceptstrue/false value or boolean expressionExamplefalse - Objective is always shown, but if you are flying, you won't get any positive progress towards it
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.editeditOpens subcommands for editing a specific objective on the selected quest.1<objectiveId>Objective ID shown by this quest's objectives list.Acceptsobjective idExample1conditionsconditionsManages conditions attached to the selected objective.completecompleteManages conditions required before the objective can complete.addaddAdds a completion condition to the selected objective.FlyingFlyingSelects the Flying variable for this action, condition, objective, or variable check.equals<operator>How to compare the Flying boolean variable: and, equals, or.AcceptstextExampleequalsfalse<expression>Boolean expression to compare with the current Flying value.Acceptstrue/false value or boolean expressionExamplefalse - Objective is always shown and you always get progress, but it won't complete if you don't fulfill the condition
There are more possible objectives than you think there are. You can add any variable of notquests as an objective! An example would be if you wanted the objective to be "Play 100 minutes":
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.NumberVariableNumberVariableCreates a new NumberVariable objective.PlaytimeMinutesPlaytimeMinutesSelects the PlaytimeMinutes variable for this action, condition, objective, or variable check.moreOrEqualThan<operator>How to compare the PlaytimeMinutes number variable against the target expression.AcceptstextExamplemoreOrEqualThan100<amount>Target number expression this PlaytimeMinutes objective must reach.Acceptsnumber or numeric expressionExample100
What if the player already played for 100 minutes already, though? Let's make it, so the player has to play 100 MORE minutes - counting from the point of accepting the quest/unlocking the objective.
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.NumberVariableNumberVariableCreates a new NumberVariable objective.PlaytimeMinutesPlaytimeMinutesSelects the PlaytimeMinutes variable for this action, condition, objective, or variable check.moreOrEqualThan<operator>How to compare the PlaytimeMinutes number variable against the target expression.AcceptstextExamplemoreOrEqualThanPlaytimeMinutes+100<amount>Target number expression this PlaytimeMinutes objective must reach.Acceptsnumber or numeric expressionExamplePlaytimeMinutes+100
This objective makes it so the player needs to play 100 MORE minutes. This is possible, as you are able to use expressions (math, other variables etc.) in many places in notquests (PlaytimeMinutes+100 is such an expression).
Imagine the possibilities! Dynamic objectives based on how much the player has already done / how strong they are / how much karma or questpoints they collected / how much they earned? An easy task with notquests!
Anywhere you can specify blocks/materials (e.g. the BreakBlocks objective or the GiveItem action/reward), we use our block selector. You can not only specify one single block/material there, but multiple! Here's some examples:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.BreakBlocksBreakBlocksCreates a new BreakBlocks objective.diamond_ore,deepslate_diamond_ore<materials>Material of the block which needs to be brokenAcceptsmaterial, custom item, hand, any, or comma-separated materialsExamplediamond_ore,deepslate_diamond_ore20<amount>Amount of blocks which need to be brokenAcceptsnumber or numeric expressionExample20
Yes! Finally you can make it so both kinds of diamond ore count towards the progress.
Or:
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.questname<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExamplequestnameobjectivesobjectivesManages objectives on this quest or parent objective.addaddAdds a new objective to the selected quest.PlaceBlocksPlaceBlocksCreates a new PlaceBlocks objective.hand,acacia_log,spruce_log,birch_log,dark_oak_log<materials>Material of the block which needs to be placedAcceptsmaterial, custom item, hand, any, or comma-separated materialsExamplehand,acacia_log,spruce_log,birch_log,dark_oak_log15<amount>Amount of blocks which need to be placedAcceptsnumber or numeric expressionExample15
You can see why that's super useful, right?
This even works in GiveItem actions, so you could give players multiple items at once!
NotQuests expressions are actually really powerful!
NotQuests gives you the ability to make even more complex conditions much easier, if you want to. Boolean comparisons are now possible in expressions. Note: conditions can be used as quest requirements / objective conditions. They are the same.
Few examples of what's now possible:
/qa/qaAdmin commands for NotQuestsconditionsconditionsManages saved conditions that can be reused by quests, objectives, and actions.addaddCreates a new saved condition.cname<Condition Identifier>Unique identifier for the new saved condition.AcceptstextExamplecnameTrueTrueSelects the True variable for this action, condition, objective, or variable check.equals<operator>How to compare the True boolean variable: and, equals, or.AcceptstextExampleequals(Money>10)&Flying<expression>Boolean expression to compare with the current True value.Acceptstrue/false value or boolean expression
This checks if you are flying AND have more than $10
Another way to do this: /qa/qaAdmin commands for NotQuestsconditionsconditionsManages saved conditions that can be reused by quests, objectives, and actions.addaddCreates a new saved condition.cname<Condition Identifier>Unique identifier for the new saved condition.AcceptstextExamplecnameTrueTrueSelects the True variable for this action, condition, objective, or variable check.equals<operator>How to compare the True boolean variable: and, equals, or.AcceptstextExampleequalsCondition(Conditions:Flying&IsRich)<expression>Boolean expression to compare with the current True value.Acceptstrue/false value or boolean expressionExampleCondition(Conditions:Flying&IsRich)
Or /qa/qaAdmin commands for NotQuestsconditionsconditionsManages saved conditions that can be reused by quests, objectives, and actions.addaddCreates a new saved condition.cname<Condition Identifier>Unique identifier for the new saved condition.AcceptstextExamplecnameConditionConditionSelects the Condition variable for this action, condition, objective, or variable check.equals<Conditions>Name of the condition list to evaluate for this variable.Acceptstext valueExampleequalsFlying&IsRich<operator>How to compare the Condition boolean variable: and, equals, or.AcceptstextExampleFlying&IsRich
You can also use | (or) operators or ! (negation) when using conditions in an expression.
Or:
/qa/qaAdmin commands for NotQuestsconditionsconditionsManages saved conditions that can be reused by quests, objectives, and actions.addaddCreates a new saved condition.moneyCondition<Condition Identifier>Unique identifier for the new saved condition.AcceptstextExamplemoneyConditionMoneyMoneySelects the Money variable for this action, condition, objective, or variable check.moreThan<operator>How to compare the Money number variable against the expression.AcceptstextExamplemoreThan10+TagInteger(TagName:reputation)*TagInteger(TagName:level)<amount>Number expression to compare with the current Money value.Acceptsnumber or numeric expressionExample10+TagInteger(TagName:reputation)*TagInteger(TagName:level)
This condition makes it so you need more than 10 + the value of the "reputation" tag multiplied by the value of the "level" tag money.
And now a very complex one:
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.pp3<Action Identifier>Unique identifier for the new saved action.AcceptstextExamplepp3MoneyMoneySelects the Money variable for this action, condition, objective, or variable check.add<operator>How to change the Money number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd((TagInteger(TagName:points)>=4)*(10+30))+(!(TagInteger(TagName:points)>=4)*5)<amount>Number expression used as the value for this Money action.Acceptsnumber or numeric expression
If your "points" (from the Integer tag) are bigger or equal 4, this action will give you 40$. Otherwise, it will give you 5$. If you want to learn more about the tag system, head to the tag system guide.
Every player with the permission node "notquests.user.profiles" can now create profiles in notquests! 🔥
Each profile has their own quest points, tags active & completed quests etc. This would allow players to start over if they want to, in order to choose a different path, do a speedrun or just to experience your RPG again - or whatever else!
Showing all your current profiles: /notquests/notquestsPlayer commands for NotQuestsprofilesprofilesManages player quest profiles.showshowShows your current quest profile and the other profiles you can switch to. (seen on the screenshot)
Creating a new profile: /notquests/notquestsPlayer commands for NotQuestsprofilesprofilesManages player quest profiles.createcreateCreates a new quest profile for the current player.profilename<profile-name>Name for the new quest profile. Profile names cannot contain spaces.AcceptstextExampleprofilename
Changing your profile: /notquests/notquestsPlayer commands for NotQuestsprofilesprofilesManages player quest profiles.changechangeSwitches the active player profile.profilename<profile-name>Name of the existing profile.AcceptstextExampleprofilename
Now, start making Quests! On this website, you can find further information about NotQuests and help if you check out the Documentation tab on the top of this page. If you need any help, feel free to join our Discord.