MC Toolkit

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. @s artı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
  1. as @a — her oyuncu için bir geçiş
  2. at @s — o oyuncuya git
  3. positioned ^ ^ ^3 — baktıkları yönün 3 blok önü
  1. ve 3. adımları yer değiştirirseniz positioned ^ ^ ^3 sizin konumunuz ve baktığınız yöne göre hesaplanır — sonra at @s oyuncuya 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:

  • result ile success. result komutun ürettiği sayıdır; success ise çalışıp çalışmadığını gösteren 1 veya 0'dır. Varlık saymak için result gerekir.
  • store, run'dan önce gelir ve run'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.

Gelişmiş komutlar — Execute ve Data →

Daha fazla rehber

Tümünü gör →