Skip to content

Content Book

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.

Overhauled in Beta 2

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

TabGUI idIcon
Activejourney:content_book_activewritable_book
Availablejourney:content_book_availablespyglass
Completedjourney:content_book_completedwritten_book
Discoveriesjourney:content_book_discoveriescompass
Achievementsjourney:content_book_achievementsamethyst_shard
Levelablesjourney:content_book_levelablesexperience_bottle
Factionsjourney:content_book_factionswhite_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.

  • Runtime configconfig/journey/tooltip_templates.conf
  • Version markerconfig/journey/.tooltip_version
names { <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.
TypePurpose
textMiniMessage-formatted text with {placeholder} substitution
blankEmpty line
separatorHorizontal rule (configurable color / length)
stat Label: Value formatted line with label / value colors
progress-barVisual bar with current / max values
fragmentInclude 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.

Common keys emitted by widgets:

  • All widgetsname, description, descriptionLines, icon
  • Quest slotssubtaskProgress, completedSubs, totalSubs, isCompleted, source
  • Achievementcategory, points, isUnlocked, isProgressive, progress, maxProgress
  • DiscoverydiscoveryName, tier, points, isDiscovered
  • Factionreputation, rankName, rankIndex, totalRanks, progress
  • Levelablelevel, experience, xpRequired, isActive
  • BountyalreadyStarted, objectives, rewards

Fifteen pre-built reusable fragments ship out of the box. Include them in any template via { type = "fragment", id = "..." }.

FragmentRenders
journey:separator_heavy25× in dark_gray
journey:separator_double25× in dark_gray
journey:separator_dots12× in dark_gray
journey:separator_diamondAlternating ◆ ◇
journey:separator_thinBuilt-in thin rule

Three dynamic renderers are also available for runtime-computed bars:

  • Progress bar█████░░░░░ with configurable length and colors
  • Star rating★★★☆☆
  • Diamond progress◆◆◆◇◇

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
  • JSON array → stored as-is
  • JSON primitive string → wrapped into a one-element list
  • Anything else → 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.


PlaceholderReturns
{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:

  1. config/journey/tooltip_templates.conf — every line specifies label-color / value-color (mostly dark_gray / white / aqua).
  2. The per-tab config/journey/guis/content_book_*.conf files — inline MiniMessage tags in name and lore strings.
  3. Built-in fallback widget lore — when no template is registered, widgets render their default MiniMessage strings.
  4. Tier colors on discovery slots — 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.


  • Missing or null descriptions all become empty lists — legacy configs no longer crash at load.
  • Hidden achievements are filtered unless the player has unlocked them.
  • Hidden factions are filtered unless the Molang visibility_condition evaluates true.
  • Broken icon item ids fall back to minecraft:paper.
  • Undiscovered zones render <gray>??? and hide the description block until discovered.
  • Empty pages render the background fill — there’s no explicit empty-state slot.
  • Long words (over 35 chars) overflow — they’re not split.

  • Keep tooltip templates short. Four to six lines read cleanly; ten or more feel like a wall of text.
  • Use fragments for separators and bullets. Centralize style — edit one place to restyle everywhere.
  • Test both template and fallback paths. Parse failures fall back to the built-in widget lore; verify both look acceptable.
  • Multi-line descriptions should be 2 to 3 short lines. Anything longer wraps awkwardly in list views.
  • Diff after updates. Back up tooltip_templates.conf and the guis/ directory before every Journey upgrade so you can re-merge your customizations.