/tellraw Textkomponenten: click_event, hover_event und warum deine Nachricht nichts anzeigt
Eine einzige falsche Klammer sorgt dafür, dass tellraw nichts an seine Ziele sendet. Hier ist der Aufbau der Komponente, die Click- und Hover-Aktionen, die im Chat tatsächlich funktionieren, und die Escaping-Regel, die alle übersehen.
/tellraw nimmt eine Textkomponente entgegen, und das Fehlerverhalten ist wenig hilfreich: Eine fehlerhaft aufgebaute Komponente erzeugt für niemanden, an den sie gerichtet ist, eine Nachricht — der einzige Fehler geht an denjenigen, der den Befehl ausgeführt hat, oder in die Ausgabe eines Befehlsblocks, wo niemand hinsieht. Im Folgenden geht es darum, den Aufbau gleich beim ersten Mal richtig hinzubekommen.
Die drei gültigen Formen
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
Die Listenform ist die richtige Wahl für alles Interessante, denn jedes Element kann seine eigene Formatierung tragen. Die Formatierung des ersten Elements wird von den übrigen übernommen, sofern sie sie nicht überschreiben — deshalb bekommen Leute unerwartet eine komplett goldene Nachricht. Beginne eine Liste mit einer leeren Zeichenkette, um das zu vermeiden:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Click-Aktionen
click_event nimmt eine Aktion plus das jeweilige Feld dieser Aktion entgegen — es gibt kein gemeinsames value:
| Aktion | Feld | Hinweis |
|---|---|---|
run_command | command: "/spawn" | Wird als der Spieler ausgeführt, auf dessen Berechtigungsstufe |
suggest_command | command: "/msg Steve " | Füllt das Chatfeld, sendet aber nicht |
open_url | url: "https://…" | Fragt nach, bevor geöffnet wird |
copy_to_clipboard | value: "any text" | Die freundlichste Variante zum Teilen von Koordinaten |
change_page | page: 2 | Nur für Bücher |
run_command hat eine Tücke: Es wird mit den Berechtigungen des klickenden Spielers ausgeführt, nicht denen des Befehlsblocks. Ein Menü, das /gamemode creative aufruft, bewirkt für einen normalen Spieler nichts.
Hover-Aktionen
"hover_event":{"action":"show_text","value":["Click to teleport"]}
show_text, show_item und show_entity. Achte auf die Namen — ältere Anleitungen verwenden hoverEvent, clickEvent und contents, die 1.21.5 durch hover_event, click_event und, für show_text, durch value ersetzt hat. Diese Umbenennung erklärt eine Menge toter Hover-Tooltips, die aus Tutorials kopiert wurden.
Beim Escaping geht es schief
Die gesamte Komponente ist ein einziges Befehlsargument, also müssen Anführungszeichen darin den Befehls-Parser überstehen. In einem Befehlsblock tippst du sie direkt ein. In einer Funktionsdatei ist Backslash-Escaping nicht nötig. In einem /give Beschriebenen Buch sind die Seiten ebenfalls Textkomponenten, geschrieben als SNBT — kein String-in-String-Escaping seit 1.21.5, und eine Seite, die noch als escapte JSON-Zeichenkette geschrieben ist, erscheint jetzt als wörtlicher Text samt ihrer Anführungszeichen.
Faustregel: Wenn du Textkomponenten in eine Item-Komponente verschachtelst, baue sie mit einem Tool statt von Hand.
Selektoren innerhalb von Text
{"selector":"@p","separator":{"text":", "}}
wird beim Senden zu Spielernamen aufgelöst. {"score":{"name":"@s","objective":"Kills"}} holt einen Scoreboard-Wert. Beides ist besser, als zu versuchen, Werte selbst zusammenzusetzen.
Translate-Keys wandern über Sprachen hinweg
{"translate":"block.minecraft.crafting_table"}
wird in der jeweiligen Sprache jedes Spielers dargestellt — 제작대 für einen koreanischen Client, 作業台 für einen japanischen. Für einen mehrsprachigen Server ist das strikt besser, als Englisch fest zu verdrahten.
Baue und teste Text- und Display-Befehle im Text & Display Command Builder.