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 погляд

Поміняйте місцями кроки 2 і 3, і зміщення за каретом вимірюватиметься від вашого повороту замість їхнього.

Карет проти тильди

  • ~ ~ ~ — relative to позиція, вирівняна за осями світу
  • ^ ^ ^ — relative to напрямок: ліворуч, угору, вперед

Ось чому координати з каретом 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 →