/execute: Mengapa Urutan as/at Penting dan Cara Kerja store
Sebagian besar rantai perintah execute yang salah berasal dari kebingungan antara siapa yang menjalankan perintah dengan di mana perintah itu dijalankan. Berikut adalah apa yang diubah oleh setiap subperintah, dan urutan yang memperbaikinya.
/execute adalah satu perintah yang berpura-pura menjadi bahasa skrip. Hampir setiap kegagalan berakar pada dua subperintah yang terdengar melakukan hal yang sama tetapi sebenarnya tidak.
as mengubah SIAPA. at mengubah DI MANA.
as <target>— menukar pelaksana.@ssekarang berarti entitas itu. Posisi tidak bergerak.at <target>— menukar posisi, rotasi, dan dimensi. Pelaksana tidak berubah.
Jadi ini tidak melakukan hal yang berguna:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Ini berjalan sekali per zombi, tetapi selalu di kaki Anda, jadi ini menempatkan satu blok berulang-ulang. Perbaikannya adalah keduanya:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s mengaitkan kembali ke zombi yang baru saja dipilih oleh as. as … at @s adalah pasangan paling umum dalam seluruh perintah, dan melupakan at @s adalah bug paling umum.
Urutan dari kiri ke kanan, dan bersifat kumulatif
Subperintah berjalan secara berurutan, masing-masing memodifikasi konteks yang dilihat oleh yang berikutnya:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— satu kali per pemainat @s— bergerak ke pemain itupositioned ^ ^ ^3— 3 blok di depan tempat mereka melihat
Tukar langkah 2 dan 3 dan offset kursor diukur dari rotasi Anda, bukan rotasi mereka.
Caret versus tilde
~ ~ ~— relatif terhadap posisi, sejajar dengan sumbu dunia^ ^ ^— relatif terhadap arah hadap: kiri, atas, depan
Koordinat caret adalah mengapa positioned ^ ^ ^3 berarti "di depan" dan ~ ~ ~3 berarti "3 blok ke selatan". Mencampur kedua notasi dalam satu rangkap tiga koordinat adalah kesalahan sintaks.
store adalah nilai kembalian, bukan variabel
store menangkap apa yang dikembalikan oleh perintah — biasanya jumlah keberhasilan atau nilai hasil:
execute store result score @s Count run data get entity @s Inventory
Dua hal yang sering salah dipahami orang:
resultversussuccess.resultadalah angka yang dihasilkan perintah;successadalah 1 atau 0 untuk apakah perintah itu berjalan. Menghitung entitas membutuhkanresult.storedatang sebelumrun, dan berlaku untuk perintah setelahrun, bukan untuk rantai subperintah.
if versus unless short-circuits
if dan unless menyaring — rantai berhenti di sana ketika tes gagal. Beberapa klausa if adalah AND. Tidak ada OR; itu membutuhkan dua perintah terpisah atau predikat.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Bangun rantai satu subperintah pada satu waktu, dengan konteks yang ditampilkan di setiap langkah, di Advanced Command Builder — ini juga mencakup data, item, loot, schedule, particle, dan playsound dari formulir yang sama.