Содержание статьи
О клеточных автоматах слышали все, включая школьников. Самый известный — игра «Жизнь» — был запущен уже примерно везде, и даже в Minecraft умельцы его уже запускали. Только вот все проекты были огромными, а принципы работы никто не объяснял.
Поэтому я решил создать свою реализацию, которая хоть и не претендует на оптимальность, но зато полностью понятна. По дороге разберем главные команды, на основе которых можно реализовать в «Майнкрафте» почти любой алгоритм.
Команды
Все без исключения команды в игре обрабатывает сервер. Команд в стандартной немодифицированной и актуальной на данный момент версии Minecraft 1.21 всего 68. Из них широко используются в механизмостроении около десяти.
Команды в Minecraft можно выполнять в двух разных местах: в чате и в командном блоке. Длина команды в чате ограничена, кроме того, большинство команд доступны только админам (операторам) сервера. И если вторая проблема в одиночной игре не стоит, то справиться с ограничением по длине помогает только командный блок.
Между способами запуска есть и еще два отличия: во‑первых, перед командой в чате обязательно нужно ставить слеш (/
), в то время как в командном блоке это не требуется; во‑вторых, для команд в чате по умолчанию определен исполнитель (в командных блоках его нужно указывать явно).
Для начала предлагаю получить тот самый командный блок. Пиши в чат /
либо просто поищи в инвентаре в творческом режиме. Еще не знаешь, как в него переключиться? Нажми F3 + F4 и кнопкой F4 листай режимы, пока не дойдешь до творческого.
Теперь разберемся с тем, кто будет исполнителем команды. Этот параметр зовется селектором и используется почти в каждой команде.
Селекторы (@)
Селекторы отвечают за то, кто будет исполнителем (или кому будет адресована команда). Очевидно, что целью или исполнителем может быть только сущность, но менее очевидно, что сущности — это не только игроки и животные, но и, к примеру, летящие стрелы, выброшенные предметы, куриные яйца, падающие блоки и даже картины и стойки для брони (хоть они и выглядят как блоки).
info
Еще существуют блоки‑сущности, но их мы в этой статье рассматривать не будем, поскольку селекторами на них указать нельзя и их особые свойства в механизмах используются редко.
Обычно селекторы обозначаются всего двумя символами, первый из которых — @
. Селектором может быть никнейм игрока или идентификатор сущности (GUID), а может быть и выражение, которое при исполнении развернется в идентификатор цели. В игре есть следующие общие селекторы:
-
@r
— случайный игрок; -
@s
— исполнитель команды; -
@p
— ближайший игрок; -
@a
— все игроки; -
@e
— все сущности.
Как ты видишь, почти все селекторы ссылаются на игроков, но в некоторых ситуациях нужно работать не с игроками. Что делать тогда? Тут в дело вступают уточняющие селекторы, которые указываются в квадратных скобках после самого селектора (без пробела, должно получиться в духе @e[
). Поскольку уточняющие селекторы очень важны в любом механизме, рассмотрим каждый из них поподробнее. Разумеется, их можно комбинировать между собой.
type
Первый и самый часто используемый селектор. После type=
нужно написать тип сущности‑адресата. Например, ты хочешь выбрать всех жителей — в таком случае ты напишешь type=villager
. Но если вдруг ты захочешь выбрать все стрелы, то уже банальное type=arrow
не пойдет, потому что в игре присутствуют три типа сущностей‑стрел.
Первый вариант решения проблемы — сделать три командных блока, по одному на каждый тип стрел (обычные, с эффектами и спектральные).
Второй вариант — использовать теги, которые предусмотрительно назначены каждой сущности, блоку и даже структуре в игре. Например, тег #minecraft:
указывает на стрелы всех типов. Для тегов уже важно указывать пространство имен, к которому они принадлежат (оно указывается перед двоеточием).
Для всего остального пространство имен тоже можно указывать, но не всегда оно обязательно, потому что все стандартные игровые ресурсы находятся в пространстве имен minecraft
, которое и используется по умолчанию, если не указано явно.
Еще можно использовать восклицательный знак для отрицания — к примеру, type=!
будет означать «все сущности, кроме игроков».
scores
Позволяет обратиться к сущности с определенным значением заданного scoreboard — их мы подробно разберем ниже. В общем виде будет выглядеть так:
@e{scores={"Название счетчика"=m..n}}
Здесь m
и n
— нижняя и верхняя допустимые границы счетчика.
distance
Этот параметр позволяет указать расстояние от исполнителя команды до целевой сущности. Задается оно диапазоном m..
, где m
и n
могут быть дробными и любое из них может отсутствовать (тогда соответствующий предел не будет задан). Предположим, тебе надо выбрать все стойки для брони на расстоянии больше 10 блоков от тебя, но меньше 24,3. Тогда ты напишешь:
@e[type=armor_stand,distance=10..24.3]
limit
Ограничивает количество выбираемых сущностей, то есть будет выбрано не больше чем limit
целей. Например, если на сервере три человека, а ты хочешь обратиться к двум случайным, пиши @a[
.
nbt
Позволяет обратиться к сущности с определенным NBT. Что такое NBT? Читай дальше!
NBT-теги
Каждый объект в игре описывается в формате NBT-тегов (Named Binary Tag — именованный двоичный тег). Это очень обширная тема, на которую не хватит и целой статьи, поэтому здесь я рассмотрю только самые базовые понятия.
Хотя в процессе обычной игры непосредственное взаимодействие с NBT не предусмотрено, ты можешь задействовать эти теги в командах при работе с игровым миром непредусмотренными разработчиком способами. В целом любые изменения в любую часть мира или в любой предмет можно внести просто редактированием NBT соответствующих объектов.
Например, ты хочешь выдать себе алмазную кирку с зачарованием эффективности 40-го уровня. Тогда ты должен написать следующее:
/give @p diamond_pickaxe{Enchantments:[{id:efficiency,lvl:40}]}
Как видишь, NBT задается в виде обычного JSON, но, поскольку эта часть игры скрыта от рядового игрока, автодополнение тут не работает и документация отсутствует для большей части стандартного Minecraft, а моды не покрыты вообще. Что делать в таком случае?
Посмотреть или отредактировать NBT любой части мира поможет NBTExplorer. Если хочешь посмотреть в NBT-параметры какого‑нибудь хитрого предмета, сохраняй мир, на котором у тебя есть предмет с нужным NBT, и ковыряй эксплорером.

Например, недавно мне нужно было выдать командой оружие из мода Timeless Classics and Zero (один из золотых модов, упомянутых в прошлой статье по Minecraft). Дело осложнялось тем, что все виды оружия имели одинаковый ID (tacz:
), а конкретный вид задавался дополнительным тегом.
Но даже когда я задал этот тег, стрелять пушка все равно отказывалась, потому что надо было задать еще несколько параметров, которые не были документированы вообще нигде. Без NBTExplorer или другого способа подсмотреть NBT задача была бы нерешаемой, а с ними получилось выяснить, что обязательный к указанию режим стрельбы может быть любым, и я смог сделать пистолет, стреляющий очередями.
Чтобы скопировать предмет со всеми NBT, кликни по нему в инвентаре колесиком мыши, удерживая Ctrl. Клик без зажатого Ctrl скопирует блок без тегов. Например, если ты кликнешь колесиком по командному блоку, в который введена команда, скопируется пустой командный блок, а если будешь при этом держать Ctrl — он скопируется сразу с командой. Это полезно, когда в механизме используется много похожих командных блоков. Но работает это, разумеется, с любыми блоками, а не только с командными.
Волшебная палочка
Еще одно применение прямого редактирования NBT — постройка карт. Все знают, как сложно порой ориентировать блок так, как тебе нужно. Вместо того чтобы ломать блок и подбирать положение, можно использовать палочку отладки. Она позволяет менять состояние блока, не ломая его, в обход всех игровых правил, в том числе не обновляя соседние. Используется она так: левой кнопкой мыши выбираешь изменяемый параметр, правой задаешь его значение.
Как же заполучить эту палочку? В последних версиях ее можно найти в инвентаре креатива, но в общем случае она выдается командой /
.
Так, например, можно сделать воду в аду (как ты знаешь, стандартными способами поместить ее там невозможно). Для этого нужно поставить подмостки (они же строительные леса), взять палочку отладки, прокликать левой кнопкой мыши до параметра waterlogged
и поменять его на true
. При этом блоки не обновляются, так что нужно принудить наш отредактированный блок обновиться — для этого достаточно просто поставить рядом любой блок.

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

Координаты
Координаты в Minecraft задаются тремя числами. Посмотреть их можно в меню отладки, которое открывается по нажатию F3, или с помощью модов (например, мини‑карты). Система координат очень простая, потому что мир измеряется прямоугольной сеткой, а не по пикселям, как в большинстве игр.

Координаты считаются от центра мира, и их направление можно определить по трем цветным полоскам в центре экрана (они видны только при включенном меню отладки). Важное отличие от других игр — высота задается координатой Y, а не Z.
В большинстве случаев абсолютные координаты неудобны, потому что ты хочешь откладывать расстояния от заданной точки, а не от центра мира. Тогда пригодится второй тип координат — относительные. Они работают так же, как и абсолютные, только точкой отсчета считается не центр мира, а исполнитель команды.
Например, если ты хочешь заспавнить крипера на три блока выше себя, выполни /
. Координаты всегда идут в порядке X
, и, если смещение не указано, оно по умолчанию считается равным нулю. Конечно же, смещение может быть и отрицательным (например, ~-2
).
Абсолютные и относительные координаты можно смешивать в рамках одной команды, то есть часть координат можно задать относительными, а часть — абсолютными и все будет работать.
info
У всех сущностей высотой в два блока, включая игроков, мобов и стойки для брони, основным блоком считается нижний — блок ног. То есть, когда ты ссылаешься на сущность, для тебя она вся находится в своем нижнем блоке.
Кроме абсолютных и относительных координат, есть еще один тип, который позволяет задавать координаты относительно взгляда сущности. Я сознательно говорю о сущностях в целом, а не только об игроках, потому что направление взгляда имеет каждая сущность, даже выброшенный предмет. Обозначаются такие координаты символом ^
.
Например, команда /
установит камень на три блока левее твоего взгляда, на пять выше и на десять дальше его источника. Неочевидный момент: источник взгляда находится по координатам сущности, то есть взгляд игрока будет рассчитываться от его ног. Что? Да!
Где это можно использовать — вопрос хороший. В голову приходит разве что какой‑нибудь скример, но в реальном картостроении это почти не применяется. Если есть еще идеи — пиши в комментариях!
Собственно команды
Если рядовой игрок пользуется стандартными игровыми механиками, то каждый уважающий себя картодел или админ сервера обязан уметь пользоваться командами. И если с простейшими, вроде установки погоды или игрового режима, знакомы практически все (а если незнакомы — прочитают в документации), то более продвинутые команды, используемые в строительстве карт, мы разберем отдельно.
execute
Командой execute
можно казнить любого игрока выполнять другие команды, изменяя их исполнителя, добавляя условия и так далее. Все без исключения сложные алгоритмы реализуются только с помощью этой команды. В умелых руках она превращается в грозное оружие, хотя она во многом напоминает нунчаки: выглядит эффектно, но требует годы боли, чтобы научиться пользоваться. Не добавляет простоты и то, что синтаксис сильно поменялся в версии 1.13, так что старые гайды уже несколько лет как не помогают. Общий синтаксис нового execute
следующий:
/execute <операция> <аргумент>
Давай разберем пять с половиной самых важных операций.
run
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее