GroupeZ Docs
Configurations

Dialogues

Creer des popups de dialogue interactives avec des formulaires, des confirmations et des boutons multi-actions

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 tous les types de dialogues vanilla :

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
dialog_listUn hub qui liste d'autres dialogues, un bouton par dialogue

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 est aussi accepte. C'est egalement le libelle du bouton qui ouvre ce dialogue depuis une liste de dialogues. S'il est vide, rien n'est envoye et le client utilise le nom 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!"

Liste de dialogues

Un dialogue dialog_list est un hub : il affiche un bouton par dialogue liste sous dialogs:, chacun avec comme libelle le external-title de son dialogue (ou son nom s'il n'en a pas). Cliquer sur un bouton ouvre ce dialogue. Un exemple est genere dans dialogs/dialog_list-dialog.yml.

name: "&6&lServer Hub"
external-title: "&6Server hub"
type: dialog_list

can-close-with-escape: true
pause: false
after-action: CLOSE

number-of-columns: 2
button-width: 150

dialogs:
  - "default-dialog"                     # dialogue zMenu, par nom de fichier ou nom
  - "multi_action-dialog"
  - dialog: "confirmation-dialog"        # idem, ecrit sous forme de map
  - registry-key: "minecraft:server_links" # dialogue vanilla ou de datapack

back-button:
  enabled: true
  label: "&7« Back"
  tooltip: "&7Return to the server hub"
  width: 150

exit-button:
  label: "&cClose"
  tooltip: "&7Close the server hub"
  width: 150
  actions:
    1:
      success:
        - type: message
          messages:
            - "&7See you soon!"

body:
  welcome:
    type: dialog_plain_message
    messages:
      - "&7Welcome &f%player_name%&7, pick a section below."
    width: 300

Options de la liste de dialogues

OptionTypeDefautDescription
dialogsListe-Les dialogues a lister. Chaque entree est un nom de dialogue zMenu (nom ou plugin:nom, aussi ecrit dialog: <nom>), ou un dialogue vanilla/datapack ecrit registry-key: <namespace:cle>
number-of-columnsEntier2Nombre de boutons par ligne
button-widthEntier150Largeur de chaque bouton (1-1024)
back-button.enabledBooleentrueAjoute un bouton retour aux dialogues listes
back-button.labelTexteBackLibelle du bouton retour
back-button.tooltipTextevideInfobulle du bouton retour
back-button.widthEntier150Largeur du bouton retour (1-1024)
exit-buttonSectionaucunBouton optionnel en bas de la liste, aussi declenche par la touche Echap. Supporte label, tooltip, width et actions

Bon a savoir :

  • Bouton retour : le client ne revient pas a la liste quand un dialogue liste est ferme. Le bouton retour est ajoute aux dialogues listes qui n'ont pas leur propre bouton de sortie (multi_action, server_links et dialog_list) pour que les joueurs puissent revenir. Les dialogues notice et confirmation n'ont pas d'emplacement de sortie et restent inchanges. Pour ecrire votre propre bouton retour, donnez au dialogue un exit-button avec l'action dialog.
  • Prerequis : les dialogues listes dont le joueur ne remplit pas l'open-requirement sont masques. Le prerequis est verifie a l'ouverture de la liste, car le client ouvre les dialogues listes lui-meme, sans demander au serveur.
  • Imbrication : une liste peut contenir d'autres listes. La profondeur maximale est definie par dialog-list-max-depth dans config.yml (4 par defaut).

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

Sur cette page

GroupeZ MCP

La documentation dans ton IA

Le MCP permet à ton IA de chercher dans la documentation GroupeZ et de lire les exemples à jour pour t’aider à configurer tes plugins.

Lecture seule · Sans clé API côté documentation

1. Copie l’adresse du serveur

Transport : HTTP (Streamable HTTP). Authentification : aucune. Ton outil utilise son propre modèle et ses propres limites d’abonnement.

  1. Ouvre Plugins dans ChatGPT sur le web, puis + → Ajouter un serveur MCP personnalisé.
  2. Nomme-le « GroupeZ Documentation », colle l’URL ci-dessus et choisis « Aucune authentification ». Crée puis installe le plugin.
  3. Dans une conversation, tape @ et sélectionne ce plugin avant d’envoyer ta question. Si nécessaire, active search, get_page et list_pages dans ses paramètres.
Guide officiel de cet outil

3. Pose une question

Utilise le MCP GroupeZ pour m’aider à créer un inventaire zMenu. Recherche les pages pertinentes, lis les exemples et cite tes sources.
Autres clients et dépannage

Pour les clients utilisant mcpServers, adapte cet exemple à leur format :

{
  "mcpServers": {
    "groupez-docs": {
      "url": ""
    }
  }
}

Les outils disponibles sont search, get_page et list_pages. Après une mise à jour, actualise les outils du connecteur. Si ton IA n’y accède pas, vérifie que le connecteur est activé dans la conversation et que ton compte autorise les MCP personnalisés. Ouvrir l’URL dans un navigateur n’est pas un test MCP.