Dialog Menu
Descripción general
Dialog Menu abre las pantallas de diálogo nativas de Minecraft 1.21.6 y posteriores, a través de la API de diálogos de Paper. Un diálogo es una ventana en el centro de la pantalla con un título, un cuerpo de texto, un objeto opcional, botones y campos de entrada. No necesita resource pack ni inventario personalizado.
Construyes todo el diálogo en una única entrada de acción, Paper Dialog. Cada botón ejecuta un comando como el jugador o dispara otras entradas de TypeWriter. Los campos de entrada (texto, interruptor, opción, deslizador) se leen cuando el jugador confirma, y sus valores se insertan en el comando con $(key).
Características
- Diálogos nativos: la ventana de diálogo vanilla, abierta con la API de diálogos de Paper.
- Tres layouts: una cuadrícula de botones, una confirmación sí/no o un aviso de un solo botón.
- Botones de acción: ejecutan un comando como el jugador, opcionalmente como OP.
- Botones de disparador: activan entradas de TypeWriter directamente, sin comando.
- Entradas: campo de texto (incluso multilínea), interruptor, opción múltiple y deslizador numérico.
- Valores de entrada en los comandos: usa
$(key)en un comando para insertar lo que el jugador ha escrito o elegido. - Texto dinámico: los títulos, mensajes y etiquetas aceptan MiniMessage y placeholders de PlaceholderAPI.
- Objeto en el cuerpo: muestra un objeto en el cuerpo del diálogo.
- Comportamiento tras la acción: cierra el diálogo, lo mantiene abierto o espera una respuesta del servidor.
- Placeholder: comprueba si un jugador tiene un diálogo abierto en este momento.
Instalación
- Usa Paper (o un fork como Folia) 1.21.6 o posterior: las versiones anteriores no tienen la API de diálogos.
- Asegúrate de que la extensión Basic de TypeWriter está instalada (consulta la documentación de TypeWriter).
- Opcional: instala PlaceholderAPI para usar placeholders en los textos.
- Coloca el JAR de Dialog Menu en
plugins/Typewriter/extensions/y reinicia el servidor.
Primeros pasos
Muestra una ventana de confirmación antes de teletransportar a un jugador:
- En el panel web de TypeWriter, abre una página de secuencia y añade una entrada Paper Dialog.
- Establece
displayNameen<gold>Travel to the spawn?ymessageen el texto del cuerpo del diálogo. - Establece
dialogTypeenCONFIRMATION. - En
buttons, añade un botón de acción. Establece sulabelenYesy sucommandenspawn. - En
exitButton, establecelabelenNo. Dejacommandvacío: el botón entonces solo cierra el diálogo. - Enlaza la entrada con lo que deba abrirla: una interacción con un NPC, un comando o una opción de diálogo.
- Publica y activa la entrada en el juego.
Para recoger un valor, añade una entrada de texto a buttons: establece key en name, buttonLabel en Send y command en rename $(name). Cuando el jugador hace clic en el botón, el texto se inserta en lugar de $(name).
asOp ejecuta el comando con derechos temporales de operador. Úsalo solo con comandos que controles por completo, y no insertes nunca texto libre de un jugador en un comando de ese tipo.
Cómo funciona
Cuando se ejecuta la acción, el diálogo se construye a partir de la entrada y se muestra al jugador que la ha activado. Cada botón es de un solo uso: tras un clic, su acción se ejecuta una vez para ese diálogo. El diálogo se cierra o se mantiene abierto según afterAction.
Todos los campos de texto admiten MiniMessage y placeholders. displayName recurre al nombre de la entrada cuando está vacío.
Menús
El layout del diálogo depende de dialogType:
| Tipo | Layout |
|---|---|
MULTI_ACTION | Una cuadrícula de botones con columns columnas, más el botón de salida cuando showExitButton está activado. |
CONFIRMATION | La ventana vanilla sí/no: el primer botón confirma y el botón de salida rechaza. En este modo el botón de salida se construye siempre. |
NOTICE | Una ventana de un solo botón que usa el primer botón, o el botón de salida si no hay ninguno. |
Los tipos de botón que puedes añadir a buttons:
| Tipo | Campos | Macro de comando |
|---|---|---|
| Botón de acción | label, command, asOp | ninguna |
| Botón de disparador | label, triggers | ninguna |
| Entrada de texto | label, key (por defecto input), buttonLabel, command, asOp, width, labelVisible, initial, maxLength, maxLines, height | $(input) |
| Interruptor booleano | label, key (por defecto boolean), initial, onTrue, onFalse, buttonLabel, command, asOp | $(boolean), sustituido por onTrue o onFalse |
| Opción múltiple | label, key (por defecto choice), options, buttonLabel, command, asOp | $(choice) |
| Rango numérico | label, key (por defecto value), start, end, initial, step, buttonLabel, command, asOp | $(value), redondeado a un número entero |
Los campos de entrada se muestran sobre los botones. Cada botón de entrada añade también su propio botón de confirmación, con buttonLabel como texto; un comando puede usar el $(key) de cualquier entrada del mismo diálogo. El botón de salida se configura por separado en exitButton.
Para una opción múltiple, escribe options como una lista separada por comas y añade * tras la opción que deba estar seleccionada al principio, por ejemplo Easy,Normal*,Hard.
Placeholders
Placeholders de PlaceholderAPI, servidos por la expansión typewriter.
| Placeholder | Devuelve |
|---|---|
%typewriter_inmenudialog% | 1 si el jugador tiene abierto un diálogo de esta extensión, 0 en caso contrario. |
%typewriter_inmenudialog_<name>% | 1 si el diálogo abierto es la entrada Paper Dialog con este nombre de entrada. %typewriter_inmenudialog:<name>% también funciona. |
El estado se borra cuando se hace clic en un botón, cuando el jugador se desconecta y cuando TypeWriter se recarga. No se borra cuando el jugador cierra el diálogo con la tecla Escape.
Entradas
1 entradas, generadas a partir del código fuente de la extensión.
Acciones1
- Paper DialogDisplay a customizable dialog
Resolución de problemas
No se muestra nada cuando se ejecuta la acción. Los diálogos necesitan Paper 1.21.6 o posterior. En un servidor más antiguo la API de diálogos no existe y la acción falla. Comprueba también que los criteria de la entrada se cumplen.
Un botón no hace nada. Los botones de comando con un command vacío solo cierran el diálogo. En los demás casos el comando se ejecuta como el jugador: si el jugador no tiene el permiso necesario, falla en silencio para él, y el fallo se registra como Dialog command '…' failed. Prueba antes el comando en el chat.
$(key) aparece en el comando o se sustituye por nada. La key de la entrada y la macro deben coincidir exactamente. Una macro que no coincide con ninguna entrada se sustituye por un texto vacío. En los interruptores, la macro da el valor onTrue o onFalse, no true ni false.
Los botones dejan de funcionar tras el primer clic. Cada botón es de un solo uso por diálogo abierto. Con afterAction establecido en NONE o WAIT_FOR_RESPONSE, la ventana puede permanecer en pantalla, pero sus botones ya no reaccionan. Vuelve a activar la acción para abrir un diálogo nuevo.
%typewriter_inmenudialog% se queda en 1. El jugador cerró el diálogo con Escape, que no restablece el estado. Se restablece con el siguiente clic en un botón, cuando el jugador se va o al recargar.
Extensiones relacionadas
- Companion: abre un diálogo cuando el jugador hace clic en su compañero.