Pantallas de diálogo: cómo crear menús reales sin un mod
Los diálogos de datapack te ofrecen una ventana de verdad con campos de entrada y botones. Aquí tienes la estructura JSON, cómo un botón ejecuta un comando y en qué se diferencia del truco del menú con libro.
Los menús de servidor solían hacerse con libros escritos de páginas clicables, o con una interfaz de cofre simulada con marcos de objetos. Los diálogos sustituyeron ambos por una pantalla real.
Qué es un diálogo
Un archivo JSON dentro de un datapack que describe una ventana:
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" } }
}
Después, /dialog show @p my_pack:welcome.
Los tipos
| Tipo | Forma |
|---|---|
notice | texto más un botón de descartar |
confirmation | sí / no, cada uno con su propia acción |
multi_action | una cuadrícula de botones |
server_links | la lista de enlaces integrada |
dialog_list | un menú que abre otros diálogos |
multi_action es el que más se usa: es el selector de clase, la tienda, la lista de teletransportes.
Los botones ejecutan comandos
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
Igual que clickEvent en el chat, esto se ejecuta como el jugador que hace clic, con su nivel de permisos. Un botón que llama a un comando exclusivo de operadores no hace nada para un jugador normal. El truco habitual es usar un objetivo de trigger: el botón ejecuta /trigger warp set 1 y una función que se ejecuta cada tick se encarga de la 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" } } ] }
]
Los valores llegan a un comando mediante un botón cuya acción es minecraft:dynamic/run_command: su template recibe $(key) por cada campo de entrada. Un botón run_command normal no recibe nada.
"action": {
"type": "minecraft:dynamic/run_command",
"template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}
La función que llama es entonces una macro:
$say Welcome $(name), you chose $(class)
El prefijo $ en la línea y $(key) para la sustitución, en ambos extremos. Ese es todo el mecanismo de vinculación, y es lo que hace que los diálogos sean realmente útiles en lugar de meramente decorativos.
Por qué esto supera al truco del libro
- Es una pantalla, así que bloquea la entrada en lugar de quedarse en el historial del chat.
- Los campos de entrada existen de verdad. Un libro solo podía ofrecer enlaces.
- No requiere ningún objeto. Nada que perder, soltar o duplicar.
- Se cierra limpiamente y no se puede volver a subir para consultarlo.
Lo único que los libros siguen haciendo mejor es la lectura extensa: el cuerpo de un diálogo no es un buen sitio para tres páginas de trasfondo.
Estilos de punto de referencia
La misma herramienta cubre los puntos de referencia de la barra de localización, cuyos estilos son recursos del paquete de recursos (assets/<namespace>/waypoint_style/) que controlan los sprites y las distancias de desvanecimiento de un jugador o una posición rastreados; el color se define aparte con /waypoint modify <target> color. Resulta útil para marcadores de equipo donde una barra de jefe sería demasiado intrusiva.
Crea pantallas de diálogo con campos de entrada y botones, y personaliza los estilos de punto de referencia, en el Dialog Input & Waypoint Style Builder.