HomeJavaModsQuestCore
QuestCore
ModsJava

QuestCore

A complete quest system for Paper: YAML quests with eight objective types, delivery and storage quest chests, quest-giver NPCs with holograms, a paginated…

⬇ Download on Modrinth

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-freeeco 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.

/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:

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.

Verified by MCModsHub

These come from our own check of the pack file, not from the source page.

Explore more