MC Toolkit

Poradniki / Polecenia i dane

/execute: dlaczego kolejność as/at ma znaczenie i jak naprawdę działa store

Większość zepsutych łańcuchów execute wynika z mylenia tego, kto wykonuje komendę, z tym, gdzie jest wykonywana. Oto co zmienia każda podkomenda i jaka kolejność to naprawia.

/execute to jedna komenda udająca język skryptowy. Niemal każdy błąd sprowadza się do dwóch podkomend, które brzmią, jakby robiły to samo, a nie robią.

as zmienia KTO. at zmienia GDZIE.

  • as <target> — podmienia wykonawcę. @s oznacza teraz ten byt. Pozycja się nie zmienia.
  • at <target> — podmienia pozycję, obrót i wymiar. Wykonawca się nie zmienia.

Więc to nie robi nic pożytecznego:

execute as @e[type=zombie] run setblock ~ ~ ~ stone

Wykonuje się raz na zombie, ale zawsze u twoich stóp, więc stawia jeden blok w kółko. Poprawka to jedno i drugie:

execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone

at @s zakotwicza się na nowo na zombie, które właśnie wybrało as. as … at @s to najczęstsza para w całej komendzie, a zapomnienie at @s to najczęstszy błąd.

Kolejność jest od lewej do prawej i się kumuluje

Podkomendy wykonują się po kolei, każda modyfikuje kontekst, który widzi następna:

execute as @a at @s positioned ^ ^ ^3 run particle flame
  1. as @a — jedno przejście na gracza
  2. at @s — przejście do tego gracza
  3. positioned ^ ^ ^3 — 3 bloki przed tym, na co patrzy

Zamień kroki 2 i 3, a positioned ^ ^ ^3 zostanie wyliczone z twojej pozycji i kierunku — potem at @s to wyrzuca, przeskakując z powrotem do gracza, więc przesunięcie przepada całkowicie.

Caret kontra tylda

  • ~ ~ ~ — względem pozycji, wyrównane do osi świata
  • ^ ^ ^ — względem kierunku patrzenia: lewo, góra, przód

Współrzędne caret są powodem, dla którego positioned ^ ^ ^3 oznacza „z przodu”, a ~ ~ ~3 oznacza „3 bloki na południe”. Mieszanie obu notacji w jednej trójce współrzędnych to błąd składni.

store to wartość zwracana, nie zmienna

store przechwytuje to, co komenda zwraca — zwykle liczbę sukcesów lub wartość wyniku:

execute store result score @s Count run data get entity @s Inventory

Dwie rzeczy, które ludzie robią źle:

  • result kontra success. result to liczba, którą produkuje komenda; success to 1 lub 0 w zależności od tego, czy się wykonała. Liczenie bytów wymaga result.
  • store idzie przed run i dotyczy komendy po run, a nie łańcucha podkomend.

if kontra unless działają zwarciowo

if i unless filtrują — łańcuch zatrzymuje się tam, gdy test zawiedzie. Wiele klauzul if to AND. Nie ma OR; do tego potrzeba dwóch osobnych komend albo predykatu.

execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...

Buduj łańcuch podkomenda po podkomendzie, z kontekstem pokazywanym na każdym kroku, w Advanced Command Builder — obsługuje też data, item, loot, schedule, particle i playsound z tego samego formularza.

Komendy zaawansowane — Execute i Data →

Więcej poradników

Zobacz wszystkie →