Guide

How to make a Minecraft quest plugin

Updated October 18, 2026

Quests give players a reason to play: kill 20 zombies, mine 64 iron, bring a villager 10 bread. A quest plugin is three things: objectives that listen to game events, progress saved for every player, and rewards. Defining quests in a config file lets you add new ones without touching the code.

Change the quests and rewards to yours.

Generate this with Codexe

Step by step

  1. 1.Choose the objective types

    Start with a few: kill a mob type, break or place blocks, collect items, craft, reach a place, talk to an NPC. Every quest is built from these.

  2. 2.Define quests in a file

    Each quest in quests.yml: an id, a name, a description, its objectives with amounts, rewards and requirements (another quest first, a permission, a level).

  3. 3.Track progress per player

    Listen to the events behind each objective and add to the player's progress. Save it to SQLite or a file so it survives logouts and restarts.

  4. 4.Show the progress

    A /quests menu with active and finished quests, plus a message, title or boss bar when progress changes.

  5. 5.Give rewards

    Items, experience, money through Vault, or console commands such as lp user %player% permission set ... for anything else.

  6. 6.Build and complete a quest in game

    Let Codexe compile it, join the test server, accept a quest and finish it. Then restart and check the progress and rewards were saved.

Objectives and the events behind them

ObjectiveEventDetail to decide
Kill mobsEntityDeathEventCount only kills by the player, or also by their pets and arrows
Break blocksBlockBreakEventIgnore blocks the player placed, or players will place and break the same block
Collect itemsInventory check or pickup eventWhether the items are taken when the quest is handed in
Craft itemsCraftItemEventShift-click crafting makes several at once
Reach a placePlayerMoveEventCheck only when the player changes block, not every movement
Talk to an NPCPlayerInteractEntityEventWhich entity is the quest giver

Quest givers

The simplest quest giver is a command or a menu. For a character in the world, a villager or armour stand with a custom name and a PersistentDataContainer tag works without other plugins: the plugin recognises it when a player right-clicks it. If your server already uses an NPC plugin such as Citizens, name it in the request so the plugin hooks into it.

Example description

"A Paper 1.21.4 quest plugin called Quests. Objective types: kill mobs, break blocks (not placed by players), collect items and talk to a villager tagged as a quest giver. Quests defined in quests.yml with name, objectives, required quest and rewards (items, experience, Vault money, console commands). /quests opens a menu with available, active and finished quests. Progress shown in the action bar. Up to 3 active quests. Daily quests reset at midnight server time. Progress saved in SQLite."

Daily and repeatable quests

  • Say when they reset: at a fixed time each day, or 24 hours after the player finished.
  • Say whether daily quests are random for each player or the same for everyone.
  • Store the last completion time, not a flag, so resets work while the server is off.

Questions

Can quests use PlaceholderAPI?

Yes. Ask for placeholders such as the active quest and its progress, so scoreboards and tab lists can show them. Name PlaceholderAPI in the request so it is added as a dependency.

Can I write quests with Skript?

Small quest systems fit in a Skript with variables. Many objective types, menus and saved progress for hundreds of players are easier to keep fast and organised in a plugin.

How do I check the quests work?

Play them on the Codexe test server, and add tests in your own words, for example "a normal player runs /quests and sees a menu open". Tests check messages, items and menus, not mobs or blocks in the world.

Make your quest plugin

This prompt opens ready to send:

“A Paper 1.21.4 quest plugin: objective types kill mobs, break blocks not placed by players, collect items and talk to a tagged villager; quests in quests.yml with objectives, required quest and rewards (items, XP, Vault money, console commands); /quests menu with available, active and finished quests; progress in the action bar; max 3 active quests; daily quests reset at midnight; progress saved in SQLite.”

Generate this with Codexe
How to make a Minecraft quest plugin | Codexe