Skip to main content

Quest Codex

The Quest Codex Extension provides a fully customizable GUI system for players to browse, track, and manage quests organized by hierarchical categories. Every menu is built through declarative layout pools powered by the GUI Extension — no hardcoded menus, infinite customization.

Features

  • Hierarchical Categories — Nest categories with parent/child relationships. Sub-categories inherit visibility from their parent.
    • Layout Pools — Design every menu through declarative layout pools. Placeholders (SORT_SLOT, CATEGORY_SLOT, QUEST_SLOT) are automatically injected.
    • Scrollable Quest Lists — Quest and category slots follow scrollable, paginated and frame viewports — build scrolling quest grids of any size (since 0.3.0).
    • Dynamic Sort — Cycle through All → Not Started → Active → Completed with per-mode button display (label, lore, custom item).
    • Quest Tracking — Track active quests with priority indicators via QuestExtension's native tracking system.
    • Complete Sound Design — Configure sounds for menu open, click, scroll, and quest track/untrack events.
    • BlueMap Integration — Display quest icons on BlueMap with dynamic labels and visibility rules (BTC version).

Architecture

Entry Library

Configuration

Category System

  • Quest Category — Define a category with title, icon, parent, and visibility criteria.
    • Quest Assignment — Link quest entries to a category with ordering and per-status overrides.
  • Category Menu — Design menus with declarative layout pools, placeholder slots, and per-mode sort buttons.
    • Quest Lore — Override lore lines per quest and per status.

Quick Start

  • 1. Add Global Config (Optional) — Create a Quest Codex Config entry in a page JSON to customize sounds and messages. The extension works out of the box without this — it uses sensible defaults. json { "type": "quest_codex", "id": "my_codex_config", "defaultRows": 5, "nowTrackingMessage": "<green>Now tracking: {quest}</green>" } Place this in any compiled page under plugins/Typewriter/pages/. → Quest Codex Config

  • 2. Define Categories — Add a Quest Category entry. This defines a logical group of quests in the codex with its display title, icon, and optional parent for nesting. Key fields: - category — Unique internal name (e.g., main_quests) - title — Display title shown to players (MiniMessage) - icon — Item shown in parent/category list - parent — Leave empty for top-level, or set to nest → Quest Category

  • 3. Assign Quests — Add a Quest Assignment entry to link your QuestExtension quests to a category. Control ordering and per-status overrides. json { "type": "quest_assignment", "id": "assign_main", "category": "main_quests", "questRefs": ["quest:quest_main_1", "quest:quest_main_2"], "orders": [0, 1] } → Quest Assignment

  • 4. Design Menus — Add a Category Menu entry for each category you want a custom GUI for. Use the layout pool to place: - CATEGORY_SLOT — Auto-injected category icons (main menu) - QUEST_SLOT — Auto-injected quest buttons (category menu) - SORT_SLOT — Auto-injected dynamic sort button - Standard GUI items — Decorative items, fills, static buttons The layout pool uses the CUSTOM guiType. Everything is positional: place items at (x, y) coordinates. → Category Menu

  • 5. Open the Menu — Access the codex via command: /tw codex → main codex menu (since 0.3.0) /tw codex <category> → a specific category Examples: - /tw codex main_quests — Opens the main quests category - /tw codex daily_tasks — Opens daily tasks > Main menu: either create a category_menu entry with an empty category and CATEGORY_SLOT markers, or build the hub as a GUI Extension open_gui menu whose buttons run codex:open <category> and reference it in the config's mainMenuTrigger/tw codex and the codex BACK button will then open it.

Commands

CommandPermissionDescription
/tw codextypewriter.codex.openOpen the main codex menu (empty-category category_menu, or the config's mainMenuTrigger).
/tw codex <category>typewriter.codex.openOpen a specific quest category directly. Tab-completion available.

Placeholders

Prefix: %typewriter_*%

Global Placeholders
PlaceholderReturnsExample
%typewriter_total_quests%Total quest count across all categories42
%typewriter_total_completed%Total completed quests15
%typewriter_total_in_progress%Total in-progress quests5
%typewriter_total_not_started%Total not-started quests22
%typewriter_total_progress%Completed/Total formatted15/42
Per-Category Placeholders

Replace <name> with the category identifier (e.g., main_quests).

PlaceholderReturnsExample
%typewriter_category_<name>%Total quests in category10
%typewriter_category_<name>_completed%Completed in category3
%typewriter_category_<name>_in_progress%In progress in category2
%typewriter_category_<name>_not_started%Not started in category5
%typewriter_category_<name>_progress%Progress formatted3/10

Aliases: _inprogress% and _notstarted% also work.

Template Variables (in @Placeholder fields)
VariableContextReplaced With
{quest}Message templatesThe quest's display name
{completed}Progress messagesNumber of completed quests
{total}Progress messagesTotal quests in the category

Permissions

PermissionDescription
typewriter.codex.openOpen the quest codex.

Dependencies

ExtensionRequiredUsage
QuestExtensionRequiredCore quest engine.
GUI ExtensionRequiredMenu rendering and layout pool system.
PlaceholderAPIOptionalFor @Placeholder fields.