Aller au contenu principal

Dialogues

Les dialogues sont des fenetres popup interactives qui apparaissent a l'ecran, permettant aux joueurs d'interagir avec des formulaires, des confirmations et des boutons d'action. Ils offrent une experience d'interface moderne allant au-dela des menus d'inventaire traditionnels.

Prerequis

Les dialogues necessitent Paper 1.21.7+.

Emplacement des fichiers​

Les dialogues sont stockes dans le dossier plugins/zMenu/dialogs/. Chaque fichier YAML represente un dialogue.

plugins/zMenu/dialogs/
├── welcome.yml
├── confirmation.yml
├── server-links.yml
└── feedback-form.yml

Types de dialogues​

zMenu supporte quatre types de dialogues :

TypeDescription
noticeDialogue informatif simple avec un corps et des saisies optionnelles
confirmationDialogue de confirmation Oui/Non
multi_actionPlusieurs boutons d'action disposes en grille
server_linksAffiche les liens du serveur sous forme de boutons cliquables

Structure de base​

name: "&6&lDialog Title"
external_title: "Window Title"
type: notice

can-close-with-escape: true
pause: false
after_action: CLOSE

body:
# Sections du contenu du corps...

inputs:
# Champs de saisie...

Options de configuration​

name​

Le nom interne du dialogue, affiche avec la mise en forme des couleurs.

name: "&6&lWelcome Dialog"

external_title​

Le titre de la fenetre affiche dans l'en-tete du dialogue.

external_title: "Server Information"

type​

Le type de dialogue. Voir Types de dialogues pour plus de details.

type: notice

can-close-with-escape​

Permet aux joueurs de fermer le dialogue en appuyant sur Echap.

can-close-with-escape: true

pause​

Met le jeu en pause pendant que le dialogue est ouvert (comportement de type solo).

pause: false

after_action​

Ce qui se passe apres qu'une action est effectuee.

ValeurDescription
CLOSEFerme le dialogue
PAUSEGarde le dialogue ouvert
NONENe fait rien
after_action: CLOSE

Contenu du corps​

La section body definit le contenu qui apparait dans le dialogue. Vous pouvez combiner plusieurs types de contenu.

plain_message​

Affiche des messages texte.

body:
welcome:
type: plain_message
messages:
- "&6&lWelcome to our server!"
- ""
- "&7Server IP: &fplay.example.com"
- "&7Discord: &fdiscord.gg/example"
width: 400

item​

Affiche un item avec une infobulle optionnelle.

body:
featured-item:
type: item
item:
material: DIAMOND_SWORD
name: "&b&lLegendary Sword"
lore:
- "&7A powerful weapon"
show-decoration: true
show-tooltip: true
width: 200
height: 150

Champs de saisie​

Les dialogues peuvent inclure des champs de saisie interactifs dans la section inputs.

dialog_text​

Un champ de saisie de texte.

inputs:
feedback:
type: dialog_text
label: "&6Share your thoughts:"
width: 400
max-length: 200
multiline:
max-lines: 4

Options :

OptionTypeDescription
labelStringLabel affiche au-dessus de la saisie
widthIntegerLargeur du champ de saisie
max-lengthIntegerNombre maximum de caracteres
multiline.max-linesIntegerNombre de lignes pour la saisie multiligne

dialog_boolean​

Un interrupteur Oui/Non.

inputs:
subscribe:
type: dialog_boolean
label: "&eWould you like updates?"
text-true: "&a&lYES"
text-false: "&c&lNo"

dialog_single_option​

Une selection unique parmi plusieurs options.

inputs:
gamemode:
type: dialog_single_option
label: "&6Select your gamemode:"
options:
survival:
id: "survival"
display: "&2Survival"
creative:
id: "creative"
display: "&bCreative"
adventure:
id: "adventure"
display: "&6Adventure"

dialog_number_range​

Un curseur numerique.

inputs:
amount:
type: dialog_number_range
label: "&eSelect amount:"
start: 1
end: 64
step: 1

Boutons dynamiques​

Les boutons dynamiques generent plusieurs sections de corps ou saisies a partir d'un seul modele, repete sur une plage numerique. Ils sont utiles lorsque le nombre d'elements depend de donnees (un placeholder) ou lorsque vous devriez autrement copier/coller le meme bloc de nombreuses fois.

Les deux types dynamiques partagent ces options :

OptionTypeDescription
startIntegerPremier index, inclus. Compatible placeholders.
endIntegerDernier index, inclus. Compatible placeholders.

A l'interieur du modele repete, le placeholder %index% est remplace par le numero de l'iteration en cours.

dialog-dynamic-body-button​

Place dans la section body:. Repete un element body: (par ex. dialog_plain_message, dialog_item).

body:
dynamic_message:
type: dialog-dynamic-body-button
start: 1
end: 5
body:
type: dialog_plain_message
messages:
- "&eThis is body section #%index%"
width: 300

