Telas de diálogo: criando menus de verdade sem mod
Os diálogos de datapack oferecem uma janela de verdade, com campos de entrada e botões. Veja a estrutura JSON, como um botão executa um comando e como isso se compara ao truque do menu em livro.
Os menus de servidor costumavam ser livros escritos com páginas clicáveis, ou uma interface de baú falsa feita com molduras de item. Os diálogos substituíram os dois por uma tela de verdade.
O que é um diálogo
Um arquivo JSON em um datapack que descreve uma janela:
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" } }
}
Depois, /dialog show @p my_pack:welcome.
Os tipos
| Tipo | Formato |
|---|---|
notice | texto mais um botão de dispensar |
confirmation | sim / não, cada um com sua própria ação |
multi_action | uma grade de botões |
server_links | a lista de links integrada |
dialog_list | um menu que abre outros diálogos |
multi_action é o cavalo de batalha — é o seletor de classe, a loja, a lista de warps.
Botões executam comandos
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
Assim como clickEvent no chat, isso é executado como o jogador que clicou, no nível de permissão dele. Um botão que chama um comando exclusivo de operador não faz nada para um jogador comum. A solução padrão é um objetivo trigger: o botão executa /trigger warp set 1 e uma função em execução contínua faz a parte privilegiada.
Campos de entrada
"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" } } ] }
]
Os valores chegam a um comando por meio de um botão cuja ação é minecraft:dynamic/run_command: seu template recebe $(key) para cada entrada. Um botão run_command comum não recebe nada.
"action": {
"type": "minecraft:dynamic/run_command",
"template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}
A função chamada por ele é então uma macro:
$say Welcome $(name), you chose $(class)
O prefixo $ na linha e $(key) para substituição, nas duas pontas. Esse é todo o mecanismo de vinculação, e é o que torna os diálogos genuinamente úteis em vez de apenas decorativos.
Por que isso é melhor que o truque do livro
- É uma tela, então pausa a entrada em vez de ficar no histórico do chat.
- Os campos de entrada existem de verdade. Um livro só podia oferecer links.
- Não exige item nenhum. Nada para perder, largar ou duplicar.
- Fecha de forma limpa e não dá para rolar de volta até ele.
A única coisa que os livros ainda fazem melhor é a leitura longa — o corpo de um diálogo não é um bom lugar para três páginas de história.
Estilos de ponto de referência
A mesma ferramenta cobre os pontos de referência da barra de localização, cujos estilos são recursos de pacote de recursos (assets/<namespace>/waypoint_style/) que controlam os sprites e as distâncias de desaparecimento de um jogador ou posição rastreada; a cor é definida separadamente com /waypoint modify <target> color. Útil para marcadores de equipe onde uma bossbar seria intrusiva demais.
Crie telas de diálogo com campos de entrada e botões, e personalize estilos de ponto de referência, no Construtor de Entrada de Diálogo e Estilo de Ponto de Referência.