EventJS
是 [KJS] KubeJS 的一个附属,为 KubeJS 添加了原生事件监听的热重载支持。
借助 EventJS,你可以做到:
既不需要重启整个游戏,也不需要用一个“global['someId']”存储监听函数,就可以刷新你对原生事件的监听。这不仅写起来更简便,性能也比“global['someId']”更佳。
不必重启游戏就可以添加/删减对原生事件的监听,这是 EventJS 所支持的 KubeJS 版本一直没能做到的。
防止整个游戏在原生事件监听发生错误时直接崩溃。
仅为服务端/客户端添加原生事件监听,这样监听仅客户端/仅服务端事件时不必费心思判断是处于服务端还是客户端。
使用方法
默认情况下,EventJS 会替换掉原来的原生事件监听,以此为其添加热重载支持。
所以,你可以什么新东西都不必学就可以享受到 EventJS 带来的好处。
不过呢,如果你需要一些更加动态,更利于自定义,形式更完整的原生事件监听,你可以使用“NativeEvents.onEvent(...)”监听事件,或者“NativeEvents.onGenericEvent(...)”监听带泛型事件(Generic Event)。
“NativeEvents”在所有三个脚本类型(ScriptType)对应的定义域(client_scripts/server_scripts/startup_scripts)内都是可用的,因此你可以借此做到为客户端/服务端分别添加事件监听,也就是说,比如你在“client_scripts”内添加了一个对仅客户端的事件的监听,则这个事件监听不会发生在服务端。
语法(版本 1.1.0)
NativeEvents.onEvent(eventType, handler)
NativeEvents.onEvent(priority, receiveCancelled, eventType, handler)
NativeEvents.onEventTyped(priority, receiveCancelled, eventType, handler)
NativeEvents.onGenericEvent(genericClassType, eventType, handler)
NativeEvents.onGenericEvent(genericClassType, priority, receiveCancelled, eventType, handler)
NativeEvents.onGenericEventTyped(genericClassType, priority, receiveCancelled, eventType, handler)
“handler”在 JS 侧就是事件的监听函数,比如“(event) => {...}”
“eventType”与“genericClassType”是“可以表示一个类的东西”,比如一个内容是类名的字符串,或者通过“java(...)”或“Java.loadClass(...)”加载得到的类自身。
支持版本
你知道吗
作者制作这个 Mod 的动机是,KubeJS 一直拖到 1.21 才添加了原生事件监听的热重载支持,然而这早在 1.16 时期(甚至可以更早,一直早到 1.12 时期)就已经可以实现了。作者实在是气不过,便自己编写了这个模组。
虽然 EventJS 与 1.21+ 的 KubeJS 在热重载事件监听这方面在 JavaScript 侧用起来没有什么区别,但是具体实现并不一致,在 Java 侧与 EventJS 交互时记得不要想当然。