dialog-dynamic-input-button​

Place dans la section inputs:. Repete un element input: (par ex. dialog_text, dialog_boolean). Chaque saisie generee a pour cle <button-name>_<index>, de sorte que sa valeur soumise est disponible via le placeholder %<button-name>_<index>%.

inputs:
# Si le joueur tape "Hello" dans le premier champ, %my_input_1% vaudra "Hello"
my_input:
type: dialog-dynamic-input-button
start: 1
end: 3
input:
type: dialog_text
label: "&6Enter value #%index%:"
width: 300
max-length: 50

Consultez le fichier dialogs/dynamic-dialog-example.yml fourni pour un exemple complet.


Dialogue Notice​

Un dialogue informatif simple avec des saisies optionnelles.

name: "&6&lServer Rules"
external_title: "Rules"
type: notice

can-close-with-escape: true
after_action: CLOSE

body:
rules:
type: plain_message
messages:
- "&c&lServer Rules"
- ""
- "&71. Be respectful to all players"
- "&72. No cheating or exploits"
- "&73. Follow staff instructions"
- "&74. Have fun!"
width: 350

inputs:
accept:
type: dialog_boolean
label: "&eI agree to the rules"
text-true: "&a&lAccept"
text-false: "&c&lDecline"

Dialogue Confirmation​

Un dialogue avec des boutons Oui et Non.

name: "&c&lConfirm Purchase"
external_title: "Confirmation"
type: confirmation

can-close-with-escape: true
after_action: CLOSE

body:
message:
type: plain_message
messages:
- "&7Are you sure you want to purchase"
- "&6Diamond Sword &7for &a$500&7?"
width: 300

confirmation:
yes-text: "&a&lConfirm Purchase"
yes-tooltip: "Click to confirm"
yes-width: 200
no-text: "&c&lCancel"
no-tooltip: "Click to cancel"
no-width: 200

yes-actions:
1:
success:
- type: console-command
commands:
- "give %player% diamond_sword 1"
- type: currency-withdraw
amount: 500
- type: message
messages:
- "&aPurchase successful!"

no-actions:
1:
success:
- type: message
messages:
- "&7Purchase cancelled."

Options de confirmation​

OptionDescription
yes-textTexte du bouton Oui
yes-tooltipInfobulle au survol du bouton Oui
yes-widthLargeur du bouton Oui
no-textTexte du bouton Non
no-tooltipInfobulle au survol du bouton Non
no-widthLargeur du bouton Non

Dialogue Multi-Action​

Un dialogue avec plusieurs boutons d'action disposes en grille.

name: "&6&lTeleport Menu"
external_title: "Teleport"
type: multi_action

can-close-with-escape: true
after_action: CLOSE
number-of-columns: 2

body:
header:
type: plain_message
messages:
- "&7Select a destination:"
width: 300

multi-actions:
spawn:
text: "&a&lSpawn"
tooltip: "&7Teleport to spawn"
width: 150
actions:
1:
success:
- type: close
- type: player-command
commands:
- "spawn"
- type: message
messages:
- "&aTeleporting to spawn..."

shop:
text: "&e&lShop"
tooltip: "&7Visit the shop"
width: 150
actions:
1:
success:
- type: close
- type: player-command
commands:
- "warp shop"

pvp:
text: "&c&lPvP Arena"
tooltip: "&7Enter the PvP arena"
width: 150
actions:
1:
success:
- type: close
- type: player-command
commands:
- "warp pvp"

home:
text: "&b&lHome"
tooltip: "&7Teleport home"
width: 150
actions:
1:
success:
- type: close
- type: player-command
commands:
- "home"

Options Multi-Action​

OptionDescription
number-of-columnsNombre de boutons par ligne
multi-actionsMap des boutons d'action
textTexte du bouton
tooltipInfobulle du bouton
widthLargeur du bouton
actionsActions executees au clic

Affiche les liens du serveur sous forme de boutons cliquables.

name: "&6&lServer Links"
external_title: "Links"
type: server_links

can-close-with-escape: true
after_action: CLOSE

server-links:
text: "&6&lUseful Links"
tooltip: "&7Click to open"
width: 300
number-of-columns: 2
actions:
1:
success:
- type: message
messages:
- "&aLink opened!"

Options des boutons d'action​

Les boutons d'action — les boutons Oui/Non d'une confirmation, un bouton de notice, chaque entree d'un multi_action, et le bouton de sortie de server_links — partagent un ensemble commun d'options.

type​

Le type d'action effectuee lorsque le bouton est clique.

ValeurDescription
custom-click(par defaut) Execute les actions: zMenu definies sur le bouton.
staticExecute une action native du client (voir static-type ci-dessous), sans aller-retour serveur.

static-type​

Utilise uniquement lorsque type: static. L'action native du client a effectuer.

