События
Мод реагирует на игру, подписываясь на события:
lua
bh.events.on("chat", function(ev)
if string.find(ev.text, "badword") then
ev.cancelled = true -- сообщение никто не увидит
end
end, { priority = "lowest" })bh.events.on возвращает id; bh.events.off(id) удаляет обработчик.
Виды событий
| Вид | Когда | Что можно изменить |
|---|---|---|
player-join, player-quit | игрок зашёл / вышел | – |
chat | сообщение в чате, до показа | отменить, ev.text |
command | строка /команды, до любых обработчиков | отменить (поглотить) |
tick | каждый шаг мира (0,2 с) | – |
world-loaded, world-save | мир загружен / сохраняется (pre, post) | – |
player-pre-login | игрок прошёл проверки входа | отменить (отклонить), ev.reason |
block-place, block-break | игрок ставит / убирает блок | отменить |
object-place | игрок ставит верстак, сундук, дверь, … | отменить |
block-changed | изменилась любая клетка, в том числе от роста или физики | – (только наблюдение) |
damage | блокхеду вот-вот нанесут урон | отменить, ev.amount |
death | блокхед погиб | – |
player-move | блокхед перешёл на другую клетку | – |
Виды начиная с player-pre-login требуют API 0.2 (версии API). Все поля описаны в справочнике events.
Отменённое изменение блока откатывается на экране игрока так же, как на защищённой клетке.
Приоритет
Обработчики запускаются от lowest до highest, затем monitor:
lowest → low → normal (по умолчанию) → high → highest → monitor
- Запускайтесь раньше (
lowest,low), если следующие обработчики могут вас переопределить, например для мягкого фильтра. - Запускайтесь позже (
high,highest), чтобы оставить за собой последнее слово, например в моде защиты. monitorвидит окончательный результат и не может его менять. Используйте его для логов и статистики.
Внутри одного приоритета моды запускаются в порядке загрузки (сначала зависимости).
Отмена
- Установите
ev.cancelled = true, чтобы отменить. Следующий обработчик может вернутьfalse. { ignore_cancelled = true }пропускает ваш обработчик, пока событие отменено.- Изменения в событиях, которые нельзя отменить, игнорируются с предупреждением в логе.
Обработчики запускаются по одному в главном потоке сервера и должны быть быстрыми (ограничения).