Как сделать команду, которая будет выполняться, если в мире присутствует хотя бы один блок определенного типа

Мне нужно сделать команду, чтобы я мог разместить в мире, например, блок белой шерсти и под этим блоком будет выполняться эта команда:

summon minecraft:item ~ ~ ~ {Tags:["123"],PickupDelay:32767,Item:{id:"minecraft:apple",Count:1b}}

Версия майнкрафта: 1.20.1

Я не понимаю, почему это не работает:

execute if block ~ ~ ~ minecraft:white_wool run summon minecraft:item ~ ~-1 ~ {Tags["123"],PickupDelay:32767,Item:{id:"minecraft:apple",Count:1b}}

или

execute unless block ~ ~ ~ minecraft:white_wool run summon minecraft:item ~ ~-1 ~ {Tags["123"],PickupDelay:32767,Item:{id:"minecraft:apple",Count:1b}}

Ответы (1 шт):

Автор решения: Ростислав

Прочитайте инструкцию к команде execute на вики.

Она работает так: /execute [модификаторы] run <команда>

Модификаторы определяют где, как, от чьего имени и при каких условиях будет выполнена команда.

В вашем случае, вы не указываете, от чьего имени будет выполнена команда, так что она будет выполняться от имени и на позиции игрока(или командного блока), вводящего эту команду. if block ~ ~ ~ minecraft:white_wool проверяет условие, что на текущих координатах расположен блок шерсти. Если это так, то выполнится указанная команда. unless - наоборот, проверяет, что условие НЕ выполняется.

Можно сделать так, чтобы команда выполнялась от имени всех игроков через as @a после чего проверять, стоит ли игрок на указанном блоке через at @s if block ~ ~-1 ~ minecraft:white_wool, после чего вводить run summon minecraft:item ~ ~-1 ~ {Tags["123"],PickupDelay:32767,Item:{id:"minecraft:apple",Count:1b}}.

Если же вы хотите, чтобы команда выполнялась вне зависимости от того, где стоит игрок, то вы можете только вручную указывать координаты определенного блока через модификатор positioned -1020 64 2051. Нет способа выполнить execute через указание ID блоков где нужно их выполнять.

(Хотя вы можете создать невидимый, неуничтожимый, неподверженный гравитации арморстенд с каким-нибуть id и призывать его через яйцо, после чего через execute at @e[type=minecraft:armor_stand, tag=<ваш тег>] выпонять вашу команду)

→ Ссылка