EventJS

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 内部交互时做出假设。