Texto JSON em /tellraw: clickEvent, hoverEvent e por que sua mensagem não aparece
Um único colchete errado faz o tellraw falhar silenciosamente. Veja o formato do componente, as ações de clique e de foco que realmente funcionam no chat e a regra de escape que as pessoas esquecem.
/tellraw aceita um componente de texto JSON, e o modo de falha não ajuda: um componente malformado não produz nenhuma mensagem e nenhum erro. Tudo abaixo é sobre acertar o formato da primeira vez.
Os três formatos válidos
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
O formato de lista é o que deve ser usado para qualquer coisa interessante, porque cada elemento pode ter sua própria formatação. A formatação do primeiro elemento é herdada pelo resto, a menos que eles a substituam — é por isso que as pessoas recebem uma mensagem inteira inesperadamente dourada. Comece uma lista com uma string vazia para evitar isso:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Ações de clique
clickEvent aceita uma ação e um valor:
| Ação | Valor | Observação |
|---|---|---|
run_command | /spawn | Executa como o jogador, no nível de permissão dele |
suggest_command | /msg Steve | Preenche a caixa de chat, não envia |
open_url | https://… | Solicita antes de abrir |
copy_to_clipboard | qualquer texto | O mais amigável para compartilhar coordenadas |
change_page | número da página | Apenas Livros |
run_command é a que tem uma armadilha: ela executa com as permissões do jogador que clicou, não as do Bloco de Comando. Um menu que chama /gamemode creative não faz nada para um jogador normal.
Ações de foco
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text, show_item e show_entity. Observe contents — guias mais antigas usam value, que foi substituído e agora falha silenciosamente. Essa única renomeação explica muitos tooltips de foco mortos copiados de tutoriais.
O escape é onde tudo quebra
O componente inteiro é um argumento de comando, então as aspas internas devem sobreviver ao analisador de comandos. Em um Bloco de Comando, digite-o diretamente. Em um arquivo de função, o escape com barra invertida não é necessário. Em um Livro Escrito /give, o JSON é uma string dentro de uma string e precisa de escape — esse é o caso que gera paredes ilegíveis de \".
Regra geral: se você estiver aninhando componentes de texto dentro de um componente de item, construa-o com uma ferramenta em vez de manualmente.
Seletores dentro do texto
{"selector":"@p","separator":{"text":", "}}
resolve para nomes de jogadores no momento do envio. {"score":{"name":"@s","objective":"Kills"}} extrai um valor de placar. Ambos são melhores do que tentar concatenar valores você mesmo.
Chaves de tradução viajam entre idiomas
{"translate":"block.minecraft.crafting_table"}
renderiza no idioma de cada jogador — 제작대 para um cliente coreano, 作業台 para um japonês. Para um servidor multilíngue, isso é estritamente melhor do que codificar o inglês.
Construa o componente visualmente, com as ações de clique e foco em sua forma atual, no Construtor de Comandos de Texto e Exibição.