Écrans de dialogue : créer de vrais menus sans mod
Les dialogues de datapack vous offrent une vraie fenêtre avec des champs de saisie et des boutons. Voici la structure JSON, comment un bouton exécute une commande et comment cela se compare à l'astuce du menu-livre.
Les menus de serveur étaient autrefois des livres écrits avec des pages cliquables, ou une interface graphique de coffre simulée avec des cadres d'objets. Les dialogues ont remplacé les deux par un véritable écran.
Qu'est-ce qu'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
| Type | Forme |
|---|---|
notice | texte plus un bouton de fermeture |
confirmation | oui / non, chacun avec sa propre action |
multi_action | une grille de boutons |
server_links | la liste de liens intégrée |
dialog_list | un menu qui ouvre d'autres dialogues |
multi_action est le cheval de bataille — 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, avec son niveau de permission. Un bouton appelant une commande réservée aux opérateurs ne fait rien pour un Joueur normal. La solution standard est un objectif trigger : le bouton exécute /trigger warp set 1 et une fonction de "ticking" fait la partie privilégiée.
Entrées
"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", "options": [
{ "id": "mage", "display": { "text": "Mage" } },
{ "id": "rogue", "display": { "text": "Rogue" } } ] }
]
Les valeurs arrivent en tant qu'arguments de macro à la fonction appelée par le bouton, donc la fonction réceptrice est une macro :
$say Welcome $(name), you chose $(class)
Le préfixe $ sur la ligne et $(key) pour la substitution. C'est tout le mécanisme de liaison, et c'est ce qui rend les dialogues vraiment utiles plutôt que décoratifs.
Pourquoi cela surpasse l'astuce du livre
- C'est un écran, donc il met en pause la saisie plutôt que de rester dans l'historique du chat.
- Les entrées existent réellement. Un livre ne pouvait offrir que des liens.
- Aucun objet requis. Rien à perdre, à laisser tomber ou à dupliquer.
- Il se ferme proprement et ne peut pas être fait défiler à nouveau.
La seule chose que les livres font encore mieux est la lecture de longs textes — un corps de 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, qui sont un registre de datapack séparé contrôlant la couleur et le sprite du marqueur affichés pour un Joueur ou une position suivie. Utile pour les marqueurs d'équipe où une barre de boss serait trop intrusive.
Créez des écrans de dialogue avec des entrées et des boutons, et personnalisez les styles de points de repère, dans le Générateur d'entrées de dialogue et de styles de points de repère.