Configuration
Trois fichiers/dossiers principaux :
plugins/KGInfoServs-QuestsTrack/config.yml— Configuration generale du pluginplugins/KGInfoServs-QuestsTrack/quests_config.yml— Textes, etapes et objectifs des quetesplugins/KGInfoServs-QuestsTrack/lang/<locale>.yml— Fichiers de traduction de l’interface
config.yml — Reference complete
Voici la structure complete du fichier config.yml avec toutes les options disponibles.
Categorie par defaut (defaultCategory)
defaultCategory: "other"
Categorie utilisee pour les quetes qui ne specifient pas questParameters.questCategory dans leur configuration BetonQuest. La valeur doit correspondre a la cle YAML d'une categorie (configKey), pas a son displayName.
Categories du menu (menuItems.categories)
Les categories organisent les quetes dans le menu GUI. Vous pouvez definir jusqu'a 4 categories. Chaque categorie est entierement personnalisable et son displayName peut etre multilingue.
menuItems:
categories:
story: # configKey — utilise pour le matching avec questCategory
displayName: # Format multilingue (recommande)
fr-FR: "Histoire"
en-US: "Story"
material: WRITABLE_BOOK
customModelData: 0
autoTrack: true
secondary:
displayName:
fr-FR: "Secondaires"
en-US: "Secondary"
material: BOOK
customModelData: 0
autoTrack: false
dailyQuests:
displayName:
fr-FR: "Journalieres"
en-US: "Daily"
material: CLOCK
customModelData: 0
autoTrack: false
other:
displayName: "Other" # Format simple — toujours supporte
material: BOOKSHELF
customModelData: 0
autoTrack: false
Proprietes d'une categorie
| Propriete | Obligatoire | Defaut | Description |
|---|---|---|---|
displayName | Non | configKey | Nom affiche dans le menu GUI. Supporte le format simple ou multilingue (voir ci-dessous). |
material | Oui | — | Materiau Minecraft pour l'icone (ex: WRITABLE_BOOK, CLOCK) |
customModelData | Non | 0 | Custom model data pour resource pack |
autoTrack | Non | false | Si true, les quetes de cette categorie sont automatiquement ajoutees au suivi du scoreboard quand elles sont activees |
configKey vs displayName
Le configKey (la cle YAML, ex: story) est l'identifiant stable de la categorie :
- C'est lui que vous utilisez dans
questCategorycote BetonQuest (questCategory: story) - Il sert aussi a indexer les quetes en interne et a identifier la categorie dans le code
Le displayName n'est utilise que pour l'affichage dans le menu GUI. Vous pouvez le changer (ou le traduire) sans casser le matching avec vos packages BetonQuest.
Avant cette version, questCategory devait correspondre au displayName (ex: questCategory: "Story"). Desormais, il doit correspondre au configKey (ex: questCategory: story).
Si vous mettez a jour depuis une ancienne version, vous devez modifier vos package.yml BetonQuest :
questCategory: "Story"→questCategory: storyquestCategory: "Daily"→questCategory: dailyQuestsquestCategory: "Other"→questCategory: other
Sans cette migration, toutes vos quetes basculeront dans la categorie par defaut.
displayName multilingue
Le champ displayName accepte deux formats :
Format simple — une seule langue (ancien format, toujours supporte) :
displayName: "Story"
Format multilingue — un texte par langue :
displayName:
fr-FR: "Histoire"
en-US: "Story"
de-DE: "Geschichte"
La langue affichee est choisie selon le joueur qui ouvre le menu (voir Langue par joueur).
Sous-categories
Chaque categorie peut avoir des sous-categories pour une organisation plus fine :
menuItems:
categories:
dailyQuests:
displayName:
fr-FR: "Journalieres"
en-US: "Daily"
material: CLOCK
customModelData: 0
autoTrack: false
subcategories:
monsters: # configKey de la sous-categorie
displayName:
fr-FR: "Monstres"
en-US: "Monsters"
material: ZOMBIE_HEAD
farming:
displayName:
fr-FR: "Agriculture"
en-US: "Farming"
material: NETHERITE_HOE
mining:
displayName: "Mining" # Format simple aussi accepte
material: NETHERITE_PICKAXE
Pour placer une quete dans une sous-categorie, utilisez le format hierarchique avec un point dans BetonQuest, en utilisant les configKey :
# Dans le package.yml de la quete BetonQuest
questParameters:
questCategory: dailyQuests.monsters
Le format est : configKey_categorie.configKey_souscategorie
Avant cette version, le format etait displayName.displayName (ex: Daily.Monsters). Il faut maintenant utiliser les configKey (ex: dailyQuests.monsters).
Navigation dans le menu
- Le joueur ouvre
/quests - Selectionne la categorie "Daily"
- Voit les sous-categories (Monsters, Farming, Mining)
- Selectionne une sous-categorie
- Voit les quetes de cette sous-categorie
Chaque sous-categorie affiche automatiquement une barre de progression indiquant le pourcentage de quetes terminees.
Boutons du menu
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
| Bouton | Description |
|---|---|
toggleCompleted.visible | Icone quand les quetes terminees sont visibles |
toggleCompleted.hidden | Icone quand les quetes terminees sont masquees |
nextPage | Bouton page suivante |
prevPage | Bouton page precedente |
closeButton | Bouton fermer le menu |
Fichiers de langue (lang/)
Les traductions de l’interface (menus, commandes, scoreboard, messages de suivi, logs console) sont gerees par des fichiers de langue individuels situes dans :
plugins/KGInfoServs-QuestsTrack/lang/<locale>.yml
Locales integrees
Le plugin inclut 5 langues par defaut :
| Fichier | Langue |
|---|---|
lang/fr-FR.yml | Francais |
lang/en-US.yml | Anglais |
lang/de-DE.yml | Allemand |
lang/pt-BR.yml | Portugais (Bresil) |
lang/pl-PL.yml | Polonais |
Selection de la langue
QuestsTracker resout la langue par joueur en s'appuyant sur le systeme natif de BetonQuest.
Langue par joueur
Chaque joueur peut choisir sa propre langue avec la commande BetonQuest /questlang :
/questlang fr-FR
/questlang en-US
/ql de-DE
BetonQuest persiste ce choix dans PlayerData. QuestsTracker lit cette valeur a chaque ouverture de menu, mise a jour de scoreboard ou rafraichissement du journal.
Quand un joueur execute /questlang, le plugin detecte la commande et rafraichit immediatement :
- Le scoreboard du joueur (avec les nouveaux textes traduits)
- Le menu de quetes ouvert (s'il en a un)
Aucune autre action n'est necessaire — tout passe a la nouvelle langue instantanement.
Langue par defaut (fallback)
Si un joueur n'a jamais execute /questlang, le plugin utilise la langue globale du serveur :
# Dans plugins/BetonQuest/config.yml
language: fr-FR
Si le fichier de langue correspondant n'existe pas dans lang/, le plugin utilise le premier fichier disponible.
Champs supportant le multilingue
Les champs suivants supportent automatiquement le format multilingue :
| Fichier | Champ |
|---|---|
config.yml | menuItems.categories.<key>.displayName |
config.yml | menuItems.categories.<key>.subcategories.<key>.displayName |
quests_config.yml | title, locked_description, finished_text |
quests_config.yml | Steps : text, objectifs inprogress / completed |
package.yml (BetonQuest) | questParameters.questReward |
Tous ces champs acceptent soit une string simple, soit une map {lang-code: texte}.
Categories de cles
Chaque fichier de langue contient les categories suivantes :
| Prefixe | Description |
|---|---|
command.* | Messages des commandes (/quests, /kgquests, etc.) |
tracking.* | Messages lies au suivi des quetes (ajout, retrait, limites) |
menu.* | Textes de l’interface GUI (titres, statuts, boutons, format du lore) |
scoreboard.* | Textes du scoreboard (titre, separateur, messages vide/desactive) |
console.* | Messages de demarrage et logs console |
Ajouter une nouvelle langue
- Copiez un fichier existant (par exemple
lang/en-US.yml) - Renommez-le avec le code locale souhaite (par exemple
lang/es-ES.yml) - Traduisez toutes les valeurs dans le fichier
- Dans la configuration de BetonQuest, definissez
language: es-ES - Rechargez le plugin avec
/questsreload
Les cles menu.* supportent le format MiniMessage. Exemples :
<gold>Texte dore</gold><#55C4FF>Couleur hex</#55C4FF><gradient:#800080:#D33D22>Gradient</gradient><b>Gras</b>,<st>Barre</st>,<i>Italique</i>
Scoreboard
Le scoreboard affiche en temps reel les objectifs des quetes suivies par le joueur.
scoreboard:
enabled: true
title: "<gradient:#800080:#D33D22>◈KGInfoServs Quests◈</gradient>"
separator: "<gradient:#800080:#D33D22>--------------</gradient>"
| Propriete | Defaut | Description |
|---|---|---|
enabled | true | Active/desactive le scoreboard globalement pour tous les joueurs. Si false, aucun scoreboard n'est cree. |
title | Gradient violet-rouge | Titre du scoreboard (format MiniMessage) |
separator | Gradient violet-rouge | Separateur entre les quetes dans le scoreboard (format MiniMessage) |
Quand scoreboard.enabled: false, aucune ressource n'est utilisee pour le scoreboard (pas de ticks, pas de paquets reseau, pas de memoire cache). C'est la methode recommandee si vous utilisez un plugin de scoreboard externe comme TAB.
Le scoreboard ne genere aucun tick. Il se met a jour uniquement quand un evenement survient (activation de quete, progression, changement d'etape). Meme active, il n'a quasiment aucun impact sur les performances.
PlaceholderAPI
placeholders:
enabled: true
| Propriete | Defaut | Description |
|---|---|---|
enabled | true | Active/desactive les placeholders %kgquetes_*% |
Desactivez si vous n'utilisez pas PlaceholderAPI pour reduire les appels Redis/BDD.
Placeholders disponibles
Prefixe : %kgquetes_
| Placeholder | Description |
|---|---|
%kgquetes_title% | Titre de la quete actuellement suivie |
%kgquetes_objective_1% | Premiere ligne d'objectif de la quete suivie |
%kgquetes_objective_2% | Deuxieme ligne d'objectif |
%kgquetes_objective_N% | N-ieme ligne d'objectif |
Pool de connexion base de donnees (database)
database:
pool:
maxSize: 30
minIdle: 5
connectionTimeoutMs: 10000
idleTimeoutMs: 300000
| Propriete | Defaut | Description |
|---|---|---|
maxSize | 30 | Nombre maximum de connexions dans le pool HikariCP |
minIdle | 5 | Nombre minimum de connexions inactives maintenues |
connectionTimeoutMs | 10000 | Temps d'attente maximum pour obtenir une connexion (10s) |
idleTimeoutMs | 300000 | Ferme les connexions inactives apres 5 minutes |
- ~100 joueurs : valeurs par defaut (maxSize: 30)
- 500+ joueurs : augmentez
maxSizea 50 - 1000+ joueurs : augmentez
maxSizea 80-100
Mise a jour automatique (updater)
updater:
auto-download: false
| Propriete | Defaut | Description |
|---|---|---|
auto-download | false | Si true, telecharge automatiquement les nouvelles versions dans plugins/update/. Le JAR sera applique au prochain redemarrage du serveur. |
La verification de mise a jour s'effectue automatiquement au demarrage. Si une nouvelle version est disponible, un message s'affiche dans la console et les administrateurs en sont notifies a la connexion.
Vous pouvez aussi forcer la verification avec /kgquests update.
Redis
redis:
enabled: true
host: "127.0.0.1"
port: 6379
password: ""
| Propriete | Defaut | Description |
|---|---|---|
enabled | true | Active/desactive la synchronisation Redis |
host | "127.0.0.1" | Adresse du serveur Redis |
port | 6379 | Port du serveur Redis |
password | "" | Mot de passe Redis (vide si aucun) |
Voir Multi-serveur pour la configuration detaillee.
quests_config.yml — Textes et etapes des quetes
Ce fichier definit le contenu textuel, les etapes et les objectifs de chaque quete affichee dans le menu et le scoreboard.
Support multilingue
Tous les champs texte (title, locked_description, finished_text, textes d'etapes, inprogress/completed des objectifs) supportent deux formats :
Format simple (une seule langue) :
title: "<gold>Le Tresor Perdu</gold>"
Format multilingue (style BetonQuest) :
title:
fr-FR: "<gold>Le Tresor Perdu</gold>"
en-US: "<gold>The Lost Treasure</gold>"
La langue est lue depuis la configuration BetonQuest (language: fr-FR dans config.yml de BetonQuest).
Le fallback est : langue configuree → premiere langue disponible → valeur par defaut.
L'ancien format (texte simple sans cles de langue) reste entierement fonctionnel. Vous pouvez migrer progressivement vos quetes vers le format multilingue.
Structure d'une quete
quests:
ma_quete:
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"
Reference des cles
| Cle | Obligatoire | Description |
|---|---|---|
title | Oui | Titre de la quete (supporte MiniMessage, multilingue) |
locked_description | Non | Texte affiche quand la quete est verrouillee (multilingue) |
finished_text | Non | Texte affiche quand la quete est terminee (multilingue, supporte | pour le multiline) |
steps | Oui | Etapes de la quete avec objectifs |
Format des etapes (steps)
Les etapes sont numerotees a partir de 1. Trois formats sont possibles :
Format simple (liste de textes)
steps:
'1':
- "Parlez au marchand"
- "Achetez une carte"
Format avec section text (multilingue)
steps:
'1':
text:
fr-FR:
- "Parlez au marchand"
- "Achetez une carte"
en-US:
- "Talk to the merchant"
- "Buy a map"
La section text accepte aussi une simple liste (sans cles de langue) :
text:
- "Parlez au marchand"
- "Achetez une carte"
Format avec objectifs trackables
Ce format permet de suivre la progression individuelle de chaque objectif :
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_ma_quete:objective.kill_zombies.amount%/10)"
en-US: "Kill zombies (%betonquest_ma_quete: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_ma_quete:objective.collect_wood.amount%/20)"
en-US: "Collect wood (%betonquest_ma_quete:objective.collect_wood.amount%/20)"
completed:
fr-FR: "Collecter <green>20/20 Bois <white>✔"
en-US: "Collect <green>20/20 Wood <white>✔"
| Propriete | Description |
|---|---|
id | Identifiant de l'objectif (doit correspondre a l'objectif BetonQuest) |
inprogress | Texte affiche quand l'objectif est en cours (multilingue, supporte les placeholders) |
completed | Texte affiche quand l'objectif est complete (multilingue) |
Utilisez les placeholders BetonQuest pour afficher la progression en temps reel :
%betonquest_PACKAGE:objective.ID.amount%— Progression actuelle%betonquest_PACKAGE:objective.ID.absoluteamount%— Total requis%betonquest_PACKAGE:constant.KEY%— Constantes de quete
Exemple : Tuer des zombies (3/10) se met a jour automatiquement.
Exemple complet
quests:
histoire_chapitre1:
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_histoire_chapitre1:objective.kill_dummies.amount%/3)"
en-US: "Beat training dummies (%betonquest_histoire_chapitre1:objective.kill_dummies.amount%/3)"
completed:
fr-FR: "Battre <green>3/3 Mannequins <white>✔"
en-US: "Beat <green>3/3 Dummies <white>✔"
daily_minerai:
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_minerai:objective.mine_iron.amount%/32)"
en-US: "Mine iron (%betonquest_daily_minerai: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_minerai:objective.mine_gold.amount%/16)"
en-US: "Mine gold (%betonquest_daily_minerai:objective.mine_gold.amount%/16)"
completed:
fr-FR: "Miner <green>16/16 Or <white>✔"
en-US: "Mine <green>16/16 Gold <white>✔"
Appliquer les changements
- Modifiez
config.yml,quests_config.ymlou les fichiers danslang/ - Executez
/questsreload - Verifiez en jeu
Voir aussi
- Integration BetonQuest — Configurer les events et tags
- Commandes — Commandes de rechargement
- Multi-serveur — Configuration Redis