Componentes de texto do /tellraw: click_event, hover_event e por que sua mensagem não aparece
Um único colchete errado faz o tellraw não enviar nada aos alvos. Veja o formato do componente, as ações de clique e hover que realmente funcionam no chat e a regra de escape que todo mundo esquece.
/tellraw recebe um componente de texto, e a falha é cruel: um componente malformado não gera mensagem para ninguém — o único erro vai para quem executou o comando, ou para a saída de um Bloco de Comando, onde ninguém está olhando. Tudo abaixo é sobre acertar o formato logo de primeira.
As três formas válidas
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
A forma de lista é a que você deve usar para qualquer coisa interessante, porque cada elemento pode ter sua própria formatação. A formatação do primeiro elemento é herdada pelos demais, a menos que eles a substituam — é por isso que muita gente acaba com a mensagem inteira dourada sem querer. Comece a lista com uma string vazia para evitar isso:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Ações de clique
click_event recebe uma ação mais o campo próprio daquela ação — não existe um value compartilhado:
| Ação | Campo | Observação |
|---|---|---|
run_command | command: "/spawn" | Executa como o jogador, no nível de permissão dele |
suggest_command | command: "/msg Steve " | Preenche a caixa de chat, mas não envia |
open_url | url: "https://…" | Pede confirmação antes de abrir |
copy_to_clipboard | value: "any text" | A mais amigável para compartilhar coordenadas |
change_page | page: 2 | Somente para Livros |
run_command é a que tem armadilha: ela executa com as permissões do jogador que clicou, não do Bloco de Comando. Um menu que chama /gamemode creative não faz nada para um jogador comum.
Ações de hover
"hover_event":{"action":"show_text","value":["Click to teleport"]}
show_text, show_item e show_entity. Repare nos nomes — guias antigos usam hoverEvent, clickEvent e contents, que a 1.21.5 substituiu por hover_event, click_event e, para show_text, value. Essa renomeação explica muitos tooltips de hover mortos copiados de tutoriais.
O escape é onde tudo quebra
O componente inteiro é um único argumento de comando, então as aspas dentro dele precisam sobreviver ao analisador de comandos. Em um Bloco de Comando, digite direto. Em um arquivo de função, não é preciso escapar com barra invertida. Em um Livro Escrito via /give, as páginas também são componentes de texto, escritas em SNBT — sem escape de string dentro de string desde a 1.21.5, e uma página ainda escrita como string JSON escapada agora aparece como texto literal, com as aspas à mostra.
Regra prática: se você está aninhando componentes de texto dentro de um componente de item, monte tudo com uma ferramenta em vez de fazer à mão.
Seletores dentro do texto
{"selector":"@p","separator":{"text":", "}}
resolve para nomes de jogadores no momento do envio. {"score":{"name":"@s","objective":"Kills"}} puxa um valor de placar. Os dois são melhores do que tentar concatenar valores por conta própria.
Chaves de tradução atravessam idiomas
{"translate":"block.minecraft.crafting_table"}
é renderizado no idioma de cada jogador — 제작대 para um cliente coreano, 作業台 para um japonês. Para um servidor multilíngue, isso é estritamente melhor do que fixar o inglês no código.
Monte e pré-visualize comandos de texto e de exibição no Construtor de Comandos de Texto e Exibição.