Свой сервер
Датапак с функциями: команды по таймеру и при входе
Впишите команды — получите датапак для Minecraft 26.3, который выполняет их сам: раз в N секунд, когда игрок заходит на сервер, и при загрузке мира. Без плагинов и командных блоков.
Результат · пример
Архив · my_pack-datapack.zip- Таймер
- раз в 10 мин
- Вход игрока
- первый
- Формат датапака
- 121
data/minecraft/tags/function/load.json
Тег load: игра зовёт функцию при загрузке мира и после /reload.
{
"values": ["my_pack:load"]
}
data/minecraft/tags/function/tick.json
Тег tick: функция идёт каждый тик — 20 раз в секунду.
{
"values": ["my_pack:tick"]
}
data/my_pack/function/load.mcfunction
При загрузке мира: ваши команды и запуск таймера.
schedule function my_pack:timer 600s
say Датапак загружен
data/my_pack/function/tick.mcfunction
Каждый тик: команды по тику и проверка, кто вошёл.
execute as @a[tag=!my_pack_joined] at @s run function my_pack:join
data/my_pack/function/timer.mcfunction
Раз в 10 мин: ваши команды и запись себя в очередь снова.
say Не забудьте проголосовать за сервер — /vote
schedule function my_pack:timer 600s
data/my_pack/function/join.mcfunction
Для вошедшего игрока: команды идут от его имени и с его места (@s).
title @s title "Добро пожаловать!"
give @s minecraft:bread 8
tag @s add my_pack_joined
Как применить
- Скачайте архив
Распаковывать не нужно: игра читает датапак прямо из zip.
- Положите в папку мира
На сервере — world/datapacks, в одиночной игре — saves/<мир>/datapacks.
- Перезагрузите
Командой /reload или перезапуском. Таймер и проверка входа запустятся сами.
- Проверьте
/datapack list покажет, включён ли он, а /function my_pack:load — выполнится ли функция без ошибок.
Что нужно знать
- Таймер — это schedule, а не счётчик в тике. Функция timer в конце ставит себя в очередь снова, а первый раз её запускает load. После /reload второй круг не появится: schedule по умолчанию заменяет прежний.
- События «игрок зашёл» в игре нет. Первый вход ловят по метке my_pack_joined, которой у новичка ещё нет, а повторный — по счёту leave_game: он растёт, когда игрок выходит. Проверка идёт каждый тик и почти ничего не стоит.
- Каждый тик — это 20 раз в секунду. Тяжёлые команды (fill, поиск по всем сущностям) так лучше не крутить: для «каждую секунду» хватит таймера на 1 с.
- Без косой черты и без команд плагинов. В файле функции «/» в начале строки — ошибка, и игра не загрузит функцию целиком. Команды плагинов в функциях датапака не выполняются вовсе.
- Папки — function и tags/function. С 1.21 игра читает только их, во множественном числе — пропускает молча. Датапак объявляет формат 121 — под Minecraft 26.3.
Частые вопросы
Как сделать, чтобы команда выполнялась каждые N секунд?
Функцией датапака, которая в конце ставит себя же в очередь командой schedule function … Ns, а первый раз её запускает тег load. Без плагинов и командных блоков — и на сервере, и в одиночной игре.
Как выполнить команду при входе игрока в Minecraft?
События входа в ванили нет: в тике ищут игроков без метки (первый вход) и с выросшим счётом leave_game (вернулся после выхода), зовут для них функцию и ставят метку. Генератор собирает это сам.
Почему функция датапака не работает?
Чаще всего в строке стоит косая черта, папка названа functions вместо function или в функции команда плагина. Проверьте /datapack list и /function my_pack:load — игра покажет ошибку.
