Skip to main content

Configuration

Three configuration areas:

  • plugins/kginfoservs_queststrack/config.yml -- General plugin configuration
  • plugins/kginfoservs_queststrack/quests_config.yml -- Quest texts, steps, and objectives
  • plugins/kginfoservs_queststrack/lang/<locale>.yml -- UI translations (menu, commands, scoreboard, console messages)

config.yml -- Complete reference

Here is the complete structure of the config.yml file with all available options.

Default category (defaultCategory)

defaultCategory: "other"

Category used for quests that do not specify questParameters.questCategory in their BetonQuest configuration. The value must match the configuration key of a category (not the displayName).

Categories organize quests in the GUI menu. You can define up to 4 categories. Each category is fully customizable.

menuItems:
categories:
story:
displayName: "Story"
material: WRITABLE_BOOK
customModelData: 0
autoTrack: true
secondary:
displayName: "Secondary"
material: BOOK
customModelData: 0
autoTrack: false
dailyQuests:
displayName: "Daily"
material: CLOCK
customModelData: 0
autoTrack: false
other:
displayName: "Other"
material: BOOKSHELF
customModelData: 0
autoTrack: false

Category properties

PropertyRequiredDefaultDescription
displayNameNoConfiguration keyName displayed in the GUI menu. This is the value you use in questCategory in BetonQuest.
materialYes--Minecraft material for the icon (e.g., WRITABLE_BOOK, CLOCK)
customModelDataNo0Custom model data for resource packs
autoTrackNofalseIf true, quests in this category are automatically added to the scoreboard tracking when activated
displayName and questCategory

The value of questCategory in BetonQuest must match exactly the displayName of the category (case-sensitive and accent-sensitive).

Example: if your category has displayName: "Daily", your quests must have questCategory: "Daily" (not "daily" or "DAILY").

If no displayName is defined, the configuration key is used (e.g., dailyQuests).

Subcategories

Each category can have subcategories for finer organization:

menuItems:
categories:
dailyQuests:
displayName: "Daily"
material: CLOCK
customModelData: 0
autoTrack: false
subcategories:
monsters:
displayName: "Monsters"
material: ZOMBIE_HEAD
farming:
displayName: "Farming"
material: NETHERITE_HOE
mining:
displayName: "Mining"
material: NETHERITE_PICKAXE

To place a quest in a subcategory, use the hierarchical format with a dot in BetonQuest:

# In the BetonQuest quest package.yml
questParameters:
questCategory: "Daily.Monsters"

The format is: category_displayName.subcategory_displayName

  1. The player opens /quests
  2. Selects the "Daily" category
  3. Sees the subcategories (Monsters, Farming, Mining)
  4. Selects a subcategory
  5. Sees the quests in that subcategory

Each subcategory automatically displays a progress bar indicating the percentage of completed quests.

menuItems:
toggleCompleted:
visible:
material: LIME_DYE
customModelData: 0
hidden:
material: GRAY_DYE
customModelData: 0
nextPage:
material: PAPER
customModelData: 0
prevPage:
material: PAPER
customModelData: 0
closeButton:
material: BARRIER
customModelData: 0
ButtonDescription
toggleCompleted.visibleIcon when completed quests are visible
toggleCompleted.hiddenIcon when completed quests are hidden
nextPageNext page button
prevPagePrevious page button
closeButtonClose menu button

Language files (lang/)

All UI translations (menu labels, command messages, scoreboard text, console output) are stored in per-locale YAML files under plugins/kginfoservs_queststrack/lang/.

The active language is determined by the language setting in your BetonQuest config.yml (server-wide).

Built-in locales

The plugin ships with 5 built-in locale files, generated automatically on first startup:

FileLanguage
lang/fr-FR.ymlFrench
lang/en-US.ymlEnglish
lang/de-DE.ymlGerman
lang/pt-BR.ymlBrazilian Portuguese
lang/pl-PL.ymlPolish

Key categories

