MC Toolkit

Guides / Commandes et données

Écrans de dialogue : créer de vrais menus sans mod

Les dialogues de datapack offrent une véritable fenêtre avec champs de saisie et boutons. Voici la structure JSON, comment un bouton exécute une commande, et ce que cela change par rapport à l'astuce du menu-livre.

Les menus de serveur s'écrivaient autrefois avec des livres à pages cliquables, ou une interface de Coffre simulée avec des cadres. Les dialogues ont remplacé les deux par un véritable écran.

Ce qu'est un dialogue

Un fichier JSON dans un datapack qui décrit une fenêtre :

data/<namespace>/dialog/welcome.json
{
  "type": "minecraft:notice",
  "title": { "text": "Welcome" },
  "body": [{ "type": "minecraft:plain_message",
             "contents": { "text": "Pick a class to begin." } }],
  "action": { "label": { "text": "Continue" } }
}

Puis /dialog show @p my_pack:welcome.

Les types

TypeForme
noticedu texte plus un bouton de fermeture
confirmationoui / non, chacun avec sa propre action
multi_actionune grille de boutons
server_linksla liste de liens intégrée
dialog_listun menu qui ouvre d'autres dialogues

multi_action est le cheval de trait — c'est le sélecteur de classe, la boutique, la liste de téléportation.

Les boutons exécutent des commandes

{ "label": { "text": "Warp to spawn" },
  "action": { "type": "minecraft:run_command", "command": "/spawn" } }

Comme clickEvent dans le chat, cela s'exécute en tant que Joueur qui clique, à son niveau de permission. Un bouton appelant une commande réservée aux op ne fait rien pour un Joueur normal. La solution habituelle est un objectif trigger : le bouton exécute /trigger warp set 1 et une fonction périodique effectue la partie privilégiée.

Les champs de saisie

"inputs": [
  { "type": "minecraft:text", "key": "name", "label": { "text": "Your name" }, "max_length": 16 },
  { "type": "minecraft:boolean", "key": "pvp", "label": { "text": "Enable PvP" } },
  { "type": "minecraft:single_option", "key": "class", "label": { "text": "Class" }, "options": [
      { "id": "mage", "display": { "text": "Mage" } },
      { "id": "rogue", "display": { "text": "Rogue" } } ] }
]

Les valeurs parviennent à une commande via un bouton dont l'action est minecraft:dynamic/run_command : son template prend $(key) pour chaque champ. Un bouton run_command simple ne reçoit rien.

"action": {
  "type": "minecraft:dynamic/run_command",
  "template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}

La fonction appelée est alors une macro :

$say Welcome $(name), you chose $(class)

Le préfixe $ sur la ligne et $(key) pour la substitution, aux deux extrémités. C'est tout le mécanisme de liaison, et c'est ce qui rend les dialogues réellement utiles plutôt que décoratifs.

Pourquoi c'est mieux que l'astuce du livre

  • C'est un écran, donc il suspend la saisie au lieu de rester dans l'historique du chat.
  • Les champs de saisie existent vraiment. Un livre ne pouvait offrir que des liens.
  • Aucun objet requis. Rien à perdre, à lâcher ou à dupliquer.
  • Il se ferme proprement et ne peut pas être remonté.

Le seul point où les livres restent meilleurs, c'est la lecture longue — le corps d'un dialogue n'est pas un bon endroit pour trois pages de lore.

Styles de points de repère

Le même outil couvre les points de repère de la barre de localisation, dont les styles sont des ressources de pack de ressources (assets/<namespace>/waypoint_style/) contrôlant les sprites et les distances de fondu d'un Joueur ou d'une position suivis ; la couleur se définit séparément avec /waypoint modify <target> color. Utile pour les marqueurs d'équipe là où une barre de boss serait trop intrusive.

Créez des écrans de dialogue avec champs de saisie et boutons, et personnalisez les styles de points de repère, dans le Dialog Input & Waypoint Style Builder.

Créateur de dialogues et de styles de waypoint →

Plus de guides

Tout voir →