/execute: as/at sırasının önemi ve store'un çalışma şekli
Çoğu hatalı execute zinciri, komutu kimin çalıştırdığı ile nerede çalıştırdığını karıştırmaktan kaynaklanır. İşte her alt komutun neyi değiştirdiği ve bunu düzelten sıra.
/execute, tek bir komut gibi görünen bir betik dilidir. Neredeyse her hata, aynı şeyi yapıyor gibi görünen ama yapmayan iki alt komuttan kaynaklanır.
as KİMİ değiştirir. at NEREYİ değiştirir.
as <target>— yürütücüyü değiştirir.@sartık o varlık anlamına gelir. Konum değişmez.at <target>— konumu, dönüşü ve boyutu değiştirir. Yürütücü değişmez.
Yani bu hiçbir işe yaramaz:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Her zombi için bir kez çalışır, ancak her zaman sizin ayaklarınızın dibinde, bu yüzden aynı bloğu tekrar tekrar yerleştirir. Çözüm ikisini birden kullanmaktır:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s, as tarafından seçilen zombiye yeniden sabitlenir. as … at @s, tüm komuttaki en yaygın eşleşmedir ve at @s'yi unutmak en yaygın hatadır.
Sıra soldan sağadır ve birikir
Alt komutlar sırayla çalışır, her biri bir sonrakinin gördüğü bağlamı değiştirir:
execute as @a at @s positioned ^ ^ ^3 run particle flame
as @a— oyuncu başına bir geçişat @s— o oyuncuya hareket etpositioned ^ ^ ^3— baktıkları yerin 3 blok önüne
- ve 3. adımları değiştirirseniz, şapka işareti ofseti onların dönüşü yerine sizin dönüşünüzden ölçülür.
Şapka işareti (caret) ve tilde
~ ~ ~— konuma göre, dünya eksenlerine hizalı^ ^ ^— bakış yönüne göre: sol, yukarı, ileri
Şapka işareti koordinatları, positioned ^ ^ ^3'in "önünde" ve ~ ~ ~3'un "3 blok güneyde" anlamına gelmesinin nedenidir. İki gösterimi tek bir koordinat üçlüsünde karıştırmak bir sözdizimi hatasıdır.
store bir dönüş değeridir, değişken değil
store, komutun döndürdüğü şeyi yakalar — genellikle bir başarı sayısı veya bir sonuç değeri:
execute store result score @s Count run data get entity @s Inventory
İnsanların yanlış anladığı iki şey:
resultilesuccessarasındaki fark.result, komutun ürettiği sayıdır;successise çalışıp çalışmadığına dair 1 veya 0'dır. Varlıkları saymak içinresultgerekir.store,run'den önce gelir verun'den sonraki komuta uygulanır, alt komut zincirine değil.
if ve unless kısa devre yapar
if ve unless filtreler — test başarısız olduğunda zincir orada durur. Birden fazla if maddesi bir VE'dir (AND). VEYA (OR) yoktur; bunun için iki ayrı komut veya bir koşul gerekir.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Zinciri, her adımda gösterilen bağlamla birlikte, Gelişmiş Komut Oluşturucu içinde alt komut alt komut oluşturun — aynı formdan veri, eşya, ganimet, zamanlama, parçacık ve ses çalmayı da kapsar.