static-typeChamp requisDescription
OPEN_URLurlOuvre une URL dans le navigateur du joueur
OPEN_FILEfileOuvre un fichier local
RUN_COMMANDcommandExecute une commande en tant que joueur
SUGGEST_COMMANDcommandPre-remplit la zone de chat avec une commande
COPY_TO_CLIPBOARDtextCopie du texte dans le presse-papiers
multi-actions:
website:
text: "&bOur Website"
type: static
static-type: OPEN_URL
url: "https://example.com"

usage-limit​

Nombre maximum de fois que le bouton peut etre active (par defaut : illimite).

usage-limit: 1

duration-limit​

Un temps de recharge entre les activations. Soit un simple nombre (secondes), soit une section avec une unite de temps :

duration-limit: 5          # 5 secondes
duration-limit:
value: 2
type: MINUTES # SECONDS, MILLISECONDS, MINUTES, HOURS, ...

enable-placeholders​

Active l'interpretation des placeholders pour le bouton. Accepte un booleen, ou une section pour l'activer par cle.

Compatibilite ascendante

La forme imbriquee (<key>.label, <key>.tooltip, <key>.width, <key>.actions, <key>.type) est la nouvelle disposition canonique, mais les anciennes cles plates (yes-text, notice.text, multi-actions.<key>.text, ...) fonctionnent toujours, de sorte que les fichiers de dialogue existants n'ont pas besoin d'etre reecrits.


Ouvrir des dialogues​

Depuis les actions de bouton​

Utilisez le type d'action dialog dans les boutons d'inventaire :

items:
open-dialog:
slot: 13
item:
material: BOOK
name: "&6Open Dialog"
actions:
- type: dialog
dialog: "welcome"

Avec des arguments​

Passez des arguments au dialogue :

actions:
- type: dialog
dialog: "confirmation"
arguments:
- "diamond_sword"
- "500"

Depuis un plugin externe​

Ouvrez un dialogue depuis un autre plugin :

actions:
- type: dialog
dialog: "my-dialog"
plugin: "MyPlugin"

Exemples complets​

Formulaire de retour​

name: "&6&lFeedback Form"
external_title: "Share Your Feedback"
type: notice

can-close-with-escape: true
after_action: CLOSE

body:
header:
type: plain_message
messages:
- "&6&lWe Value Your Feedback!"
- ""
- "&7Please share your thoughts about the server."
width: 400

inputs:
rating:
type: dialog_single_option
label: "&eHow would you rate your experience?"
options:
excellent:
id: "5"
display: "&a⭐⭐⭐⭐⭐ Excellent"
good:
id: "4"
display: "&e⭐⭐⭐⭐ Good"
average:
id: "3"
display: "&6⭐⭐⭐ Average"
poor:
id: "2"
display: "&c⭐⭐ Poor"

comments:
type: dialog_text
label: "&7Additional comments:"
width: 400
max-length: 500
multiline:
max-lines: 5

subscribe:
type: dialog_boolean
label: "&eReceive updates about new features?"
text-true: "&aYes, keep me updated!"
text-false: "&7No thanks"

Selection de kit​

name: "&6&lSelect Your Kit"
external_title: "Kit Selection"
type: multi_action

can-close-with-escape: false
after_action: CLOSE
number-of-columns: 3

body:
info:
type: plain_message
messages:
- "&7Choose your starting kit wisely!"
- "&7This cannot be changed later."
width: 400

multi-actions:
warrior:
text: "&c&lWarrior"
tooltip: "&7Iron armor and sword"
width: 120
actions:
1:
success:
- type: console-command
commands:
- "kit warrior %player%"
- type: message
messages:
- "&aYou selected the Warrior kit!"

archer:
text: "&a&lArcher"
tooltip: "&7Leather armor and bow"
width: 120
actions:
1:
success:
- type: console-command
commands:
- "kit archer %player%"
- type: message
messages:
- "&aYou selected the Archer kit!"

mage:
text: "&5&lMage"
tooltip: "&7Robes and magic items"
width: 120
actions:
1:
success:
- type: console-command
commands:
- "kit mage %player%"
- type: message
messages:
- "&aYou selected the Mage kit!"

Bonnes pratiques​

  1. Gardez les dialogues cibles - Un seul objectif par dialogue
  2. Utilisez des labels clairs - Rendez les saisies faciles a comprendre
  3. Fournissez des infobulles - Aidez les joueurs a comprendre les actions des boutons
  4. Testez sur la version cible - Assurez-vous que Paper 1.21.4+ et PacketEvents sont installes
  5. Gerez tous les cas - Definissez des actions pour tous les choix possibles
  6. Utilisez les types appropries - Choisissez le bon type de dialogue pour votre cas d'usage

Prochaines etapes​

  • Decouvrez les Actions pour les comportements des boutons de dialogue
  • Configurez les Exigences pour l'acces conditionnel aux dialogues
  • Consultez les Inventaires pour les alternatives de menu traditionnelles
Copyright © 2026 GroupeZ|Build #loading...|-