9. gui/*.yml — structure commune à tous les menus
Tout menu (gui/main.yml, gui/admin.yml, gui/jobs/miner/main.yml, un
menu custom...) partage exactement la même structure. Cette section documente
toutes les clés possibles ; les sections 11 et 12 montrent les fichiers
réels livrés.
9.1 Squelette
title: "<gradient:#9827F5:#F179B5>Mon menu</gradient>"
rows: 6title: accepte MiniMessage et les placeholders du contexte.rows: de1à6(9 à 54 emplacements). C'est la seule façon de contrôler la taille de l'inventaire — pas de valeur par défaut cachée, tu dois toujours la préciser.
9.2 Conditions et actions d'ouverture
open-conditions:
- "permission advancedjobs.admin"
open-actions:
- "[sound] BLOCK_CHEST_OPEN"open-conditions : si une seule échoue, le menu ne s'ouvre pas (message
gui.no-access). open-actions : exécutées à chaque ouverture réussie,
avant que le menu ne soit affiché.
9.3 Contenu dynamique (content)
content: JOBSRemplit automatiquement les slots de pagination avec une liste générée par le plugin. Valeurs possibles :
content: |
Fournit | Placeholders spécifiques |
|---|---|---|
JOBS |
tous les jobs accessibles au joueur | %job%, %job_display%, %description%, %joined%, %level%, %max_level%, %progress% |
ACTIONS |
toutes les actions du job courant | %action_type%, %target%, %target_name%, %xp%, %money%, %points%, %coins% |
LEVELS |
tous les niveaux du job courant | %level%, %required_xp%, %status% (REACHED/LOCKED), %rewards% |
REWARD_TRAIN |
tous les paliers du Reward Train du job courant | %level%, %status% (LOCKED/AVAILABLE/CLAIMED), %rewards% |
TOP |
le classement du job courant | %position%, %name%, %level%, %total_xp%, %points%, %coins%, %money% |
STATISTICS |
les statistiques du job courant pour le joueur | %statistic%, %statistic_raw%, %amount% |
BOOSTERS |
tous les boosters définis dans boosters/*.yml |
%booster%, %booster_display%, %xp_multiplier%, %money_multiplier%, %points_multiplier%, %duration%, %jobs% |
content-item:
provider: VANILLA
material: STONE
name: "%job_display%"
lore: ["..."]Modèle appliqué à chaque entrée de la liste. Les placeholders spécifiques du tableau ci-dessus sont disponibles ici en plus de tous les placeholders globaux (section 15).
content-item-states:
locked:
material: MINECART
available:
material: CHEST_MINECART
glow: true
claimed:
material: LIME_WOOL
content-item-state-placeholder: status # optionnel, defaut "status"Icône différente selon la valeur d'un placeholder — pas juste une
apparence unique. Chaque clé est comparée (en majuscules) à la valeur
courante du placeholder choisi. C'est ce qui fait qu'un wagon du Reward
Train passe de minecart vide → coffre → laine verte automatiquement (voir
l'exemple complet en section 12). Fonctionne pour n'importe quel
content:, pas seulement REWARD_TRAIN — tu pourrais par exemple donner une
icône différente à un job selon %joined% (true/false).
pagination:
enabled: true
mode: AUTO
item-slots: [10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25]
update-interval: 200item-slots: liste des emplacements où les entrées decontentsont placées. Le nombre d'entrées par page = longueur de cette liste.mode: AUTO: toutes les entrées sont réparties automatiquement sur plusieurs pages virtuelles (un seul fichier, pagination gérée par le plugin).[next-page]/[previous-page]changent juste le numéro de page affiché dans ce même fichier.mode: MANUAL: réservé aux menus sanscontent:— chaque page est un fichier distinct nommé<dossier>/page-<N>.yml, entièrement rédigé à la main.[next-page]/[previous-page]ouvrent alors réellement le fichier suivant. Voir l'exemple complet en section 11.4.update-interval(optionnel) : si présent et > 0, le menu se redessine tout seul toutes les N ticks tant qu'il reste ouvert — utile pour un classement qui se met à jour sans action du joueur. Fonctionne uniquement sur un menu aveccontent:défini.
9.4 Items statiques
items:
mon-item:
slot: 10 # OU slots: [10, 11, 12] pour repeter le meme item
priority: 0 # optionnel, defaut 0 — voir note ci-dessous
provider: VANILLA
material: DIAMOND
name: "..."
lore: ["..."]
animation: reward-train # optionnel
states: { ... } # optionnel, meme format que content-item-states
state-placeholder: status # optionnel, defaut "status"
view-conditions: ["..."]
click-conditions: ["..."]
actions: ["..."] # n'importe quel type de clic
left-actions: ["..."]
right-actions: ["..."]
shift-left-actions: ["..."]
shift-right-actions: ["..."]
middle-actions: ["..."]
drop-actions: ["..."]
deny-actions: ["..."] # executees si click-conditions echoueview-conditions: si une seule échoue, l'item n'apparaît pas du tout dans le menu.click-conditions: si une seule échoue au moment du clic,deny-actionss'exécute à la place des actions normales (utile pour un son d'erreur).priority: détermine l'ordre de dessin quand deux items partagent le même slot (ex. unfilleren fond et un bouton par-dessus). Les items de priorité plus élevée sont dessinés après et recouvrent ceux de priorité plus basse. Convention utilisée partout dans les fichiers livrés : le fond (filler) apriority: -100, les vrais boutons restent à0(valeur par défaut) et s'affichent donc par-dessus.content-item(comme nom de clé dansitems:) : cas spécial, sert uniquement à déclarer lesactions/animation/statesdu modèle défini parcontent-item:au niveau racine (pas besoin deslot, il est fourni par la pagination).