PlayerChannelEvent
PlayerChannelEvent
=> org.bukkit.event.Event
=> org.bukkit.event.player.PlayerEvent
=> org.bukkit.event.player.PlayerChannelEvent
This event is called after a player registers or unregisters a new pluginchannel.当玩家注册或注销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()
方法,交由父类存储监听器,不是一种值得推荐的设计模式。
方法声明: public final String getChannel()
方法签名: ()Ljava/lang/String;
译注:无文档。该方法用于获取涉事PluginChannel
字符串。
方法声明: public HandlerList getHandlers()
方法签名: ()Lorg/bukkit/event/HandlerList;
方法声明: public static HandlerList getHandlerList()
方法签名: ()Lorg/bukkit/event/HandlerList;
Last modified 1mo ago