/tellraw JSON-Text: clickEvent, hoverEvent und warum deine Nachricht nichts anzeigt
Eine einzige falsche Klammer lässt tellraw stillschweigend fehlschlagen. Hier ist die Komponentenform, die Klick- und Hover-Aktionen, die im Chat tatsächlich funktionieren, und die Escaping-Regel, die oft übersehen wird.
/tellraw erwartet eine JSON-Textkomponente, und der Fehlerfall ist wenig hilfreich: Eine fehlerhafte Komponente erzeugt keine Nachricht und keinen Fehler. Alles Folgende dreht sich darum, die Form auf Anhieb richtig hinzubekommen.
Die drei gültigen Formen
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
Die Listenform ist diejenige, die man für alles Interessante verwenden sollte, da jedes Element seine eigene Formatierung tragen kann. Die Formatierung des ersten Elements wird vom Rest geerbt, es sei denn, sie überschreiben sie – deshalb bekommen Leute eine ganze Nachricht unerwartet goldfarben. Beginne eine Liste mit einem leeren String, um das zu vermeiden:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Klick-Aktionen
clickEvent erwartet eine Aktion und einen Wert:
| Aktion | Wert | Hinweis |
|---|---|---|
run_command | /spawn | Wird als der Spieler ausgeführt, auf dessen Berechtigungsstufe |
suggest_command | /msg Steve | Füllt das Chatfenster, sendet aber nicht |
open_url | https://… | Fragt vor dem Öffnen nach |
copy_to_clipboard | beliebiger Text | Die freundlichste Option zum Teilen von Koordinaten |
change_page | Seitenzahl | Nur für Bücher |
run_command ist diejenige mit einer Falle: Sie wird mit den Berechtigungen des klickenden Spielers ausgeführt, nicht mit denen des Befehlsblocks. Ein Menü, das /gamemode creative aufruft, tut für einen normalen Spieler nichts.
Hover-Aktionen
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text, show_item und show_entity. Beachte contents – ältere Anleitungen verwenden value, was ersetzt wurde und jetzt stillschweigend fehlschlägt. Diese einzelne Umbenennung ist für viele tote Hover-Tooltips verantwortlich, die aus Tutorials kopiert wurden.
Escaping ist der Knackpunkt
Die gesamte Komponente ist ein Befehlsargument, daher müssen Anführungszeichen im Inneren den Befehls-Parser überleben. In einem Befehlsblock gibst du sie direkt ein. In einer Funktionsdatei ist keine Backslash-Maskierung erforderlich. In einem /give Beschriebenen Buch ist das JSON ein String innerhalb eines Strings und benötigt Maskierung – das ist der Fall, der unleserliche Wände von \" erzeugt.
Faustregel: Wenn du Textkomponenten in eine Item-Komponente verschachtelst, erstelle sie mit einem Tool statt von Hand.
Selektoren innerhalb von Text
{"selector":"@p","separator":{"text":", "}}
wird zur Sendezeit in Spielernamen aufgelöst. {"score":{"name":"@s","objective":"Kills"}} ruft einen Scoreboard-Wert ab. Beides ist besser, als selbst Werte zu verketten.
Übersetzungs-Keys reisen über Sprachen hinweg
{"translate":"block.minecraft.crafting_table"}
wird in der jeweiligen Sprache jedes Spielers gerendert – 제작대 für einen koreanischen Client, 作業台 für einen japanischen. Für einen mehrsprachigen Server ist dies streng besser als das Hardcodieren von Englisch.
Erstelle die Komponente visuell, mit den Klick- und Hover-Aktionen in ihrer aktuellen Form, im Text & Display Command Builder.