EventJS для Minecraft: перезагружаемые нативные события KubeJS

EventJS для Minecraft: перезагружаемые нативные события в KubeJS Если вы собираете сборку на Forge и пишете сценарии в KubeJS, рано или поздно сталкиваетесь с тем, что изменения в обработчиках нативных событий требуют полного перезапуска игры. Это замедляет итерации, усложняет отладку и мешает бы...

Скачать EventJS для Minecraft 1.20.1, 1.19.2, 1.18.2, 1.16.5

Оригинальное название: EventJS

Версии Minecraft: 1.16.5, 1.18.2, 1.19.2, 1.20.1

Загрузчик: Forge, NeoForge

ФайлВерсияЗагрузчикРазмер
EventJS-1.16.5-1.2.1.jar1.16.5Forge48 КБСкачать
EventJS-1.16.5-1.4.0.jar1.16.5Forge48 КБСкачать
EventJS-1.16.5-1.3.0.jar1.16.5Forge49 КБСкачать
EventJS-1.16.5-1.2.0.jar1.16.5Forge48 КБСкачать
EventJS-1.0.0.jar1.16.5Forge11 КБСкачать
EventJS-1.16.5-1.1.0.jar1.16.5Forge47 КБСкачать
EventJS-1.18.2-1.1.0.jar1.18.2Forge47 КБСкачать
EventJS-1.18.2-1.2.0.jar1.18.2Forge48 КБСкачать
EventJS-1.18.2-1.2.1.jar1.18.2Forge48 КБСкачать
EventJS-1.18.2-1.3.0.jar1.18.2Forge49 КБСкачать
EventJS-1.19.2-1.2.0.jar1.19.2Forge48 КБСкачать
EventJS-1.19.2-1.2.1.jar1.19.2Forge48 КБСкачать
EventJS-1.19.2-1.3.0.jar1.19.2Forge50 КБСкачать
EventJS-1.20.1-1.4.2.jar1.20.1Forge48 КБСкачать
EventJS-1.20.1-1.4.3.jar1.20.1Forge48 КБСкачать
EventJS-1.20.1-1.4.1.jar1.20.1Forge48 КБСкачать
EventJS-1.20.1-1.4.0.jar1.20.1Forge48 КБСкачать
EventJS-1.20.1-1.3.0.jar1.20.1NeoForge50 КБСкачать
EventJS-1.20.1-1.2.2.jar1.20.1NeoForge48 КБСкачать
EventJS-1.20.1-1.2.1.jar1.20.1NeoForge48 КБСкачать
EventJS-1.20.1-1.2.0.jar1.20.1NeoForge48 КБСкачать
EventJS-1.20.1-1.1.0.jar1.20.1NeoForge47 КБСкачать

EventJS для Minecraft: перезагружаемые нативные события в KubeJS

Если вы собираете сборку на Forge и пишете сценарии в KubeJS, рано или поздно сталкиваетесь с тем, что изменения в обработчиках нативных событий требуют полного перезапуска игры. Это замедляет итерации, усложняет отладку и мешает быстро проверять гипотезы о механике мира, блоков, сущностей и взаимодействий на сервере. Модификация EventJS как раз закрывает этот разрыв: она добавляет к KubeJS перезагружаемые нативные события, чтобы вы могли обновлять привязки слушателей без выхода из клиента и без перезагрузки всей системы модов.

Зачем нужен EventJS в связке с KubeJS

KubeJS отлично подходит для кастомизации рецептов, реакций на игровые сценарии и лёгкой логики на стороне сервера или клиента. Но для версий Minecraft от 1.16 до 1.20 перезагрузка нативных слушателей Forge-событий через KubeJS была практически недостижима в привычном виде: чтобы «подхватить» правки, приходилось перезапускать игру целиком. EventJS выступает аддоном к KubeJS и меняет поведение по умолчанию: стандартный способ подписки на нативные события становится перезагружаемым. В итоге вы продолжаете работать в привычной экосистеме крафта, модов и серверных настроек, но цикл правок становится короче и предсказуее.

Безопасность и сторона выполнения

