<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://mineplugin.org/index.php?action=history&amp;feed=atom&amp;title=Paper%2FHandlerList</id>
	<title>Paper/HandlerList - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://mineplugin.org/index.php?action=history&amp;feed=atom&amp;title=Paper%2FHandlerList"/>
	<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Paper/HandlerList&amp;action=history"/>
	<updated>2026-05-31T17:44:47Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://mineplugin.org/index.php?title=Paper/HandlerList&amp;diff=18080&amp;oldid=prev</id>
		<title>Poikcue：​创建页面，内容为“每个可以被监听的 &lt;code&gt;Event&lt;/code&gt;（事件）都有一个 &lt;code&gt;HandlerList&lt;/code&gt; 来存储所有监听该事件的监听器。&lt;br /&gt; 事件被触发的…”</title>
		<link rel="alternate" type="text/html" href="https://mineplugin.org/index.php?title=Paper/HandlerList&amp;diff=18080&amp;oldid=prev"/>
		<updated>2022-11-26T05:22:28Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“每个可以被监听的 &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt;（事件）都有一个 &amp;lt;code&amp;gt;HandlerList&amp;lt;/code&amp;gt; 来存储所有监听该事件的监听器。&amp;lt;br /&amp;gt; 事件被触发的…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;每个可以被监听的 &amp;lt;code&amp;gt;Event&amp;lt;/code&amp;gt;（事件）都有一个 &amp;lt;code&amp;gt;HandlerList&amp;lt;/code&amp;gt; 来存储所有监听该事件的监听器。&amp;lt;br /&amp;gt;&lt;br /&gt;
事件被触发的过程本质上是按照优先级顺序依次调用事件类的 &amp;lt;code&amp;gt;HandlerList&amp;lt;/code&amp;gt; 中所存储的监听器。&lt;br /&gt;
&lt;br /&gt;
== 获取某一事件的 HandlerList ==&lt;br /&gt;
&lt;br /&gt;
要获取某一事件的 HandlerList，可以对某个事件类调用静态方法 &amp;lt;code&amp;gt;getHandlerList()&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class ExampleListener implements Listener {&lt;br /&gt;
&lt;br /&gt;
    @EventHandler&lt;br /&gt;
    public void onPlayerJoin(PlayerJoinEvent event) {&lt;br /&gt;
        HandlerList handlerList = event.getHandlerList();&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Or:&lt;br /&gt;
    &lt;br /&gt;
    public ExampleListener() {&lt;br /&gt;
        // Access the handler list through the static getter&lt;br /&gt;
        HandlerList handlerList = PlayerJoinEvent.getHandlerList();&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== 注销一个监听器 ==&lt;br /&gt;
&lt;br /&gt;
要注销一个监听器，你可以对监听器注册所在的 &amp;lt;code&amp;gt;HandlerList&amp;lt;/code&amp;gt; 调用 &amp;lt;code&amp;gt;unregister()&amp;lt;/code&amp;gt; 方法。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
public class ExampleListener implements Listener {&lt;br /&gt;
&lt;br /&gt;
    @EventHandler&lt;br /&gt;
    public void onPlayerJoin(PlayerJoinEvent event) {&lt;br /&gt;
        HandlerList handlerList = event.getHandlerList();&lt;br /&gt;
        handlerList.unregister(this);&lt;br /&gt;
        // ...&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // 或者：&lt;br /&gt;
    &lt;br /&gt;
    public ExampleListener() {&lt;br /&gt;
        // 通过静态 getter 访问 HandlerList&lt;br /&gt;
        HandlerList handlerList = PlayerJoinEvent.getHandlerList();&lt;br /&gt;
        handlerList.unregister(this);&lt;br /&gt;
        // 的确，这是一个愚蠢的例子...&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
为了便于使用，你也可以通过 &amp;lt;code&amp;gt;Listener&amp;lt;/code&amp;gt; 或 &amp;lt;code&amp;gt;Plugin&amp;lt;/code&amp;gt; 对象进行注销。&lt;br /&gt;
&lt;br /&gt;
译注：对于前者，将会注销某个 &amp;lt;code&amp;gt;Listener&amp;lt;/code&amp;gt; 类内所有监听器方法。对于后者，将会注销某个插件所注册的全部事件监听器。&lt;br /&gt;
&lt;br /&gt;
你还可以对 &amp;lt;code&amp;gt;HandlerList&amp;lt;/code&amp;gt; 对象调用 &amp;lt;code&amp;gt;unregisterAll()&amp;lt;/code&amp;gt; 方法以注销监听某一事件的所有监听器。&lt;/div&gt;</summary>
		<author><name>Poikcue</name></author>
	</entry>
</feed>