Each lang file is organized into the following sections:

PrefixDescription
command.*Messages displayed by plugin commands (/quests, /kgquests, etc.)
tracking.*Tracking-related messages (auto-track, manual track/untrack)
menu.*All GUI menu labels: header, quest statuses, buttons, lore format
scoreboard.*Scoreboard title, separator, and fallback text
console.*Console/log messages (startup, reload, errors)

Example excerpt (en-US.yml)

command:
reload_success: "Configuration reloaded successfully."
no_permission: "You do not have permission to use this command."

tracking:
auto_track: "Now tracking: {quest}"
untrack: "Stopped tracking: {quest}"

menu:
header: "Quests"
header_other: "Quests - {player}"
quest_active: "Active"
quest_finished: "Finished"
quest_locked: "Locked"
completed_quests_visible: "Completed Quests: Visible"
completed_quests_hidden: "Completed Quests: Hidden"
close_button: "Close"
rewards_title: "Rewards:"
lore_format:
objective_prefix: "<#55C4FF>> </#55C4FF><gray>"
separator: "<dark_gray><st> </st></dark_gray>"
reward_prefix: "<green>+</green> <white>"
status_prefix: "<gray>Status: </gray>"

scoreboard:
title: "<gradient:#800080:#D33D22>Quest Tracker</gradient>"
separator: "<gradient:#800080:#D33D22>--------------</gradient>"

console:
plugin_enabled: "QuestsTracker enabled."
MiniMessage format

All values under menu.* support MiniMessage format. Examples:

  • <gold>Gold text</gold>
  • <#55C4FF>Hex color</#55C4FF>
  • <gradient:#800080:#D33D22>Gradient</gradient>
  • <b>Bold</b>, <st>Strikethrough</st>, <i>Italic</i>

Adding a new language

  1. Copy an existing file, e.g. lang/en-US.yml, and rename it to your locale code (e.g. lang/es-ES.yml).
  2. Translate every value in the file.
  3. Set language: es-ES in your BetonQuest config.yml.
  4. Run /questsreload to apply.

The plugin will automatically pick up any .yml file in the lang/ folder whose name matches the configured BetonQuest language.

Scoreboard

The scoreboard displays in real time the objectives of the quests tracked by the player.

scoreboard:
enabled: true
title: "<gradient:#800080:#D33D22>◈KGInfoServs Quests◈</gradient>"
separator: "<gradient:#800080:#D33D22>--------------</gradient>"
PropertyDefaultDescription
enabledtrueEnables/disables the scoreboard globally for all players. If false, no scoreboard is created.
titlePurple-red gradientScoreboard title (MiniMessage format)
separatorPurple-red gradientSeparator between quests in the scoreboard (MiniMessage format)
Performance

When scoreboard.enabled: false, no resources are used for the scoreboard (no ticks, no network packets, no cache memory). This is the recommended approach if you use an external scoreboard plugin like TAB.

Event-driven scoreboard

The scoreboard generates no ticks. It only updates when an event occurs (quest activation, progression, step change). Even when enabled, it has virtually no impact on performance.

PlaceholderAPI

placeholders:
enabled: true
PropertyDefaultDescription
enabledtrueEnables/disables %kgquetes_*% placeholders

Disable if you are not using PlaceholderAPI to reduce Redis/DB calls.

Available placeholders

Prefix: %kgquetes_

PlaceholderDescription
%kgquetes_title%Title of the currently tracked quest
%kgquetes_objective_1%First objective line of the tracked quest
%kgquetes_objective_2%Second objective line
%kgquetes_objective_N%Nth objective line

Database connection pool (database)

database:
pool:
maxSize: 30
minIdle: 5
connectionTimeoutMs: 10000
idleTimeoutMs: 300000
PropertyDefaultDescription
maxSize30Maximum number of connections in the pool
minIdle5Minimum number of idle connections maintained
connectionTimeoutMs10000Maximum time (ms) to wait for a connection from the pool
idleTimeoutMs300000Maximum time (ms) a connection can remain idle before being closed
Sizing based on player count
  • ~100 players: default values (maxSize: 30)
  • 500+ players: increase maxSize to 50
  • 1000+ players: increase maxSize to 80-100

