Функция находится в пакете поведения
Для первого проекта создайте WorkshopFunctions/manifest.json по коду ниже и WorkshopFunctions/functions/workshop. Функции находятся рядом с манифестом внутри Behavior Pack, как в справке Microsoft. Манифест формата 2 с модулем data подходит для этого примера; [1,21,0] задаёт нижнюю границу, а не текущую версию игры.
Два UUID в примере различаются. Для собственного проекта получите два новых значения командой [guid]::NewGuid().ToString() в PowerShell. На Windows разместите проект в %appdata%\Minecraft Bedrock\users\shared\games\com.mojang\development_behavior_packs согласно Getting Started.
Для импорта на доступной платформе упакуйте содержимое WorkshopFunctions, сохранив manifest.json в корне ZIP, и переименуйте архив в .mcpack. Откройте его через Minecraft. В новом творческом мире включите Читы / Cheats, затем Наборы поведения / Behavior Packs → Мои наборы / My Packs → WorkshopFunctions → Активировать / Activate.
{
"format_version": 2,
"header": {
"name": "WorkshopFunctions",
"description": "Учебный пакет LonelyCraft",
"uuid": "66714edc-cc70-438c-92d0-fbb09d781db5",
"version": [
1,
0,
0
],
"min_engine_version": [
1,
21,
0
]
},
"modules": [
{
"type": "data",
"uuid": "420c5a52-d0b4-4467-8141-a805f1d2dd72",
"version": [
1,
0,
0
]
}
]
}Первый файл с сообщением
Создайте functions/workshop/hello.mcfunction с одной строкой из блока ниже. Файл должен быть обычным UTF-8 текстом, без расширения .txt. Внутри команды пишутся без начального /; в чате запуск имеет вид /function workshop/hello.
После сохранения и повторного входа в тестовый мир выполните /function workshop/hello. Ожидается одно сообщение Function loaded. Если функция не находится, проверьте активный пакет, имя файла и отсутствие лишнего внешнего каталога внутри архива.
- Сохраните манифест и файл
hello.mcfunction, затем импортируйте или активируйте проект. - В чате выполните
/function workshop/helloи найдите одно сообщениеFunction loaded. - Повторите команду: должно появиться ещё ровно одно сообщение.
- Перейдите к счёту только после успешного запуска: так ошибка селектора не смешается с ошибкой загрузки пакета.
say Function loadedДобавьте понятную операцию со счётом
В чате один раз выполните /scoreboard objectives add workshop_points dummy, затем /scoreboard players set @s workshop_points 0 и /scoreboard objectives setdisplay sidebar workshop_points. Сохраните следующий код как functions/workshop/award.mcfunction.
Трижды вызовите /function workshop/award из чата игрока: справа ожидается 3. Для кнопки в командном блоке используйте execute as @p at @s run function workshop/award; ближайший игрок выбирается относительно блока, поэтому это подходит для локального учебного стенда. Синтаксис execute отдельно задаёт исполнителя через as и позицию через at.
scoreboard players add @s workshop_points 1
say Award function calledИнициализация отдельно
Создание цели не следует бездумно повторять при каждой выдаче очка. Цель создаётся один раз в подготовке, а рабочая функция изменяет счёт. Если процедура запуска должна быть повторяемой, продумайте обработку уже существующего состояния и не считайте ошибку повторного add нормальным проектом.
Выдача отдельно
Функция award выполняет конкретное действие и не должна заодно сбрасывать очки. Разделяйте подготовку, награду и очистку на небольшие файлы. Тогда тестирование одной операции не уничтожает результаты другой, а названия объясняют назначение без чтения всех строк.
Позиция и исполнитель
Относительные координаты зависят от места выполнения. Ручная функция игрока и та же функция из командного блока могут действовать в разных местах. Сначала используйте безопасные сообщения и счёт, затем проверяйте координаты в отдельном малом опыте.
Для строительной функции запишите, откуда она должна запускаться и в каком измерении. Команда fill не знает замысел автора и может изменить неправильную область. Абсолютные координаты помогают повторяемому проекту, но тоже требуют проверки выбранного мира. Не подключайте опасную функцию к циклу до успешного ручного теста.
Селектор @a обращается к всем подходящим игрокам, @p — к ближайшему в конкретном контексте, @s — к текущему исполнителю. Эти значения не являются взаимозаменяемыми. В многопользовательском опыте проверьте два игрока, чтобы награда не уходила случайному соседу.
Автоматический запуск
Если требуется постоянная проверка, tick.json размещается в functions/tick.json. В примере ниже он вызывает workshop/poll, но сама функция сначала проверяет метку workshop_ready.
В functions/workshop/poll.mcfunction запишите execute as @a[tag=workshop_ready] at @s run function workshop/award и второй строкой tag @a[tag=workshop_ready] remove workshop_ready. Команда /tag @s add workshop_ready выдаёт одно очко на следующем проходе и снимает метку. Повторный запуск требует нового добавления метки.
Для этой демонстрации не подключайте award прямо в tick.json: каждое выполнение прибавит очко. Остановить тест можно снятием метки и удалением учебной записи из tick.json; ручной вызов функции продолжает работать. Перед автоматизацией проверьте двух игроков, чтобы метка одного не меняла результат другого.
{
"values": ["workshop/poll"]
}Диагностика и выпуск
Функция не найдена: проверьте активный пакет, путь, имя и расширение. Сообщение есть, счёт не меняется: проверьте цель и исполнителя. Действие происходит не там: проверьте позицию и execute. Эти случаи нужно разделять, чтобы исправление не ломало рабочие части.
После теста сохраните набор функций, описание запуска и проверенную версию Bedrock. Для общего мира добавьте понятный способ остановить автоматические действия. Обновление испытайте на копии, включая повторный вход и очистку. Функции удобны тогда, когда каждая операция имеет ясный вход и ожидаемый результат.
Подготовить цель и проверить значения помогает материал счётчик очков.
Для запуска на карте пригодится инструкция ручной вход через блок.



