/tellraw — komponenty tekstowe: click_event, hover_event i dlaczego twoja wiadomość nic nie pokazuje
Jeden zły nawias sprawia, że tellraw nie wysyła nic do swoich celów. Oto kształt komponentu, akcje kliknięcia i najechania, które faktycznie działają w czacie, oraz zasada escapowania, którą wszyscy pomijają.
/tellraw przyjmuje komponent tekstowy, a tryb awarii jest mało pomocny: źle zbudowany komponent nie tworzy żadnej wiadomości dla nikogo ze swoich celów — jedyny błąd trafia do osoby, która wykonała polecenie, albo do wyniku bloku poleceń, gdzie nikt nie patrzy. Wszystko poniżej dotyczy tego, jak od razu nadać temu właściwy kształt.
Trzy poprawne kształty
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
Forma listy jest tą, której warto używać do czegokolwiek ciekawszego, bo każdy element może nieść własne formatowanie. Formatowanie pierwszego elementu jest dziedziczone przez resztę, o ile go nie nadpiszą — dlatego ludzie dostają nagle całą wiadomość na złoto. Zacznij listę od pustego ciągu, żeby tego uniknąć:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Akcje kliknięcia
click_event przyjmuje akcję plus własne pole tej akcji — nie ma wspólnego value:
| Akcja | Pole | Uwaga |
|---|---|---|
run_command | command: "/spawn" | Wykonuje się jako gracz, na jego poziomie uprawnień |
suggest_command | command: "/msg Steve " | Wypełnia pole czatu, nie wysyła |
open_url | url: "https://…" | Pyta przed otwarciem |
copy_to_clipboard | value: "any text" | Najprzyjaźniejsza do udostępniania współrzędnych |
change_page | page: 2 | Tylko książki |
run_command ma pułapkę: wykonuje się z uprawnieniami klikającego gracza, a nie bloku poleceń. Menu, które wywołuje /gamemode creative, nic nie zrobi zwykłemu graczowi.
Akcje najechania
"hover_event":{"action":"show_text","value":["Click to teleport"]}
show_text, show_item i show_entity. Zwróć uwagę na nazwy — starsze poradniki używają hoverEvent, clickEvent i contents, które 1.21.5 zastąpiło przez hover_event, click_event oraz, dla show_text, value. Ta zmiana nazw odpowiada za mnóstwo martwych podpowiedzi najechania skopiowanych z tutoriali.
Escapowanie to miejsce, w którym się to psuje
Cały komponent to jeden argument polecenia, więc cudzysłowy w środku muszą przetrwać parser poleceń. W bloku poleceń wpisz go bezpośrednio. W pliku funkcji escapowanie backslashem nie jest potrzebne. W zapisanej książce /give strony też są komponentami tekstowymi, zapisanymi jako SNBT — od 1.21.5 bez escapowania ciągu wewnątrz ciągu, a strona wciąż zapisana jako zescapowany ciąg JSON pokazuje się teraz jako dosłowny tekst wraz z cudzysłowami.
Zasada praktyczna: jeśli zagnieżdżasz komponenty tekstowe w komponencie przedmiotu, zbuduj to narzędziem, a nie ręcznie.
Selektory w tekście
{"selector":"@p","separator":{"text":", "}}
zamienia się na nazwy graczy w momencie wysyłania. {"score":{"name":"@s","objective":"Kills"}} pobiera wartość z tablicy wyników. Oba biją próby samodzielnego sklejania wartości.
Klucze tłumaczeń podróżują między językami
{"translate":"block.minecraft.crafting_table"}
renderuje się w języku każdego gracza — 제작대 dla klienta koreańskiego, 作業台 dla japońskiego. Dla serwera wielojęzycznego to zdecydowanie lepsze niż wpisywanie angielskiego na sztywno.
Buduj i podglądaj polecenia tekstu oraz wyświetlania w Kreatorze poleceń tekstu i wyświetlania.