Rehberler / Komutlar ve Veriler
/execute: as/at sıralaması neden önemli ve store aslında nasıl çalışır
Bozuk execute zincirlerinin çoğu, komutu kimin çalıştırdığı ile nerede çalıştırdığının karıştırılmasından kaynaklanır. İşte her alt komutun neyi değiştirdiği ve sıralamanın bunu nasıl düzelttiği.
/execute, kendini bir betik dili gibi gösteren tek bir komuttur. Neredeyse tüm hatalar, aynı işi yapıyormuş gibi görünen ama yapmayan iki alt komuta dayanır.
as KİM'i değiştirir. at NEREDE'yi 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 şu işe yarar bir şey yapmaz:
execute as @e[type=zombie] run setblock ~ ~ ~ stone
Her zombi için bir kez çalışır, ama her zaman sizin ayağınızın dibinde, yani aynı yere tekrar tekrar blok koyar. Çözüm ikisini birlikte kullanmaktır:
execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone
at @s, as'nın az önce seçtiği zombiye yeniden bağlanır. as … at @s, tüm komut içindeki en yaygın eşleşmedir ve at @s'yı unutmak en yaygın hatadır.
Sıralama 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— her oyuncu için bir geçişat @s— o oyuncuya gitpositioned ^ ^ ^3— baktıkları yönün 3 blok önü
- ve 3. adımları yer değiştirirseniz
positioned ^ ^ ^3sizin konumunuz ve baktığınız yöne göre hesaplanır — sonraat @soyuncuya geri sıçrayarak bunu çöpe atar, böylece kaydırma tamamen kaybolur.
Şapka ile tilde
~ ~ ~— konuma göre, dünya eksenlerine hizalı^ ^ ^— baktığınız yöne göre: sol, yukarı, ileri
Şapka koordinatları, positioned ^ ^ ^3'nın "önünde" ve ~ ~ ~3'nın "3 blok güneyde" anlamına gelmesinin sebebidir. İki gösterimi tek bir koordinat üçlüsünde karıştırmak söz dizimi hatasıdır.
store bir değişken değil, dönüş değeridir
store, komutun döndürdüğü şeyi yakalar — genellikle bir başarı sayısı veya sonuç değeri:
execute store result score @s Count run data get entity @s Inventory
İnsanların yanlış yaptığı iki şey:
resultilesuccess.resultkomutun ürettiği sayıdır;successise çalışıp çalışmadığını gösteren 1 veya 0'dır. Varlık saymak içinresultgerekir.store,run'dan önce gelir verun'dan sonraki komuta uygulanır, alt komut zincirine değil.
if ile unless kısa devre yapar
if ve unless filtreler — test başarısız olduğunda zincir orada durur. Birden fazla if yan tümcesi bir VE'dir. VEYA yoktur; bunun için iki ayrı komut veya bir predicate gerekir.
execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...
Zinciri her adımda bağlamı görerek tek tek alt komutla kurun — Advanced Command Builder bunu yapar; aynı formdan data, item, loot, schedule, particle ve playsound'u da kapsar.