
EventJS
KubeJS 的侧边可重新加载原生事件
EventJS
是 KubeJS 的一个附加模组,为 KubeJS 添加了可重载的原生事件支持。
通过 EventJS,你可以:
- 无需重启整个游戏即可刷新你的原生事件监听器,或者将处理器存储在
global['someId']中,这样既更简单又更高效。 - 无需重新启动即可随意添加/移除原生事件监听器,这在 KubeJS 1.16-1.20 版本中是不可能实现的。
- 在原生事件监听器出现问题时,防止游戏崩溃。
- 仅在服务端或客户端添加事件监听器。
使用方法
默认情况下,EventJS 会替换原有的原生事件监听方法,使其可重载。因此,你实际上无需学习任何新内容即可使用 EventJS,只需安装它,你的 Forge 事件监听就变得可重载了。
但是,如果你在寻找更动态、更明确的事件监听方式,你可以使用 NativeEvents.onEvent(...) 和 NativeEvents.onGenericEvent(...) 来进行事件监听。
NativeEvents 适用于所有 3 种脚本类型(客户端/服务端/启动),因此你可以进行分侧事件监听,例如,在 client_scripts 中监听仅客户端事件,那么该事件监听将不会在服务端发生。
语法 (v1.0.0~1.3.0)
NativeEvents.onEvent(eventType, handler)
NativeEvents.onEvent(priority, receiveCancelled, eventType, handler)
NativeEvents.onGenericEvent(genericClassFilter, eventType, handler)
NativeEvents.onGenericEvent(genericClassFilter, priority, receiveCancelled, eventType, handler)
JS 端的 handler 是一个接收事件的回调函数,例如:(event) => {...}
eventType 和 genericClassType 是能代表一个类的东西,比如保存事件类名字符串,或由 java(...) 或 Java.loadClass(...) 加载的事件类本身。
let handler: (event: AnyForgeEvent) => void
let eventType: string | Class
let genericClassFilter: string | Class
let priority: $EventPriority | "highest" | "high" | "normal" | "low" | "lowest"
let receiveCancelled: boolean
1.4.0 中的变化
在 EventJS 1.4.0 中,为了原生支持 ProbeJS Legacy,eventType 和 genericClassFilter 将仅主动支持通过 java(...) (1.16.5) 或 Java.loadClass(...) (1.20.1) 加载的 Class。
let eventType: Class
let genericClassFilter: Class
支持的版本
1.0.0: 1.16.5
1.1.0: 1.16.5, 1.20.1
1.2.0: 1.16 至 1.20 之间的所有主要版本
你知道吗
我制作这个模组的原因是,KubeJS 在实现类似功能方面慢得离谱。他们在 KubeJS 更新到 1.21 之后才添加了原生事件监听器的重载功能,让 1.16~1.20 的所有版本都落后了。
KubeJS 1.21+ 也包含了对原生事件监听器重载的支持,使用了相同的名称 NativeEvents,但其实现与 EventJS 不同,所以请不要通过 Java 与 EventJS 内部交互时做出假设。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。