自定义脚本事件¶
PySpigot包括一个自定义事件,称为CustomEvent,可以在脚本内部创建和调用自定义事件,以便在发生某事时使用。该事件旨在供脚本在特定事件发生时向其他脚本和插件发出信号。
该事件包括一个data变量,在创建事件时设置,允许脚本向监听事件的侦听器传递任何类型的数据。还包括一个name变量,当多个脚本同时使用CustomEvent时,允许更大的监听特异性。
PySpigot还会自动将创建和调用事件的脚本附加到事件本身,以便监听器可以确定是哪个脚本调用了事件。
以下描述了如何使用这个自定义事件。
使用自定义事件¶
导入自定义事件¶
CustomEvent类可以通过dev.magicmq.pyspigot.event.custom.CustomEvent访问:
1 | |
创建自定义事件¶
CustomEvent是一个对象,创建实例时有三个与之关联的参数可以设置:
name: 事件的名称。通常应该是一个具体的名称,事件监听器可以用它来区分不同脚本产生的CustomEvent事件。data: 附加到事件的数据。下面的代码示例创建了一些虚拟数据,但通常会是与事件相关的一些有用数据,事件监听器可以利用这些数据。data参数可以使用任何Python类型;不需要进行类型转换。
async(可选): 如果你的事件是在异步上下文中创建和调用的(例如在异步任务中),应该将其设置为True。否则,可以省略或设置为False。
1 2 3 4 5 6 | |
如果在异步上下文中,则应按如下方式创建事件:
1 2 3 4 5 6 | |
调用自定义事件¶
通过Bukkit的插件管理器调用事件,可以通过Bukkit类(org.bukkit.Bukkit)访问:
1 2 3 4 5 | |
代码示例¶
将所有内容整合在一起,这里是一个功能性示例:
1 2 3 4 5 6 7 8 | |
-
在这里,我们导入了
CustomEvent类。 -
在这里,我们导入了
Bukkit类。 -
在这里,我们创建了一个虚拟的字典对象,它将作为事件的数据。
-
在这里,我们创建了
CustomEvent的新实例,并传入一个特定的名称(在这种情况下是"script1_event"),以及之前创建的字典数据。 -
在这里,通过将之前创建的
CustomEvent对象传递给callEvent(),我们使用Bukkit的插件管理器调用了该事件。
监听自定义事件¶
监听自定义事件的方式与监听任何其他Bukkit/Spigot事件的方式相同。 CustomEvent类本身有多个可用的函数:
event.getScript(): 获取创建并调用此事件的脚本。event.getName(): 获取事件的名称。event.getData(): 获取附加到事件的数据。这将作为PyObject返回,可以直接从脚本中使用,而无需进行任何类型强制转换。event.getDataAsType(String clazz): 获取附加到事件的数据作为所提供类名的实例。如果无法将PyObject数据转换为适当的Java类型,则此方法很有用。event.getDataAsType(Class<T> clazz): 获取附加到事件的数据作为所提供类的实例。如果无法将PyObject数据转换为适当的Java类型,则此方法很有用。
CustomEvent也是可取消的,这意味着监听器可以在需要时取消事件。
摘要¶
CustomEvent类允许脚本向其他脚本或插件发出事件信号,并支持传递自定义data和指定事件name。- 创建
CustomEvent时接受多个参数:name(事件标识符)、data(任何Python类型)和async(可选,用于异步环境)。 - 通过
Bukkit.getPluginManager().callEvent(event)来调用事件。 - 其他脚本和插件可以像对待其他Bukkit/Spigot事件一样监听
CustomEvent。关键的事件函数包括getScript()(返回调用脚本)、getName()(返回事件名称)和getData()(返回附加到事件的数据)。