QuestCore
ModrinthSpigotMCA complete quest system for Paper: YAML quests with eight objective types, delivery and storage quest chests, quest-giver NPCs with holograms, a paginated journal, translatable quest content, rotating dailies, and a package audit. EN + NL, no deps.
QuestCore
A whole quest experience in one plugin — and not a single dependency.
Write quests in YAML. Hand them out with quest givers you place yourself. Take
deliveries in real chests in the world. Let players browse everything in a
journal with live progress bars. Translate the story separately from the buttons.
And run one command to find every problem before your players do.
No database. No Citizens. No WorldGuard. No economy plugin. No Bedrock form
toolkit. Everything is YAML you can read, and every word a player sees ships in
English and Dutch.
📜 Quests, in YAML you can actually read
miner_pickaxe:
name: '&6Lost Family Pickaxe'
description: 'Bring 10 gold ingots to the Miner Supply Chest.'
npc-id: 1
prerequisites: []
objectives:
- id: pickaxe_gold
type: DEPOSIT_TO_CHEST
target: 1:GOLD_INGOT
amount: 10
rewards:
xp: 120
commands:
- 'eco give {player} 2000'
Eight objective types: KILL_MOB, BREAK_BLOCK, PLACE_BLOCK,
COLLECT_ITEM, TALK_TO_NPC, VISIT_ZONE, DEPOSIT_TO_CHEST,
WITHDRAW_FROM_CHEST.
Prerequisite chains, repeatable quests, an optional permission gate, and rewards
made of items, XP, console commands and chat lines. Commands are the escape
hatch that keeps the plugin dependency-free — eco give {player} 2000 works
with whatever economy plugin you already run.
📦 Quest chests that cannot be abused
A real chest in your world that players right-click.
- Delivery mode takes exactly what the player's quests still need and hands
the rest straight back. Nothing is stored, so it can never be used as free
storage and nobody can take another player's delivery. - Storage mode keeps its contents — personal per player, or one shared box an
admin can stock — and turns the before/after difference into progress, so no
shift-click, drag or hotbar swap can slip past the accounting. - A per-chest item whitelist, a configurable size and title, and admin-only
block breaking.
/questchest create | place | mode | title | filter | shared | link.
🧑🌾 Quest-giver NPCs — the plugin's own
No Citizens. Place one where you stand, give it a name, a one-line role and a
greeting in each language, and pick any living entity as its body (or NONE
for an invisible click point over a build you made yourself).
Right-click it: the greeting appears in chat, a line reminds the player which
objective they are on, and the journal opens on that NPC's quests.
Holograms are capped at three lines — name, role, hint — enforced in code,
not just in config.
📖 A journal worth opening
Tabs for in-progress, available and completed quests, plus a page per quest
giver. Quest cards with status colours, live progress bars and percentages,
every objective ticked off individually, and a reward preview — with console
commands shown as "A special reward" rather than leaking your internals.
Built on a self-contained menu framework that cancels every item movement, so a
journal can never be used to duplicate items.
🌍 Translate the story, not the buttons
Quest titles, descriptions and objective text live in their own
quest-content_<code>.yml, separate from the interface strings. A translator can
work on your story without scrolling past error messages, and any player can pick
their own quest language with /questlang — independently of the interface.
Missing a key? It falls back to the default language, then to quests.yml, then
to a generated line from a per-type template. A half-finished translation
degrades to real words, never to a placeholder.
🔁 Rotating dailies and weeklies
Optional per-player daily and weekly objectives with proper reset windows,
reusing the same objective types and reward bundles as everything else.
🔎 The package audit
The feature you will use most.
/questaudit
[ERROR] chest '1' does not accept ANCIENT_DEBRIS, but 'miner_drill' tells players to deposit it
[ERROR] quest 'book_medals' needs prerequisite 'book_scroll', which does not exist
[ERROR] quest 'side_a' can never be started (broken or circular prerequisites)
[WARN] quest 'elias_craft' points at quest giver #3, which has no position yet
Dangling prerequisites, circular chains, unreachable quests, missing chests and
NPCs, unknown items and entities, malformed targets, chests that reject the very
item a quest asks for, and per-language translation gaps.
A quest that is broken normally does not throw — it just quietly never completes.
This finds those.
Entity hygiene is the headline
This plugin spawns display entities for the floating text, so it is built to be
tidy:
- Every entity is configured pre-spawn and marked non-persistent — the
server never writes a hologram into a region file, so a crash or a hard restart
leaves nothing behind. - Every entity is tagged with its NPC id and role, so an orphan can always be
identified — even one from an older build. - Sweeps run on enable (before anything is spawned), on chunk load, and
on a timer, plus/questnpc cleanupon demand. - No chunk tickets, ever. A quest hub does not cost you a permanently loaded
chunk. - Bodies have AI off and are invulnerable, silent and non-collidable.
- Bukkit API only — no NMS, no reflection, nothing version-locked.
Modular & standalone
Seven modules you switch on or off: quests, questchests, questnpcs,
journal, questlang, dynamicquests, questaudit. A module whose dependency
is off logs one clear line and stays off rather than half-starting — a chest
that silently swallows items is worse than a chest that does not open.
All data is plain YAML you can open, read and repair by hand.
Built for Paper 26.1
Adventure components everywhere, registry-based type lookups, pre-spawn entity
configuration, TextDisplay holograms. No deprecated-for-removal API anywhere,
and the build finishes with zero compiler warnings.
Ships with 94 JUnit tests covering the parts that matter: objective-type
parsing, the prerequisite/repeatability/permission gate matrix, per-objective
progress bookkeeping, <chestId>:<MATERIAL> parsing and matching, chest
before/after deltas, cuboid-zone containment, daily and weekly reset-window
maths, the three-line hologram cap, progress-bar rendering, and the audit's
graph checks including cycle detection.
Languages
English and Dutch out of the box, for both the interface and the quest content.
Add your own by copying one file.
Versions
FAQ
How do I install QuestCore?
Download the file for your Minecraft version and loader from this page, then drop the .jar into your mods (or plugins) folder and launch the game.
Is QuestCore free?
QuestCore is free to download on Modgrid — we link straight to the official source, no paywall or bundled installer.
Which Minecraft versions does QuestCore support?
Works with Paper, Purpur. Supports versions 1.21–26.2. See the download section on this page for the full list of supported versions and loaders.

Comments 0
No comments yet. Be the first to share your thoughts.