Automatic updates (updater)

updater:
auto-download: false
PropertyDefaultDescription
auto-downloadfalseIf true, automatically downloads new versions to plugins/update/. The JAR will be applied on the next server restart.

The update check is performed automatically at startup. If a new version is available, a message is displayed in the console and administrators are notified upon login.

You can also force a check with /kgquests update.

Redis

redis:
enabled: true
host: "127.0.0.1"
port: 6379
password: ""
PropertyDefaultDescription
enabledtrueEnables/disables Redis synchronization
host"127.0.0.1"Redis server address
port6379Redis server port
password""Redis password (empty if none)

See Multi-server for detailed configuration.


quests_config.yml -- Quest texts and steps

This file defines the text content, steps, and objectives for each quest displayed in the menu and scoreboard.

Multilingual support

All text fields (title, locked_description, finished_text, step texts, inprogress/completed for objectives) support two formats:

Simple format (single language):

title: "<gold>The Lost Treasure</gold>"

Multilingual format (BetonQuest style):

title:
fr-FR: "<gold>Le Tresor Perdu</gold>"
en-US: "<gold>The Lost Treasure</gold>"

The language is read from the BetonQuest configuration (language: en-US in BetonQuest's config.yml). The fallback order is: configured language -> first available language -> raw default value.

Backward compatibility

The legacy format (plain text without locale keys) remains fully functional. You can migrate your quests to the multilingual format progressively.

Quest structure

quests:
my_quest:
title:
fr-FR: "<gold>Le Tresor Perdu</gold>"
en-US: "<gold>The Lost Treasure</gold>"
locked_description:
fr-FR: "Trouvez l'indice pour debloquer cette quete."
en-US: "Find the clue to unlock this quest."
finished_text:
fr-FR: "Felicitations ! Vous avez trouve le tresor !"
en-US: "Congratulations! You found the treasure!"
steps:
'1':
text:
fr-FR:
- "Parlez au marchand du village"
- "Achetez une carte au tresor"
en-US:
- "Talk to the village merchant"
- "Buy a treasure map"
'2':
text:
fr-FR:
- "Suivez la carte jusqu'a la foret"
- "Trouvez l'entree de la grotte"
en-US:
- "Follow the map to the forest"
- "Find the cave entrance"

Key reference

KeyRequiredDescription
titleYesQuest title (supports MiniMessage, multilingual)
locked_descriptionNoText displayed when the quest is locked (multilingual)
finished_textNoText displayed when the quest is completed (multilingual, supports | for multiline)
stepsYesQuest steps with objectives

Step format (steps)

Steps are numbered starting from 1. Three formats are available:

Simple format (text list)

steps:
'1':
- "Talk to the merchant"
- "Buy a map"

Format with text section (multilingual)

steps:
'1':
text:
fr-FR:
- "Parlez au marchand"
- "Achetez une carte"
en-US:
- "Talk to the merchant"
- "Buy a map"
Simple text format

The text section also accepts a plain list (without locale keys):

text:
- "Talk to the merchant"
- "Buy a map"

Format with trackable objectives

This format allows tracking individual progress for each objective:

steps:
'1':
text:
fr-FR:
- "Parlez au marchand"
en-US:
- "Talk to the merchant"
objectives:
- id: "kill_zombies"
inprogress:
fr-FR: "Tuer des zombies (%betonquest_my_quest:objective.kill_zombies.amount%/10)"
en-US: "Kill zombies (%betonquest_my_quest:objective.kill_zombies.amount%/10)"
completed:
fr-FR: "Tuer <green>10/10 Zombies <white>✔"
en-US: "Kill <green>10/10 Zombies <white>✔"
- id: "collect_wood"
inprogress:
fr-FR: "Collecter du bois (%betonquest_my_quest:objective.collect_wood.amount%/20)"
en-US: "Collect wood (%betonquest_my_quest:objective.collect_wood.amount%/20)"
completed:
fr-FR: "Collecter <green>20/20 Bois <white>✔"
en-US: "Collect <green>20/20 Wood <white>✔"
PropertyDescription
idObjective identifier (must match the BetonQuest objective)
inprogressText displayed when the objective is in progress (multilingual, supports BetonQuest placeholders)
completedText displayed when the objective is completed (multilingual)
BetonQuest placeholders in objectives

Use BetonQuest placeholders to display real-time progress:

  • %betonquest_PACKAGE:objective.ID.amount% -- Current progress
  • %betonquest_PACKAGE:objective.ID.absoluteamount% -- Total required
  • %betonquest_PACKAGE:constant.KEY% -- Quest constants

Example: Kill zombies (3/10) updates automatically.

Complete example

quests:
story_chapter1:
title:
fr-FR: "<gold>Le Reveil du Heros</gold>"
en-US: "<gold>The Hero's Awakening</gold>"
locked_description:
fr-FR: "Commencez votre aventure en parlant au guide."
en-US: "Start your adventure by talking to the guide."
finished_text:
fr-FR: |
Vous avez fait vos premiers pas !
Continuez votre aventure.
en-US: |
You took your first steps!
Continue your adventure.
steps:
'1':
text:
fr-FR:
- "Parlez au guide du village"
- "Acceptez la quete"
en-US:
- "Talk to the village guide"
- "Accept the quest"
'2':
text:
fr-FR:
- "Visitez la forge"
en-US:
- "Visit the forge"
objectives:
- id: "visit_forge"
inprogress:
fr-FR: "Se rendre a la forge"
en-US: "Go to the forge"
completed:
fr-FR: "<green>- Forge visitee <white>✔"
en-US: "<green>- Forge visited <white>✔"
- id: "get_sword"
inprogress:
fr-FR: "Obtenir une epee"
en-US: "Get a sword"
completed:
fr-FR: "<green>- Epee obtenue <white>✔"
en-US: "<green>- Sword obtained <white>✔"
'3':
objectives:
- id: "kill_dummies"
inprogress:
fr-FR: "Battre des mannequins (%betonquest_story_chapter1:objective.kill_dummies.amount%/3)"
en-US: "Beat training dummies (%betonquest_story_chapter1:objective.kill_dummies.amount%/3)"
completed:
fr-FR: "Beat <green>3/3 Dummies <white>✔"
en-US: "Beat <green>3/3 Dummies <white>✔"

daily_mining:
title:
fr-FR: "<aqua>Collecte Quotidienne</aqua>"
en-US: "<aqua>Daily Collection</aqua>"
locked_description:
fr-FR: "Disponible chaque jour."
en-US: "Available every day."
finished_text:
fr-FR: "Beau travail, mineur !"
en-US: "Good work, miner!"
steps:
'1':
objectives:
- id: "mine_iron"
inprogress:
fr-FR: "Miner du fer (%betonquest_daily_mining:objective.mine_iron.amount%/32)"
en-US: "Mine iron (%betonquest_daily_mining:objective.mine_iron.amount%/32)"
completed:
fr-FR: "Miner <green>32/32 Fer <white>✔"
en-US: "Mine <green>32/32 Iron <white>✔"
- id: "mine_gold"
inprogress:
fr-FR: "Miner de l'or (%betonquest_daily_mining:objective.mine_gold.amount%/16)"
en-US: "Mine gold (%betonquest_daily_mining:objective.mine_gold.amount%/16)"
completed:
fr-FR: "Miner <green>16/16 Or <white>✔"
en-US: "Mine <green>16/16 Gold <white>✔"

Applying changes

  1. Edit config.yml, quests_config.yml, or any lang/*.yml file
  2. Run /questsreload
  3. Verify in-game

See also