1. Зачем нужны датапаки
- Много команд в одном месте, легко редактировать.
- Меньше «проводов» из командных блоков — меньше нагрузка.
- Чистые циклы и таймеры (в отличие от повторяющихся блоков).
- Возможность использовать предикаты и сложные теги.
- Проще переносить с сервера на сервер и шарить.
2. Структура папок
Датапак — папка в world/datapacks/. Минимально нужен файл pack.mcmeta.
my_event/
└── pack.mcmeta
└── data/
└── myevent/
└── functions/
├── start.mcfunction
├── tick.mcfunction
└── reward.mcfunction
Содержимое pack.mcmeta (версия pack_format зависит от версии Minecraft):
{
"pack": {
"description": "Событие: события",
"pack_format": 48
}
}
pack_formatменяется от версии к версии. Совет: скачайте актуальный шаблон или проверьте наminecraft.wiki.
3. Функции и вызов
Функция — это текстовый файл .mcfunction, в котором каждая строка — отдельная команда. Запускается командой:
/function myevent:start
Пример functions/start.mcfunction:
say Ивент "Скоро старт!"
tp @a[m=adventure] 0 65 0
scoreboard objectives add eventTime dummy
scoreboard players set @a eventTime 0
Полезно: в функциях можно использовать # для комментариев (создания контента).
4. Таймеры через scoreboard
Классический приём — тиковый счётчик. Вызывайте скорборд-тик каждый игровой тик через tick.mcfunction, привязанный через minecraft:tick tag.
Сначала создайте #load или привязку тика: в папке data/minecraft/tags/function/tick.json
// tick.json
{ "values": ["myevent:tick"] }
Теперь сам functions/tick.mcfunction:
# Увеличиваем счётчик для участников
execute as @a[tag=event] run scoreboard players add @s eventTime 1
# Каждые 200 тиков (10 секунд) выводим время
execute as @a[tag=event] if score @s eventTime matches 200.. run say Прошло 10 секунд!
# Через 1200 тиков (60 сек) завершаем
execute as @a[tag=event] if score @s eventTime matches 1200 run function myevent:reward
В reward.mcfunction:
give @a[tag=event] diamond 1
tag @a[tag=event] remove event
say Ивент завершён, спасибо всем!
20 тиков = 1 секунда. 1200 тиков = 60 секунд.
5. Теги и предикаты
Тег — метка, которую можно вешать через /tag. Гораздо удобнее, чем скорборд, для быстрого фильтрования.
/tag @p add event_participant
/tag @p remove event_participant
Фильтрация в командах:
/tp @a[tag=event_participant] 0 65 0
/effect give @a[tag=event_participant] speed 1 1 true
Используйте теги, чтобы ставить игроков «в очередь» автоматически: например, при входе в старт-зону вешается тег in_start, при выходе — снимается.
6. Установка и отладка
- Положите папку с датапаком в
мир/datapacks/(над уровнемdata/level.dat). - В игре запустите
/reload. - Откройте панель:
/datapack list— датапак должен быть в списке. - Проверяйте ошибочные строки через
/functionи лог по сообщениям в чате/консоли.
После изменения файлов всегда вызывайте/reload, иначе изменения не подхватятся. Ошибки в.mcfunctionне «положат» игру, но команда просто не выполнится — смотрите вывод.
Быстрая проверка
/datapack list
/function myevent:start
/tag @s add event_participant