единственное, что приходит в голову, это создавать структуру на разных координатах и клонировать в необходимое место. первый раз сталкиваюсь с подобной проблемой. тот ии кстати, имел ввиду использованте датапака, для изменения параметров структур
впиши эти команды, в 2 цикличных командных блока
execute as @e[type=!player] at @s unless entity @e[type=arrow,distance=..2] run data merge entity @s {Invulnerable:1b}
execute as @e[type=!player] at @s if entity @e[type=arrow,distance=..2] run data merge entity @s {Invulnerable:0b}
1.13+
если не ослеп ещё, должен был увидеть, что там используются не падающие блоки, а block display
(это не оскорбление)
используй сайт bdengine, есть гайды, по созданию анимаций в этом интерфейсе. советую посмотрю
чтобы были отдельные снежки, с отдельной функцией, понадобится ±3 командных блока и отдельная комнада, на выдачу.
вот самый упрощённый вариант (1.13+ java):
execute at @e[type=snowball] unless block ~ ~-.4 ~ air run effect give @a[distance=..3] blindness 4 0 true
поставь командный блок, впиши команду. установи параметры: всегда активен; цикличный.
для отключения вывода команд в чат: /gamerule commandblockOutPut false
мой вариант распространяется на все брошенные снежки
используй сайты-генераторы команд, так же можешь посмотреть готовый формат nbt любой сущности, наведя курсор на цель, вписав команду /data get entity, и вставить в селектор предложенный UUID. в чате высветятся все nbt данные сущности
могу только предложить использовать датапак, который при входе в мир очистит ближайшую территорию от командных блоков. ещё как вариант NBTExplorer. в следующий раз делай бэкапы
добавь тег enemy к каждому монстру, затем установи команду :
/execute unless entity @e[tag=enemy] run ...
за место "..." впиши необходимую команду, выполняемую после конца волны