事件监听器¶
通过 PySpigot 的 ListenerManager,脚本可以注册事件监听器。类似于 Bukkit 的监听器系统,当事件触发时,脚本中相应的函数将被调用,从而可以在脚本中利用事件。
要了解如何将监听器管理器导入到您的脚本中,请访问通用信息页面。
详细信息
这不是 Bukkit 事件的全面指南。要获取更全面的事件指南,请查看Spigot的教程,了解如何使用事件 API。
Listener Manager 使用¶
监听器管理器提供了五个可用的函数:
registerListener(function, event): 注册事件监听器。需要传入事件触发时要调用的函数 (function) 和要监听的事件 (event)。返回一个ScriptEventListener,可用于稍后取消事件监听。registerListener(function, event, priority): 与上述相同,但还接受一个priority(表示事件监听器相对于同一事件的其他监听器应该在多早/晚触发的优先级)。优先级是一个字符串,表示一个EventPriority。返回一个ScriptEventListener,可用于稍后取消事件监听。- 事件优先级与 Bukkit 的 EventPriority class 中找到的优先级相同。
registerListener(function, event, ignoreCancelled): 如果在较早时间点被另一个事件监听器取消了,则会方便地“忽略”该事件。如果在之前的某个地方已取消该事件,脚本中的监听器将不会被调用。返回一个ScriptEventListener,可用于稍后取消事件监听。- 这仅适用于可取消的事件。并非所有事件都可以取消。
registerListener(function, event, priority, ignoreCancelled): 注册一个事件监听器,如果被取消将被忽略,并且具有优先级(前两个函数的组合)。返回一个ScriptEventListener,可用于稍后取消事件监听。unregisterListener(event_listener): 取消注册事件监听器。需要传入当注册监听器时返回的ScriptEventListener。
Tip
你不需要在脚本停止/卸载时取消注册事件监听器。PySpigot会为你处理这一切。
代码示例¶
让我们看一下下面定义和注册事件监听器的代码:
1 2 3 4 5 6 7 | |
-
在这里,我们将PySpigot导入为
ps,以便使用监听器管理器(listener)。 -
在这里,我们导入Bukkit的
AsyncPlayerChatEvent,这是我们将要监听的事件。所有你希望监听的事件必须被导入! -
在这里,我们定义了一个名为
player_chat的函数,它以事件为参数(在这种情况下是一个AsyncPlayerChatEvent)。这是当AsyncPlayerChatEvent发生时将被调用的函数。在这个函数中,我们向控制台打印一条包含在聊天中发送的消息(触发事件的事件)的消息。 -
在这里,我们使用
registerEvent(function, event)函数来注册我们的事件监听器,传递之前定义的函数,以及我们要监听的事件(AsyncPlayerChatEvent)。我们还将registerEvent的返回值分配给listener。这是一个ScriptEventListener对象,表示已注册的监听器。稍后如果需要,它可以用来取消注册监听器。
所有事件监听器必须使用PySpigot的监听器管理器注册。在这种情况下,我们使用registerEvent(function, event)函数。它接受两个参数:
- 第一个参数接受应在事件触发时调用的函数。
- 第二个参数接受应监听的事件。
注销监听器¶
继续上面的代码示例:
1 | |
- 在这里,我们通过传递我们在注册监听器时分配的
ScriptEventListener对象来注销监听器。
有关可用监听器和每个监听器可用的函数/方法的完整文档,请参阅 Spigot JavaDocs。
总结¶
- 您希望使用的所有事件都应使用 Python 的导入语法导入。
- 所有事件侦听器应该在您的脚本中定义为函数,接受一个参数,即事件(参数名称可随意选择)。
- 所有事件侦听器必须使用
listener.registerEvent(function, event)注册到 PySpigot 的监听器管理器。 - 在注册事件侦听器时,
registerEvent函数都会返回一个ScriptEventListener,用于注销监听器。