Dialog Menu
Visão geral
O Dialog Menu abre as telas de diálogo nativas do Minecraft 1.21.6 e posterior, por meio da API de diálogos do Paper. Um diálogo é uma janela no meio da tela com um título, um corpo de texto, um item opcional, botões e campos de entrada. Ele não precisa de resource pack nem de inventário personalizado.
Você monta o diálogo inteiro em uma única entry de ação, Paper Dialog. Cada botão executa um comando como o jogador ou dispara outras entries do TypeWriter. Os campos de entrada (texto, alternador, escolha, controle deslizante) são lidos quando o jogador confirma, e seus valores são inseridos no comando com $(key).
Recursos
- Diálogos nativos — a janela de diálogo vanilla, aberta com a API de diálogos do Paper.
- Três layouts — uma grade de botões, uma confirmação sim/não ou um aviso com um único botão.
- Botões de ação — executam um comando como o jogador, opcionalmente como OP.
- Botões de trigger — disparam entries do TypeWriter diretamente, sem comando.
- Entradas — campo de texto (inclusive de várias linhas), alternador, múltipla escolha e controle deslizante numérico.
- Valores de entrada em comandos — use
$(key)em um comando para inserir o que o jogador digitou ou escolheu. - Texto dinâmico — títulos, mensagens e rótulos aceitam MiniMessage e placeholders do PlaceholderAPI.
- Item no corpo — exiba um item no corpo do diálogo.
- Comportamento pós-ação — feche o diálogo, mantenha-o aberto ou aguarde uma resposta do servidor.
- Placeholder — verifique se um jogador está com um diálogo aberto no momento.
Instalação
- Execute o Paper (ou um fork como o Folia) 1.21.6 ou posterior: versões mais antigas não têm a API de diálogos.
- Certifique-se de que a extensão Basic do TypeWriter está instalada (veja a documentação do TypeWriter).
- Opcional: instale o PlaceholderAPI para usar placeholders nos textos.
- Coloque o JAR do Dialog Menu em
plugins/Typewriter/extensions/e reinicie o servidor.
Primeiros passos
Exiba uma janela de confirmação antes de teletransportar um jogador:
- No painel web do TypeWriter, abra uma page sequence e adicione uma entry Paper Dialog.
- Defina
displayNamecomo<gold>Travel to the spawn?emessagecomo o texto do corpo do diálogo. - Defina
dialogTypecomoCONFIRMATION. - Em
buttons, adicione um botão de ação. Defina seulabelcomoYese seucommandcomospawn. - Em
exitButton, definalabelcomoNo. Deixecommandvazio: o botão então apenas fecha o diálogo. - Ligue a entry ao que deve abri-la: uma interação com NPC, um comando ou uma opção de diálogo.
- Publique e dispare a entry no jogo.
Para coletar um valor, adicione uma entrada de texto a buttons: defina key como name, buttonLabel como Send e command como rename $(name). Quando o jogador clica no botão, o texto é inserido no lugar de $(name).
asOp executa o comando com direitos temporários de operador. Use-o apenas para comandos que você controla totalmente e nunca insira texto livre de um jogador em um comando desse tipo.
Como funciona
Quando a ação é executada, o diálogo é construído a partir da entry e exibido ao jogador que a disparou. Um botão é de uso único: após um clique, sua ação é executada uma vez para aquele diálogo. O diálogo é fechado ou mantido aberto de acordo com afterAction.
Todos os campos de texto aceitam MiniMessage e placeholders. displayName usa o nome da entry quando está vazio.
Menus
O layout do diálogo depende de dialogType:
| Tipo | Layout |
|---|---|
MULTI_ACTION | Uma grade de botões com columns colunas, mais o botão de saída quando showExitButton está ativado. |
CONFIRMATION | A janela vanilla sim/não: o primeiro botão confirma, o botão de saída recusa. O botão de saída é sempre criado neste modo. |
NOTICE | Uma janela com um único botão, que usa o primeiro botão ou o botão de saída se não houver nenhum. |
Os tipos de botão que você pode adicionar a buttons:
| Tipo | Campos | Macro de comando |
|---|---|---|
| Botão de ação | label, command, asOp | nenhuma |
| Botão de trigger | label, triggers | nenhuma |
| Entrada de texto | label, key (padrão input), buttonLabel, command, asOp, width, labelVisible, initial, maxLength, maxLines, height | $(input) |
| Alternador booleano | label, key (padrão boolean), initial, onTrue, onFalse, buttonLabel, command, asOp | $(boolean), substituído por onTrue ou onFalse |
| Múltipla escolha | label, key (padrão choice), options, buttonLabel, command, asOp | $(choice) |
| Intervalo numérico | label, key (padrão value), start, end, initial, step, buttonLabel, command, asOp | $(value), arredondado para um número inteiro |
Os campos de entrada são exibidos acima dos botões. Cada botão de entrada também adiciona seu próprio botão de confirmação, com buttonLabel como texto; um comando pode usar o $(key) de qualquer entrada do mesmo diálogo. O botão de saída é configurado separadamente em exitButton.
Em uma múltipla escolha, escreva options como uma lista separada por vírgulas e adicione * depois da opção que deve vir selecionada inicialmente, por exemplo Easy,Normal*,Hard.
Placeholders
Placeholders do PlaceholderAPI, fornecidos pela expansão typewriter.
| Placeholder | Retorna |
|---|---|
%typewriter_inmenudialog% | 1 se o jogador tem um diálogo desta extensão aberto, caso contrário 0. |
%typewriter_inmenudialog_<name>% | 1 se o diálogo aberto é a entry Paper Dialog com este nome de entry. %typewriter_inmenudialog:<name>% também funciona. |
O estado é limpo quando um botão é clicado, quando o jogador sai e quando o TypeWriter recarrega. Ele não é limpo quando o jogador fecha o diálogo com a tecla Esc.
Entries
1 entradas, geradas a partir do código-fonte da extensão.
Ações1
- Paper DialogDisplay a customizable dialog
Solução de problemas
Nada é exibido quando a ação é executada. Os diálogos exigem o Paper 1.21.6 ou posterior. Em um servidor mais antigo, a API de diálogos não existe e a ação falha. Verifique também se os criteria da entry passam.
Um botão não faz nada. Botões de comando com command vazio apenas fecham o diálogo. Caso contrário, o comando é executado como o jogador: se o jogador não tiver a permissão para ele, falha silenciosamente para ele, e a falha é registrada como Dialog command '…' failed. Teste o comando no chat primeiro.
$(key) aparece no comando ou é substituído por nada. A key da entrada e a macro devem corresponder exatamente. Uma macro que não corresponde a nenhuma entrada é substituída por um texto vazio. Nos alternadores, a macro fornece o valor onTrue ou onFalse, e não true ou false.
Os botões param de funcionar após o primeiro clique. Cada botão é de uso único por diálogo aberto. Com afterAction definido como NONE ou WAIT_FOR_RESPONSE, a janela pode permanecer na tela, mas seus botões deixam de reagir. Dispare a ação novamente para abrir um diálogo novo.
%typewriter_inmenudialog% continua em 1. O jogador fechou o diálogo com Esc, o que não redefine o estado. Ele é redefinido no próximo clique em um botão, quando o jogador sai ou ao recarregar.
Extensões relacionadas
- Companion — abra um diálogo quando o jogador clicar em seu companion.