
EventJS
Аддон для KubeJS, который добавляет перезагружаемые нативные события. Больше не нужно перезапускать игру или сервер, чтобы применить изменения в обработчиках событий Forge.
EventJS - гибкое управление событиями Forge в KubeJS
EventJS - это аддон для KubeJS, который решает одну из самых надоедливых проблем при работе с этим скриптовым модом: невозможность перезагрузить обработчики нативных событий без полного перезапуска игры или сервера.
Если вы когда-нибудь писали скрипты для Minecraft на KubeJS, то знаете эту боль - изменил пару строк в обработчике события Forge, а чтобы это применить, приходится перезагружать весь клиент или сервер. С EventJS это в прошлом. Он буквально перехватывает стандартный механизм подписки на события в кубэ, делая его перезагружаемым прямо на лету. Всё работает как по волшебству: поставил мод, и ваши старые скрипты уже используют новую систему без единой правки кода.
Что это даёт на практике
Для разработчиков модпаков и серверов эта штука - настоящая находка. Представьте: вы настраиваете кастомные крафты, спавн мобов или механики по типу "при входе в биом включается эффект". Раньше каждая ошибка в таком скрипте могла вылиться в краш игры, и приходилось всё перезапускать. С EventJS:
- Можно обновлять/удалять обработчики нативных событий на ходу, без рестарта - то, чего в KubeJS для версий 1.16-1.20 просто не было.
- Ошибка в обработчике не уронит игру - вы сможете просто перезагрузить скрипты и исправить баг.
- Появилась возможность вешать события только на клиентскую или только на серверную сторону - больше не нужно костылить разделение через
if (event.level.isClient). Просто пиши код вclient_scriptsилиserver_scripts, и он будет работать только там, где нужно.
А если хочется больше контроля?
Аддон устроен так, что его можно просто поставить и забыть - он сам переопределяет стандартные методы подписки на события. Но если вам нужно чётко контролировать, что и как слушается, есть отдельный API:
NativeEvents.onEvent(eventType, handler)
NativeEvents.onEvent(priority, receiveCancelled, eventType, handler)
NativeEvents.onGenericEvent(genericClassFilter, eventType, handler)
NativeEvents.onGenericEvent(genericClassFilter, priority, receiveCancelled, eventType, handler)
handler - это обычная коллбэк-функция, вроде (event) => { ... }. А eventType и genericClassFilter - это строки с полным именем класса события или сам класс, загруженный через java(...) или Java.loadClass(...). Приоритет задаётся как строка: "highest", "high", "normal", "low", "lowest".
В версии 1.4.0 появилась поддержка ProbeJS Legacy из коробки, но пришлось немного зажать типы: теперь eventType и genericClassFilter работают только с классами, загруженными через Java.loadClass(...). Немного более строго, зато совместимость с редактором кода на высоте.
Совместимость и нюансы
EventJS поддерживает все основные версии Minecraft от 1.16 до 1.20:
- 1.0.0: Minecraft 1.16.5
- 1.1.0: 1.16.5, 1.20.1
- 1.2.0: все версии между 1.16 и 1.20
Кстати, есть забавный факт: создатель EventJS сделал этот мод потому, что в KubeJS поддержка перезагрузки нативных событий появилась только в версии для Minecraft 1.21. А все старые версии (1.16-1.20) остались с этой проблемой. Так что EventJS - по сути, патч для старого функционала.
Ещё момент: в KubeJS 1.21+ тоже есть свой NativeEvents, но его реализация отличается. Так что не пытайтесь взаимодействовать с внутренностями EventJS через Java-код, если не хотите сюрпризов - они разные.
Скачайте EventJS и навсегда забудьте про бесконечные перезапуски игры при каждой правке скриптов. Ну вы поняли, работает он как на клиенте, так и на сервере - подходит и для одиночной игры, и для сборки модов. Если собираете большой модпак или занимаетесь контентом - это практически must-have. На слабом железе тоже норм, аддон не грузит игру.
Как поиграть с друзьями с модом EventJS?
Мод EventJS куда интереснее в компании: поднимите сервер Майнкрафт с уже установленным модом, позовите друзей и играйте по своим правилам. Хостинг Майнкрафт для мода EventJS будет готов за пару минут - BungeeHost сделает всё за вас.
