PlayerChannelEvent
PlayerChannelEvent
继承关系
类描述
This event is called after a player registers or unregisters a new plugin
channel.
当玩家注册或注销
PluginChannel
时触发。
译注:
PluginChannel
是Bukkit
插件与客户端模组之间通信的工具。Izzel_Aliz 在其教程《1.13+ 中 Forge 与 Bukkit 的通信》及《Forge | LiteLoader 与 Bukkit / Sponge 之间的通信 —— PluginMessengeChannel 与 FMLNetworkEvent》中对此工具作了详尽阐述。在
Bukkit API
中,与PluginChannel
相关的事件共有三个,分别是PlayerRegisterChannelEvent
、PlayerUnregisterChannelEvent
和本事件。前两个事件是本事件的下级类,似乎是在具体的情景下触发的(注册或注销PluginChannel
),但都没有实现getHandlers()
和getHandlerList()
方法。本事件似乎是抽象的(字面上是与PluginChannel
有关的事件),但反而实现了getHandlers()
和getHandlerList()
方法。当插件注册事件监听器时,服务端会调用事件类的
getHandlers()
和getHandlerList()
方法,将监听器注册进去。而PlayerRegisterChannelEvent
、PlayerUnregisterChannelEvent
继承PlayerChannelEvent
类,所以注册这两个事件的监听器时,实际上是将监听器注册进了超类PlayerChannelEvent
的HandlerList
里。在
Bukkit
系列服务端中,PlayerChannelEvent
不会被触发。只有PlayerRegisterChannelEvent
、PlayerUnregisterChannelEvent
这两个具体事件才会被触发。所以不能注册PlayerChannelEvent
的监听器。其中的技术原理可以参考拙作 《在 Bukkit 自定义事件中“继承超类HandlerList”做法的严重问题》一文。下级类不实现getHandlers()
和getHandlerList()
方法,交由其超类存储监听器,不是一种值得推荐的设计模式。
方法列表
getChannel
方法声明: public final String getChannel()
方法签名: ()Ljava/lang/String;
译注:无文档。该方法用于获取涉事
PluginChannel
字符串。
getHandlers
方法声明: public HandlerList getHandlers()
方法签名: ()Lorg/bukkit/event/HandlerList;
getHandlerList
方法声明: public static HandlerList getHandlerList()
方法签名: ()Lorg/bukkit/event/HandlerList;
Last updated