Skip to content

事件监听器

通过 PySpigot 的 ListenerManager,脚本可以注册事件监听器。类似于 Bukkit 的监听器系统,当事件触发时,脚本中相应的函数将被调用,从而可以在脚本中利用事件。

要了解如何将监听器管理器导入到您的脚本中,请访问通用信息页面。

详细信息

这不是 Bukkit 事件的全面指南。要获取更全面的事件指南,请查看Spigot的教程,了解如何使用事件 API。

Listener Manager 使用

监听器管理器提供了五个可用的函数:

  • registerListener(function, event): 注册事件监听器。需要传入事件触发时要调用的函数 (function) 和要监听的事件 (event)。返回一个 ScriptEventListener,可用于稍后取消事件监听。
  • registerListener(function, event, priority): 与上述相同,但还接受一个 priority(表示事件监听器相对于同一事件的其他监听器应该在多早/晚触发的优先级)。优先级是一个字符串,表示一个 EventPriority。返回一个 ScriptEventListener,可用于稍后取消事件监听。
  • registerListener(function, event, ignoreCancelled): 如果在较早时间点被另一个事件监听器取消了,则会方便地“忽略”该事件。如果在之前的某个地方已取消该事件,脚本中的监听器将不会被调用。返回一个 ScriptEventListener,可用于稍后取消事件监听。
    • 这仅适用于可取消的事件。并非所有事件都可以取消。
  • registerListener(function, event, priority, ignoreCancelled): 注册一个事件监听器,如果被取消将被忽略,并且具有优先级(前两个函数的组合)。返回一个 ScriptEventListener,可用于稍后取消事件监听。
  • unregisterListener(event_listener): 取消注册事件监听器。需要传入当注册监听器时返回的 ScriptEventListener
Tip

不需要在脚本停止/卸载时取消注册事件监听器。PySpigot会为你处理这一切。

代码示例

让我们看一下下面定义和注册事件监听器的代码:

1
2
3
4
5
6
7
import pyspigot as ps # (1)!
from org.bukkit.event.player import AsyncPlayerChatEvent # (2)!

def player_chat(event): # (3)!
    print('玩家发送了一条聊天信息!消息内容为: ' + event.getMessage())

listener = ps.listener.registerListener(player_chat, AsyncPlayerChatEvent) # (4)!
  1. 在这里,我们将PySpigot导入为 ps,以便使用监听器管理器(listener)。

  2. 在这里,我们导入Bukkit的AsyncPlayerChatEvent,这是我们将要监听的事件。所有你希望监听的事件必须被导入!

  3. 在这里,我们定义了一个名为player_chat的函数,它以事件为参数(在这种情况下是一个AsyncPlayerChatEvent)。这是当AsyncPlayerChatEvent发生时将被调用的函数。在这个函数中,我们向控制台打印一条包含在聊天中发送的消息(触发事件的事件)的消息。

  4. 在这里,我们使用registerEvent(function, event)函数来注册我们的事件监听器,传递之前定义的函数,以及我们要监听的事件(AsyncPlayerChatEvent)。我们还将registerEvent的返回值分配给listener。这是一个ScriptEventListener对象,表示已注册的监听器。稍后如果需要,它可以用来取消注册监听器。

所有事件监听器必须使用PySpigot的监听器管理器注册。在这种情况下,我们使用registerEvent(function, event)函数。它接受两个参数:

  • 第一个参数接受应在事件触发时调用的函数。
  • 第二个参数接受应监听的事件。

注销监听器

继续上面的代码示例:

1
ps.listener.unregisterListener(listener) # (1)!
  1. 在这里,我们通过传递我们在注册监听器时分配的 ScriptEventListener 对象来注销监听器。

有关可用监听器和每个监听器可用的函数/方法的完整文档,请参阅 Spigot JavaDocs

总结

  • 您希望使用的所有事件都应使用 Python 的导入语法导入。
  • 所有事件侦听器应该在您的脚本中定义为函数,接受一个参数,即事件(参数名称可随意选择)。
  • 所有事件侦听器必须使用 listener.registerEvent(function, event) 注册到 PySpigot 的监听器管理器。
  • 在注册事件侦听器时,registerEvent 函数都会返回一个 ScriptEventListener,用于注销监听器。