Tooltip template engine
A HOCON file lets server owners replace any widget tooltip without waiting on a mod update. Per-widget names, templates, and reusable custom_fragments.
The Content Book is Journey’s in-game player journal — a multi-tab GUI that surfaces every progression system in one place. It’s built on top of Journey’s configurable GUI engine (HOCON .conf files in config/journey/guis/) plus widget, action, and placeholder registrations. Open it with /journal.
Tooltip template engine
A HOCON file lets server owners replace any widget tooltip without waiting on a mod update. Per-widget names, templates, and reusable custom_fragments.
Symbol library
1376 Unicode entries across 22 categories. Plus 15 pre-built fragments for separators, bullets, and status indicators.
Detail sub-menus
Three new drill-down GUIs for Achievements, Discoveries, and Factions. Click any entry to open a header + grid view of milestones, ranks, or discovery info.
Multi-line descriptions
Achievements, factions, and discoveries now accept arrays of description lines, with backward-compatible auto-conversion from legacy single strings.
/journal is the canonical entry point. It opens the Content Book on the active tab. From there the tab strip hops between tabs via Journey’s standard GUI action system.
Each tab is a separate .conf file with GUI id journey:content_book_<tab>:
| Tab | GUI id | Icon |
|---|---|---|
| Active | journey:content_book_active | writable_book |
| Available | journey:content_book_available | spyglass |
| Completed | journey:content_book_completed | written_book |
| Discoveries | journey:content_book_discoveries | compass |
| Achievements | journey:content_book_achievements | amethyst_shard |
| Levelables | journey:content_book_levelables | experience_bottle |
| Factions | journey:content_book_factions | white_banner |
Click an entry on Achievements, Discoveries, or Factions and you drill into a dedicated detail sub-menu.
The tooltip template engine lets server owners replace any Content Book widget tooltip from HOCON config without waiting on a mod update.
config/journey/tooltip_templates.confconfig/journey/.tooltip_versionnames { <widget-type> = "<MiniMessage display name with {placeholders}>" }templates { <widget-type> { lines = [ ... ] } }custom_fragments { <fragment-id> { lines = [ ... ] } }names — per-widget display-name override. {key} substitution uses the widget’s data map, then runs through MiniMessage.templates — per-widget tooltip body. Each entry is a list of line objects rendered top to bottom.custom_fragments — server-defined reusable fragments you can include from any template.| Type | Purpose |
|---|---|
text | MiniMessage-formatted text with {placeholder} substitution |
blank | Empty line |
separator | Horizontal rule (configurable color / length) |
stat | Label: Value formatted line with label / value colors |
progress-bar | Visual bar with current / max values |
fragment | Include a registered fragment by ID |
Conditional display flags: show-if = "<key>" and hide-if = "<key>" reference boolean keys on the widget’s data map (e.g. alreadyStarted on a bounty slot).
Here’s a template that overrides the Active quest list slot with a two-section tooltip plus a custom fragment:
names { task-slot = "<white><bold>{name}"}
templates { task-slot { lines = [ { type = "text", value = "<dark_gray>{description}" } { type = "blank" } { type = "stat", label = "Progress", value = "{subtaskProgress}", label-color = "dark_gray", value-color = "aqua" } { type = "blank" } { type = "fragment", id = "journey:separator_thin" } { type = "text", value = "<dark_gray><italic>Click for details" } ] }}
custom_fragments { my_footer { lines = [ { type = "text", value = "<gold>★ Custom server line ★" } ] }}Every list-view widget checks for a template override first. If one exists, it’s rendered. Otherwise the widget falls back to its built-in default lore. Parse failures silently fall back, so a typo won’t break the book.
Detail sub-menu widgets are not template-driven — the three drill-down views (achievement, discovery, faction detail) always render their built-in lore and can’t be reskinned via HOCON.
{key} values per widgetCommon keys emitted by widgets:
name, description, descriptionLines, iconsubtaskProgress, completedSubs, totalSubs, isCompleted, sourcecategory, points, isUnlocked, isProgressive, progress, maxProgressdiscoveryName, tier, points, isDiscoveredreputation, rankName, rankIndex, totalRanks, progresslevel, experience, xpRequired, isActivealreadyStarted, objectives, rewardsFifteen pre-built reusable fragments ship out of the box. Include them in any template via { type = "fragment", id = "..." }.
| Fragment | Renders |
|---|---|
journey:separator_heavy | 25× ━ in dark_gray |
journey:separator_double | 25× ═ in dark_gray |
journey:separator_dots | 12× ◦ in dark_gray |
journey:separator_diamond | Alternating ◆ ◇ |
journey:separator_thin | Built-in thin rule |
| Fragment | Renders |
|---|---|
journey:bullet_diamond | <gray> ◆ {text} |
journey:bullet_arrow | <gray> ► {text} |
journey:bullet_star | <gray> ★ {text} |
journey:check_yes | <green> ✔ {text} |
journey:check_no | <red> ✘ {text} |
| Fragment | Renders |
|---|---|
journey:status_unlocked | <green>✔ Unlocked |
journey:status_locked | <red>✘ Locked |
journey:status_progress | <yellow>◐ In Progress |
journey:box_top | <dark_gray>╭─ ... ─╮ |
journey:box_bottom | <dark_gray>╰─ ... ─╯ |
Three dynamic renderers are also available for runtime-computed bars:
█████░░░░░ with configurable length and colors★★★☆☆◆◆◆◇◇Journey ships a content library of 1376 Unicode entries across 22 categories, loaded into memory at mod init.
Categories: Symbols & Emoji, Geometric, Arrows, Math & Logic, Numbers, Currency, Punctuation, Music & Media, Greek, Cyrillic, Latin Extended, Armenian, Hebrew, Georgian, Runic, Gothic, IPA & Phonetic, Enclosed Alphanumerics, Box Drawing, Block Elements, Technical, CJK & Japanese.
Three new detail GUIs drill into a single entry from the matching tab.
Achievement Detail
GUI: achievement_detail.conf (6 rows).
Opens via journey:open_achievement_detail with the achievement id in GUI state.
Header with icon / info / status, plus a 28-slot grid showing progressive milestones and rewards.
Discovery Detail
GUI: discovery_detail.conf (4 rows).
Opens via journey:open_discovery_detail with the zone UUID in GUI state.
Header-only — no item grid. Undiscovered zones show <gray>??? and hide the description.
Faction Detail
GUI: faction_detail.conf (6 rows).
Opens via journey:open_faction_detail with the faction id in GUI state.
Header with icon / info / status (progress bar), plus a 28-slot rank grid. Locked ranks show a “need X more reputation” hint.
All three use journey:open_content_book with the relevant tab name as the back action ("achievements", "discoveries", "factions").
Achievements, factions, and discoveries now accept description arrays. Legacy single-string configs still load — all three type adapters share the same fallback:
null or missing → empty list"description": [ "First line of the description.", "Second line, kept short for tooltip readability.", "Optional third line."]Lines are word-wrapped at a 35-character cap. Every widget gets both a joined single-line form (for flat templates) and a pre-wrapped multi-line form (canonical). Widgets read the multi-line form first and fall back to the single-line form.
Words longer than 35 characters are not split — they overflow.
| Placeholder | Returns |
|---|---|
{journey:active_task_count} | Incomplete tasks |
{journey:completed_task_count} | Completed tasks |
{journey:discovery_count} | Zones the player has discovered |
{journey:total_discoveries} | Count of zones with a discovery field |
{journey:achievement_count} | Unlocked achievements |
{journey:achievement_points} | Lifetime achievement points |
{journey:skill_tree_count} | Total registered skill trees |
{journey:skill_tree_name} | Tree name from the current skill_tree_id state |
Used inside the .conf files as <white>Active: <gray>{journey:active_task_count} and similar.
The Content Book has no centralized color-scheme file. Colors are baked into:
config/journey/tooltip_templates.conf — every line specifies label-color / value-color (mostly dark_gray / white / aqua).config/journey/guis/content_book_*.conf files — inline MiniMessage tags in name and lore strings.SECRET renders in <light_purple>, TERRITORIAL in <aqua>, WORLD in <white>.To fully retheme, you need to edit both tooltip_templates.conf (for tooltip text / colors / fragments) and the individual content_book_*.conf files (for page layouts). Both are version-stamped and re-copied from bundled defaults on every mod-version bump, so customizations should be diffed and re-merged on upgrade.
visibility_condition evaluates true.minecraft:paper.<gray>??? and hide the description block until discovered.tooltip_templates.conf and the guis/ directory before every Journey upgrade so you can re-merge your customizations.