Patterns
Les patterns sont des modeles de boutons reutilisables qui peuvent etre appliques a plusieurs inventaires. Ils aident a reduire la duplication et a maintenir la coherence dans vos menus.
Emplacement des fichiers
Les patterns sont stockes dans plugins/zMenu/patterns/.
Structure de base d'un pattern
# patterns/mon_pattern.yml
name: "mon_pattern"
size: 54
items:
bordure-haut:
slots:
- 0-8
item:
material: BLACK_STAINED_GLASS_PANE
name: "&8"
bordure-bas:
slots:
- 45-53
item:
material: BLACK_STAINED_GLASS_PANE
name: "&8"
Utiliser les patterns dans les inventaires
Referencez les patterns dans votre fichier d'inventaire :
# inventories/shop.yml
name: "&6Boutique"
size: 54
patterns:
- "mon_pattern"
items:
# Vos items specifiques a l'inventaire...
Variables de pattern
Les patterns peuvent utiliser des variables qui sont remplacees lors de l'application :
Definir des slots variables
# patterns/template.yml
name: "template"
size: 54
items:
bouton-dynamique:
slot: "%slot%"
item:
material: "%material%"
name: "%name%"
lore:
- "%description%"
Utiliser les variables dans l'inventaire
# inventories/mon_menu.yml
patterns:
- pattern:
file-name: "template"
slot: 13
material: "DIAMOND"
name: "&b&lMon Item"
description: "&7Ceci est mon item personnalise"
Exemples
Pattern de barre de navigation
# patterns/navigation.yml
name: "navigation"
size: 54
items:
nav-retour:
type: BACK
slot: 45
is-permanent: true
item:
material: ARROW
name: "&c&l← Retour"
sound: UI_BUTTON_CLICK
nav-precedent:
type: PREVIOUS
slot: 48
is-permanent: true
item:
material: ARROW
name: "&7Precedent"
sound: UI_BUTTON_CLICK
nav-page:
slot: 49
is-permanent: true
item:
material: PAPER
name: "&e&lPage %page%/%max-page%"
nav-suivant:
type: NEXT
slot: 50
is-permanent: true
item:
material: ARROW
name: "&7Suivant"
sound: UI_BUTTON_CLICK
nav-fermer:
slot: 53
is-permanent: true
close-inventory: true
item:
material: BARRIER
name: "&c&lFermer"
sound: UI_BUTTON_CLICK
Utilisation :
# inventories/shop.yml
name: "&6Boutique"
size: 54
patterns:
- "navigation"
Pattern de bordure
# patterns/bordure.yml
name: "bordure"
size: 54
items:
bordure:
slots:
- 0-8
- 9
- 17
- 18
- 26
- 27
- 35
- 36
- 44
- 45-53
item:
material: GRAY_STAINED_GLASS_PANE
name: "&8"
Bordure en verre avec variable de couleur
# patterns/bordure_coloree.yml
name: "bordure_coloree"
size: 54
items:
bordure:
slots:
- 0-8
- 45-53
item:
material: "%color%_STAINED_GLASS_PANE"
name: "&8"
Utilisation :
patterns:
- pattern:
file-name: "bordure_coloree"
color: "BLUE"
Pattern de recompense
# patterns/bouton_recompense.yml
name: "bouton_recompense"
size: 54
items:
recompense:
slot: "%slot%"
item:
material: "%material%"
name: "%name%"
lore:
- "&7Cliquez pour reclamer !"
- ""
- "&7Recompense : &a%reward_desc%"
click-requirement:
requirements:
- type: placeholder
value: "%zmenu_player_value_%key%_claimed%"
action: DIFFERENT
target: "true"
deny:
- type: message
messages:
- "&cVous avez deja reclame cette recompense !"
success:
- type: data
action: SET
key: "%key%_claimed"
value: "true"
- type: console-command
commands:
- "%reward_command%"
- type: message
messages:
- "&aRecompense reclamee !"
- type: sound
sound: ENTITY_PLAYER_LEVELUP
- type: refresh
Utilisation :
patterns:
- pattern:
file-name: "bouton_recompense"
slot: 11
material: "DIAMOND"
name: "&b&lRecompense Diamant"
reward_desc: "5 Diamants"
key: "diamond_reward"
reward_command: "give %player% diamond 5"
- pattern:
file-name: "bouton_recompense"
slot: 13
material: "GOLD_INGOT"
name: "&6&lRecompense Or"
reward_desc: "32 Lingots d'or"
key: "gold_reward"
reward_command: "give %player% gold_ingot 32"
- pattern:
file-name: "bouton_recompense"
slot: 15
material: "EMERALD"
name: "&a&lRecompense Emeraude"
reward_desc: "16 Emeraudes"
key: "emerald_reward"
reward_command: "give %player% emerald 16"
Patterns multiples
Appliquez plusieurs patterns a un inventaire :
name: "&6Mon Menu"
size: 54
patterns:
- "bordure"
- "navigation"
- pattern:
file-name: "header"
title: "Bienvenue !"
Les patterns sont appliques dans l'ordre, donc les patterns ulterieurs peuvent remplacer les precedents.
Patterns d'actions
Actions par defaut qui s'appliquent a tous les boutons (sauf s'ils definissent les leurs) :
# actions_patterns/default-actions.yml
actions:
- type: sound
sound: UI_BUTTON_CLICK
deny-actions:
- type: sound
sound: ENTITY_VILLAGER_NO
Ces actions s'appliquent automatiquement a :
actions: Quand un bouton est clique avec succesdeny-actions: Quand une exigence est refusee
Pattern d'un autre plugin
Referencez des patterns d'autres plugins :
patterns:
- pattern:
file-name: "nom_pattern"
plugin-name: "AutrePlugin"
Bonnes pratiques
- Creez des patterns pour les elements repetes : Barres de navigation, bordures, boutons communs
- Utilisez des noms descriptifs :
navigation,shop_border,reward_template - Gardez les patterns cibles : Un pattern, un objectif
- Utilisez les variables : Rendez les patterns flexibles et reutilisables
- Documentez les patterns : Ajoutez des commentaires expliquant les variables necessaires
- Testez individuellement : Testez les patterns avant de les utiliser en production
Structure des patterns
plugins/zMenu/patterns/
├── navigation.yml # Barre de navigation
├── bordures/
│ ├── simple.yml # Bordure simple
│ ├── fancy.yml # Bordure decoree
│ └── coloree.yml # Bordure a couleur variable
└── boutons/
├── recompense.yml # Modele de bouton recompense
└── toggle.yml # Modele de bouton bascule
Synchronisation depuis l'Inventory Builder
Les patterns de bouton geres dans l'Inventory Builder peuvent etre telecharges au format YAML ou
appliques directement sur un serveur lie. Le serveur les enregistre dans
plugins/<plugin-name>/patterns/<file-name>.yml, verifie le hash telecharge, puis recharge le pattern a
chaud.
Lorsqu'un inventaire utilise des patterns de bouton geres, la confirmation de synchronisation permet aussi d'installer ces dependances avant de telecharger et recharger l'inventaire. Cela evite de recharger un inventaire alors qu'un de ses fichiers de pattern est absent ou obsolete.
Seule la derniere revision sauvegardee est synchronisee. Le serveur doit d'abord etre lie au site avec les commandes website de zMenu.
Recharger les patterns manuellement
/zm reload
Les patterns sont charges au demarrage du plugin et lors du rechargement.
Prochaines etapes
- Apprenez les Donnees joueur pour le stockage persistant
- Voir les Actions pour les interactions de boutons
- Configurez les Commandes personnalisees pour ouvrir les inventaires