Одна из болевых точек при ручной работе с низкоуровневыми слушателями — риск краша при ошибке в обработчике. EventJS помогает снизить этот риск: некорректное поведение в нативном слушателе не обязательно рушит сессию так, как это бывает при «голой» интеграции. Кроме того, вы можете явно выбирать сторону: часть логики оставить только на сервере, а часть — только на клиенте. Это важно для интерфейса, анимаций, частиц и других клиентских механик, которые не должны дублироваться на выделенном сервере.

Как пользоваться: от «просто установил» до NativeEvents

По задумке авторов, входной порог минимальный. После установки EventJS ваши привычные подписки на Forge-события в KubeJS начинают корректно переживать перезагрузку скриптов, и вам не нужно осваивать новый «язык» моддинга с нуля — достаточно поставить модификацию и продолжить писать сценарии. Если же нужна более гибкая и явная модель, используйте API NativeEvents: методы onEvent и onGenericEvent позволяют точнее описывать приоритет, получение отменённых событий и работу с обобщёнными типами. Обработчик на стороне JS — это обычная функция-колбэк с аргументом события, куда приходит объект события Forge, с которым вы дальше работаете в логике крафта, дропа, урона, взаимодействия с блоками и т.д.

При настройке типов в ранних версиях EventJS (примерно 1.0.0–1.3.0) eventType и genericClassFilter можно было задавать строкой с именем класса либо самим классом, загруженным через встроенные механизмы взаимодействия KubeJS с Java. Приоритет поддерживает как перечисление, так и строковые уровни вроде «highest» и «normal», а флаг receiveCancelled управляет тем, получите ли вы события, помеченные как отменённые. С 1.4.0 для совместимости с ProbeJS Legacy «из коробки» типы стали строже: eventType и genericClassFilter ожидаются как классы, загруженные через java(...) на 1.16.5 или через Java.loadClass(...) на 1.20.1. Это стоит учитывать при обновлении сборки, чтобы скрипты не «молчали» после апдейта.

Совместимость версий и важное отличие от KubeJS 1.21+

Линейка релизов EventJS покрывает разные ветки: от точечной поддержки 1.16.5 в ранних сборках до более широкого охвата основных версий между 1.16 и 1.20. Перед установкой сверяйте номер мода с версией Minecraft, Forge и вашего KubeJS, чтобы избежать конфликтов загрузчиков и несовпадения API. Отдельно стоит помнить: в KubeJS для Minecraft 1.21+ тоже появилась перезагрузка нативных слушателей и сущность с похожим именем NativeEvents, но реализация другая. Не стоит переносить «внутренние» предположения и хаки с EventJS на новую ветку KubeJS без проверки — поведение и точки расширения могут различаться, и ваши серверные или клиентские сценарии начнут вести себя иначе, чем на 1.16–1.20.

Когда вы настраиваете среду для экспериментов со скриптами, удобно иметь лаунчер, который не мешает быстро переключать профили и подмешивать зависимости. Установка такого аддона к KubeJS нередко укладывается в привычный сценарий: этот мод можно легко поставить через лаунчер foxygame.net — современный и гибкий лаунчер для Minecraft, где моды можно подтягивать прямо из меню, не собирая пакет руками на каждый тест биомов и механик.

Практические советы для стабильной сборки

  • Сегментируйте скрипты по сторонам: серверное — в серверные папки скриптов, клиентское — в клиентские, чтобы лишние подписки не грузили машину напрасно.
  • При обновлении EventJS до 1.4.0 заранее переведите строковые имена классов на загрузку классов через поддерживаемые вызовы для вашей версии.
  • Держите минимальный набор модов для воспроизведения бага: так проще понять, конфликтует ли слушатель с другим модом, меняющим те же события.
  • Фиксируйте версии Forge и KubeJS в описании сборки — это упрощает поддержку игрокам на вашем сервере.

Заключение

EventJS делает моддинг через KubeJS на ветках 1.16–1.20 заметно удобнее за счёт перезагружаемых нативных событий, явного контроля стороны выполнения и более безопасного поведения при ошибках в обработчиках. Если вы хотите сохранить динамичный цикл разработки без постоянных перезапусков, комбинируйте аккуратную архитектуру скриптов, понимание отличий API после 1.4.0 и внимание к тому, что в 1.21+ схожие возможности в KubeJS реализованы иначе. Тогда ваши сценарии для блоков, сущностей, дропа и серверной логики останутся предсказуемыми, а сборка — проще в сопровождении.