The Best Resource for Minecraft
The Best Resource for Minecraft

/execute: چرا ترتیب as/at مهم است و store چگونه کار می‌کند

/execute: چرا ترتیب as/at مهم است و store چگونه کار می‌کند

بیشتر زنجیره‌های execute خراب ناشی از اشتباه گرفتن اجراکننده دستور با مکان اجرای آن است. در اینجا آنچه هر زیردستور تغییر می‌دهد و ترتیبی که آن را اصلاح می‌کند آمده است.

/execute is one command pretending to be a scripting language. Almost every failure traces to two subcommands that sound like they do the same thing and do not.

as «چه کسی» را تغییر می‌دهد. at «کجا» را تغییر می‌دهد.

  • as <target> — اجراکننده را تغییر می‌دهد. @s now means that entity. **The position does

حرکت نمی‌کند.**

  • at <target> — موقعیت، زاویه چرخش و بعد را تغییر می‌دهد. **اجراکننده

تغییر نمی‌کند.**

بنابراین این کار مفیدی انجام نمی‌دهد:

execute as @e[type=zombie] run setblock ~ ~ ~ stone

به ازای هر زامبی یک بار اجرا می‌شود، اما همیشه در شما پای شما، بنابراین مدام یک بلوک را در همان‌جا می‌گذارد. راه‌حل هر دو است:

execute as @e[type=zombie] at @s run setblock ~ ~ ~ stone

at @s re-anchors to the zombie that as just selected. as … at @s is the single most common pairing in the whole command، و فراموش کردن at @s is the single most common bug.

ترتیب از چپ به راست است و اثر آن تجمیعی است

زیردستورها به ترتیب اجرا می‌شوند و هر کدام زمینه‌ای را که زیردستور بعدی می‌بیند تغییر می‌دهند:

execute as @a at @s positioned ^ ^ ^3 run particle flame
  1. as @a — one pass per player
  2. at @s — move to that player
  3. positioned ^ ^ ^3 — 3 blocks in front of where they are نگاه کردن

مراحل ۲ و ۳ را جابه‌جا کنید تا آفست caret به جای چرخش آن‌ها، از زاویه چرخش شما اندازه‌گیری شود.

Caret در مقابل tilde

  • ~ ~ ~ — relative to موقعیت، تراز شده با محورهای جهان
  • ^ ^ ^ — relative to جهت دید: چپ، بالا، جلو

مختصات Caret دلیل این است که چرا positioned ^ ^ ^3 means "in front of" and ~ ~ ~3 means "3 blocks south". Mixing the two notations in one coordinate triple is a syntax error.

store یک مقدار بازگشتی است، نه یک متغیر

store captures what the command برمی‌گرداند — معمولاً تعداد موفقیت یا مقدار نتیجه است:

execute store result score @s Count run data get entity @s Inventory

دو موردی که افراد اشتباه متوجه می‌شوند:

  • result versus success. result is the number the command produces; success

برای مشخص کردن اینکه اجرا شده یا نه 1 یا 0 است. شمارش موجودیت‌ها نیاز دارد به result.

  • store goes before run، و برای دستور بعد از run, not to the

زنجیره زیردستور اعمال می‌شود.

اتصال کوتاه if در مقابل unless

if and unless filter — the chain stops there when the test fails. Multiple if clauses are an AND. There is no OR; that needs two separate commands or a predicate.

execute as @a if entity @s[gamemode=survival] if score @s Lives matches 1.. run ...

زنجیره را زیردستور به زیردستور بسازید، در حالی که زمینه در هر مرحله نمایش داده می‌شود، در سازنده پیشرفته دستورات — همچنین data، item، loot، schedule، particle و playsound را از همان فرم پوشش می‌دهد.

امتحان ابزار: Advanced Command Builder — Execute & Data →