Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
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.


