Telas de diálogo: criando menus reais sem mods
Diálogos de datapacks 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 de Livro.
Antigamente, os menus de servidor eram feitos com Livros escritos e páginas clicáveis, ou GUIs de Baús simuladas com molduras de itens. Os diálogos substituíram ambos 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 fechar |
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 coringa — é o seletor de classes, a loja, a lista de teletransporte.
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 apenas para operadores não faz nada para um Jogador normal. A solução padrão é um objetivo trigger: o botão executa /trigger warp set 1 e uma função de tick faz a parte privilegiada.
Entradas
"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" } } ] }
]
Os valores chegam como argumentos de macro para a função que o botão chama, então a função receptora é uma macro:
$say Welcome $(name), you chose $(class)
O prefixo $ na linha e $(key) para substituição. Esse é todo o mecanismo de vinculação, e é o que torna os diálogos genuinamente úteis, e não 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.
- As entradas realmente existem. Um Livro só podia oferecer links.
- Nenhum item necessário. Nada para perder, derrubar ou duplicar.
- Fecha de forma limpa e não pode ser rolado de volta.
A única coisa que os Livros ainda fazem melhor é a leitura de textos longos — 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 (locator-bar waypoints), que são um registro de datapack separado que controla a cor do marcador e o sprite exibido para um Jogador ou posição rastreada. Útil para marcadores de equipe onde uma barra de chefe (bossbar) seria muito intrusiva.
Crie telas de diálogo com entradas e botões, e personalize os estilos de ponto de referência, no Construtor de Estilos de Entrada de Diálogo e Ponto de Referência.