/execute: mengapa urutan as/at penting dan cara kerja store sebenarnya
Sebagian besar rantai execute yang rusak berasal dari kebingungan antara siapa yang menjalankan perintah dan di mana perintah itu dijalankan. Berikut ini apa yang diubah oleh setiap subperintah, dan urutan yang memperbaikinya.
/execute adalah satu perintah yang berpura-pura menjadi bahasa skrip. Hampir semua kegagalan bermuara pada dua subperintah yang terdengar seperti melakukan hal yang sama, padahal tidak.
as mengubah SIAPA. at mengubah DI MANA.
as <target>— menukar pelaksana.@ssekarang berarti entitas itu. Posisinya tidak berpindah.at <target>— menukar posisi, rotasi, dan dimensi. Pelaksananya tidak berubah.
Jadi ini tidak melakukan hal yang berguna:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Perintah ini berjalan sekali per zombi, tetapi selalu di kaki Anda, jadi ia menempatkan satu blok berulang-ulang. Perbaikannya adalah keduanya:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s menambatkan ulang ke zombi yang baru saja dipilih oleh as. as … at @s adalah pasangan paling umum di seluruh perintah ini, dan melupakan at @s adalah bug paling umum.
Urutannya dari kiri ke kanan, dan efeknya bertumpuk
Subperintah berjalan berurutan, masing-masing mengubah konteks yang dilihat subperintah berikutnya:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— satu putaran per pemainat @s— pindah ke pemain itupositioned ^ ^ ^3— 3 blok di depan arah pandangan mereka
Tukar langkah 2 dan 3, maka positioned ^ ^ ^3 dihitung dari posisi dan arah hadap Anda — lalu at @s membuangnya dengan kembali ke posisi pemain, sehingga offsetnya hilang sepenuhnya.
Caret versus tilde
~ ~ ~— relatif terhadap posisi, sejajar dengan sumbu dunia^ ^ ^— relatif terhadap arah hadap: kiri, atas, depan
Koordinat caret adalah alasan positioned ^ ^ ^3 berarti "di depan" dan ~ ~ ~3 berarti "3 blok ke selatan". Mencampur kedua notasi dalam satu trio koordinat adalah kesalahan sintaksis.
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 disalahpahami orang:
resultversussuccess.resultadalah angka yang dihasilkan perintah;successadalah 1 atau 0 untuk apakah perintah itu berjalan. Menghitung entitas memerlukanresult.storediletakkan sebelumrun, dan berlaku untuk perintah setelahrun, bukan untuk rantai subperintah.
if versus unless melakukan short-circuit
if dan unless menyaring — rantai berhenti di situ ketika pengujian gagal. Beberapa klausa if bersifat AND. Tidak ada OR; itu memerlukan dua perintah terpisah atau sebuah predikat.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Bangun rantai satu subperintah demi satu subperintah, dengan konteks ditampilkan di setiap langkah, di Advanced Command Builder — alat itu juga mencakup data, item, loot, schedule, particle, dan playsound dari formulir yang sama.