How It Works

QuestLineTitles maintains two stores: a server-wide title catalogue (titles.json) that defines every available title, and per-player title data that records which titles each player has unlocked and which one is currently active.

Titles are awarded through QuestLines actions (giveTitle:), admin commands (/titleadmin grant), or directly via the developer API. Once a player owns at least one title they can open /title to browse their collection and set an active title. The active title is then exposed to chat plugins and PlaceholderAPI.

Standalone or with QuestLines Core

QuestLineTitles works as a standalone plugin. The QuestLines integration (actions, requirements, and the {title} variable) is automatically enabled when QuestLines Core is also installed on the server.

titles.json

All available titles are defined in mods/QuestLineTitles/titles.json. The file is created with a set of defaults on first start and can be edited directly or updated via /titleadmin. Reload with /titleadmin reload to pick up file changes without restarting.

Each entry is keyed by a unique title ID (convention: category:name) and carries a category string and a value display string. The display string supports rich formatting — see Title Formatting below.

{
  "misc:newcomer": {
    "category": "misc",
    "value":    "&3Newcomer"
  },
  "misc:king": {
    "category": "misc",
    "value":    "{#FFAA00}{b}King{/}{/}"
  },
  "pvp:champion": {
    "category": "pvp",
    "value":    "<gradient:#FF4444:#FFAA00>Champion</gradient>"
  },
  "builder:artisan": {
    "category": "builder",
    "value":    "<rainbow>Artisan</rainbow>"
  }
}
Field Required Description
category No (defaults to misc) Groups related titles together in the selection UI. Can be any string.
value No (defaults to the ID) The display text shown in chat, the UI, and placeholders. Supports rich formatting tags.

Title Formatting

Title values support three overlapping formatting syntaxes. All three are parsed by the same formatter and can be mixed freely in a single value string.

Brace Tags

Tag Effect
{b}text{/}Bold
{i}text{/}Italic
{u}text{/}Underline
{m}text{/}Monospace
{#RRGGBB}text{/}Hex color (3- or 6-digit)
{link:URL}text{/}Clickable link
{/}Closes the innermost open tag

XML-style Tags

Tag Effect
<b>text</b> or <bold>Bold
<i>text</i> or <italic>Italic
<u>text</u> or <underlined>Underline
<m>text</m> or <monospace>Monospace
<#RRGGBB>text</#RRGGBB>Hex color
<gold>text</gold>Named color (Minecraft palette: gold, red, aqua, green, etc.)
<rainbow>text</rainbow>Per-character rainbow colors
<gradient:#FF0000:#0000FF>text</gradient>Color gradient (2+ stops)
<url:https://...>text</url>Clickable link

&-Codes

Standard Minecraft &X codes are supported. A color code resets all active formatting before applying the new color.

Code Effect
&0&9, &a&fMinecraft color palette
&lBold
&oItalic
&rReset all formatting
// &-code color + bold
"&6&lLegend"

// Brace-tag hex color with bold
"{#FFAA00}{b}King{/}{/}"

// XML gradient
"<gradient:#FF4444:#FFAA00>Champion</gradient>"

// Tags can nest freely
"{b}{#FF55FF}Grand{/} Explorer{/}"

Commands

Player Commands

Command Permission Description
/title none Opens the title selection UI. Players can browse their unlocked titles and set one as active.

Admin Commands

All /titleadmin subcommands require the questlinetitles.titleadmin permission.

Command Description
/titleadmin grant <username> <titleId> Unlock a title for a player. No-op if they already own it.
/titleadmin remove <username> <titleId> Revoke a title from a player. Also clears active title if it was the removed one.
/titleadmin list <username> List all titles a player has unlocked.
/titleadmin available List all titles defined in titles.json.
/titleadmin ui <username> Open the admin title management UI, optionally viewing a specific player’s data.

QuestLines Integration

When QuestLines Core is installed alongside QuestLineTitles, the following actions, requirements, and text variables are automatically registered with the QuestLines engine.

Auto-detected at startup

No extra configuration is needed. QuestLineTitles detects QuestLines Core at runtime and registers the integration automatically. A log line confirms: [Titles] QuestLines detected – registering requirements, actions & variables.

Actions

Action Description
giveTitle:<titleId> Unlock the specified title for the player. No-op if already owned.
removeTitle:<titleId> Revoke the specified title from the player. Also clears active title if it matches.

Requirements

Requirement Passes when…
hasTitle:<titleId> The player has unlocked the specified title (whether or not it is active).
titleActive:<titleId> The player’s currently active title is the specified title.

Text Variable

Variable Replaced with…
{title} The player’s active title as plain text (all formatting stripped). Empty string if no title is active.
// Quest response action: award a title on quest completion
"Actions": [
  "questCompleted:dragon_slayer",
  "giveTitle:pvp:dragonslayer",
  "message:You earned the title: {title}!"
]

// Requirement: only show page if player has the title
"Requirements": [ "hasTitle:pvp:dragonslayer" ]

Integrations

VaultUnlocked

When VaultUnlocked is installed, QuestLineTitles registers as a ChatUnlocked provider. Chat plugins that consume VaultUnlocked’s chat API will automatically receive the player’s active title as a chat prefix. No additional configuration is required.

PlaceholderAPI

When PlaceholderAPI is installed, QuestLineTitles registers the title expansion. Use %title% in any PlaceholderAPI-aware plugin (e.g. a chat formatter) to insert the player’s active title. The returned value has {…} formatting tags stripped but retains &-codes and §-codes for downstream color-code processing.

File Layout

File Purpose
mods/QuestLineTitles/titles.json Server-wide title catalogue. Edit to add, rename, or remove titles.
mods/QuestLineTitles/playerdata/<username>.json Per-player title state: unlocked titles, timestamps, and active title.

Permissions

Permission Default Description
questlinetitles.titleadmin false Required for all /titleadmin subcommands.