- 欢迎来到Minecraft插件百科!
- 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
- 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289
检查单独更改
本页面允许您检查防滥用过滤器根据某次单独更改所生成的变量,并使用过滤器进行测试。
根据本次更改生成的变量
变量 | 值 |
---|---|
编辑是否被标记为小编辑 (minor_edit) | |
用户账户名称 (user_name) | Poikcue |
用户所在群组(包括隐藏群组) (user_groups) | *
user
|
页面编号 (article_articleid) | 0 |
页面名字空间 (article_namespace) | 0 |
页面标题(不含名字空间) (article_text) | Paper/事件监听器 |
完整页面标题 (article_prefixedtext) | Paper/事件监听器 |
最后十位对该页面贡献的用户 (article_recent_contributors) | |
操作 (action) | edit |
编辑摘要/原因 (summary) | |
旧的内容模型 (old_content_model) | |
新的内容模型 (new_content_model) | wikitext |
编辑前的旧页面,wiki代码格式 (old_wikitext) | |
编辑后的新页面,wiki代码格式 (new_wikitext) | <code>Events</code>(事件)是在游戏中监听某一特定行为发生的有效方式。它们可以被服务器(或插件)触发。<br />
例如某名玩家加入了服务器,抑或是某个方块被破坏时,都将触发对应事件。<br />
插件能够触发自定义事件,例如玩家完成了某个插件自定义的任务,以供其它插件监听。
== 你的监听器类 ==
要进行监听,你需要创建一个类并实现 <code>Listener</code> 接口。<br />
类名可任取,不过建议使用与该类所监听的事件相关的名称。
<syntaxhighlight lang="java">public class ExampleListener implements Listener {
// ...
}</syntaxhighlight>
<span id="eventhandler"></span>
== <code>@EventHandler</code> ==
要监听某一个事件,你需要创建一个含有 <code>@EventHandler</code> 注解 ( <code>annotation</code> ) 的方法。<br />
同理,方法名可任取,不过建议使用与该方法所监听的事件相关的名称,并避免无意义方法名。
== 监听器方法 ==
方法体无需返回任何值,因此建议使用 <code>void</code> 作为返回类型。<br />
监听器方法有且仅有一个参数,其类型为该方法所监听的事件的类型。
<syntaxhighlight lang="java">
public class ExampleListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</syntaxhighlight>
<blockquote>由于插件可以自定义事件,这里无法列出一份包括所有可监听事件的列表。不过在[https://jd.papermc.io/paper/1.19/org/bukkit/event/Event.html 这里]可以了解 Paper 所提供的 <code>Event</code> 类的全部子类。
仅有实现了静态 <code>getHandlerList</code> 方法的事件才能被监听。
</blockquote>
== 注册监听器 ==
要注册监听器,你需要调用 <code>Bukkit.getPluginManager().registerEvents()</code> 并传入监听器类的实例和你的插件主类的实例。
这一方法将会注册监听器,并允许它监听事件。<br />
这一方法通常写在你的插件主类的 <code>onEnable()</code> 方法中,此时监听器将在服务器开始计算游戏刻 (tick) 时注册。
<syntaxhighlight lang="java">
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new ExampleListener(), this);
}
}
</syntaxhighlight>
<span id="eventpriority"></span>
== EventPriority ==
你也可以指定事件监听器的优先级。
<pre>
public class ExampleListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</pre>
你可以选择六个不同的优先级: - <code>EventPriority.LOWEST</code> - <code>EventPriority.LOW</code> - <code>EventPriority.NORMAL</code> - <code>EventPriority.HIGH</code> - <code>EventPriority.HIGHEST</code> - <code>EventPriority.MONITOR</code>
实际上优先级的顺序与直觉相反。优先级 '''越高''',事件被调用就 '''越晚'''。<br />
例如:你的插件需要对某个事件一锤定音,此后不希望被其他监听器再作覆盖,则需要使用<code>EventPriority.HIGHEST</code>。
<blockquote>'''注意'''<br />
<code>MONITOR</code> 的优先级常常用于获得其他插件对事件的修改结果,而不是亲自修改它。具有此优先级的监听器在所有监听器中排在最后。<br />
因此这样的监听器可获悉先前插件对事件的修改,例如事件是否被取消(cancellation)和对事件中某些字段的修改(modification)。
</blockquote>
== 取消事件 ==
一些事件可以取消,阻止某些行为发生。这些事件类实现了 <code>Cancellable</code>。
译注:事件的触发时机是在某个行为发生以前,当事件监听器全部运行完毕后,被插件所修改过的事件结果才会真正发生。
<syntaxhighlight lang="java">
public class ExampleListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.setCancelled(true);
}
}
</syntaxhighlight>
<blockquote>在你的插件取消某事件之前,请思考一下其它插件是否已经取消或更改了该事件。<br />
请先检查事件的各个字段再进行修改!
</blockquote>
上面的例子会取消事件,这意味着玩家无法加入到服务器中。当一个事件被取消后,其他监听器将继续按顺序被调用下去,除非某个监听器在 <code>@EventHandler</code> 注解中添加了 <code>ignoreCancelled = true</code> 以忽略已取消的事件。
如欲忽略已取消的事件,可以这样写:
<pre>
public class ExampleListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</pre> |
编辑产生的差异 (edit_diff) | @@ -1,1 +1,106 @@
+<code>Events</code>(事件)是在游戏中监听某一特定行为发生的有效方式。它们可以被服务器(或插件)触发。<br />
+例如某名玩家加入了服务器,抑或是某个方块被破坏时,都将触发对应事件。<br />
+插件能够触发自定义事件,例如玩家完成了某个插件自定义的任务,以供其它插件监听。
+== 你的监听器类 ==
+
+要进行监听,你需要创建一个类并实现 <code>Listener</code> 接口。<br />
+类名可任取,不过建议使用与该类所监听的事件相关的名称。
+
+<syntaxhighlight lang="java">public class ExampleListener implements Listener {
+ // ...
+}</syntaxhighlight>
+<span id="eventhandler"></span>
+== <code>@EventHandler</code> ==
+
+要监听某一个事件,你需要创建一个含有 <code>@EventHandler</code> 注解 ( <code>annotation</code> ) 的方法。<br />
+同理,方法名可任取,不过建议使用与该方法所监听的事件相关的名称,并避免无意义方法名。
+
+== 监听器方法 ==
+
+方法体无需返回任何值,因此建议使用 <code>void</code> 作为返回类型。<br />
+监听器方法有且仅有一个参数,其类型为该方法所监听的事件的类型。
+
+<syntaxhighlight lang="java">
+public class ExampleListener implements Listener {
+
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ // ...
+ }
+}
+</syntaxhighlight>
+<blockquote>由于插件可以自定义事件,这里无法列出一份包括所有可监听事件的列表。不过在[https://jd.papermc.io/paper/1.19/org/bukkit/event/Event.html 这里]可以了解 Paper 所提供的 <code>Event</code> 类的全部子类。
+
+仅有实现了静态 <code>getHandlerList</code> 方法的事件才能被监听。
+</blockquote>
+== 注册监听器 ==
+
+要注册监听器,你需要调用 <code>Bukkit.getPluginManager().registerEvents()</code> 并传入监听器类的实例和你的插件主类的实例。
+
+这一方法将会注册监听器,并允许它监听事件。<br />
+这一方法通常写在你的插件主类的 <code>onEnable()</code> 方法中,此时监听器将在服务器开始计算游戏刻 (tick) 时注册。
+
+<syntaxhighlight lang="java">
+public class ExamplePlugin extends JavaPlugin {
+
+ @Override
+ public void onEnable() {
+ getServer().getPluginManager().registerEvents(new ExampleListener(), this);
+ }
+}
+</syntaxhighlight>
+<span id="eventpriority"></span>
+== EventPriority ==
+
+你也可以指定事件监听器的优先级。
+
+<pre>
+public class ExampleListener implements Listener {
+
+ @EventHandler(priority = EventPriority.HIGH)
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ // ...
+ }
+}
+</pre>
+你可以选择六个不同的优先级: - <code>EventPriority.LOWEST</code> - <code>EventPriority.LOW</code> - <code>EventPriority.NORMAL</code> - <code>EventPriority.HIGH</code> - <code>EventPriority.HIGHEST</code> - <code>EventPriority.MONITOR</code>
+
+实际上优先级的顺序与直觉相反。优先级 '''越高''',事件被调用就 '''越晚'''。<br />
+例如:你的插件需要对某个事件一锤定音,此后不希望被其他监听器再作覆盖,则需要使用<code>EventPriority.HIGHEST</code>。
+
+<blockquote>'''注意'''<br />
+<code>MONITOR</code> 的优先级常常用于获得其他插件对事件的修改结果,而不是亲自修改它。具有此优先级的监听器在所有监听器中排在最后。<br />
+因此这样的监听器可获悉先前插件对事件的修改,例如事件是否被取消(cancellation)和对事件中某些字段的修改(modification)。
+</blockquote>
+== 取消事件 ==
+
+一些事件可以取消,阻止某些行为发生。这些事件类实现了 <code>Cancellable</code>。
+
+译注:事件的触发时机是在某个行为发生以前,当事件监听器全部运行完毕后,被插件所修改过的事件结果才会真正发生。
+
+<syntaxhighlight lang="java">
+public class ExampleListener implements Listener {
+
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ event.setCancelled(true);
+ }
+}
+</syntaxhighlight>
+<blockquote>在你的插件取消某事件之前,请思考一下其它插件是否已经取消或更改了该事件。<br />
+请先检查事件的各个字段再进行修改!
+</blockquote>
+上面的例子会取消事件,这意味着玩家无法加入到服务器中。当一个事件被取消后,其他监听器将继续按顺序被调用下去,除非某个监听器在 <code>@EventHandler</code> 注解中添加了 <code>ignoreCancelled = true</code> 以忽略已取消的事件。
+
+如欲忽略已取消的事件,可以这样写:
+
+<pre>
+public class ExampleListener implements Listener {
+
+ @EventHandler(ignoreCancelled = true)
+ public void onPlayerJoin(PlayerJoinEvent event) {
+ // ...
+ }
+}
+</pre>
|
新页面大小 (new_size) | 4892 |
编辑增加的行 (added_lines) | <code>Events</code>(事件)是在游戏中监听某一特定行为发生的有效方式。它们可以被服务器(或插件)触发。<br />
例如某名玩家加入了服务器,抑或是某个方块被破坏时,都将触发对应事件。<br />
插件能够触发自定义事件,例如玩家完成了某个插件自定义的任务,以供其它插件监听。
== 你的监听器类 ==
要进行监听,你需要创建一个类并实现 <code>Listener</code> 接口。<br />
类名可任取,不过建议使用与该类所监听的事件相关的名称。
<syntaxhighlight lang="java">public class ExampleListener implements Listener {
// ...
}</syntaxhighlight>
<span id="eventhandler"></span>
== <code>@EventHandler</code> ==
要监听某一个事件,你需要创建一个含有 <code>@EventHandler</code> 注解 ( <code>annotation</code> ) 的方法。<br />
同理,方法名可任取,不过建议使用与该方法所监听的事件相关的名称,并避免无意义方法名。
== 监听器方法 ==
方法体无需返回任何值,因此建议使用 <code>void</code> 作为返回类型。<br />
监听器方法有且仅有一个参数,其类型为该方法所监听的事件的类型。
<syntaxhighlight lang="java">
public class ExampleListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</syntaxhighlight>
<blockquote>由于插件可以自定义事件,这里无法列出一份包括所有可监听事件的列表。不过在[https://jd.papermc.io/paper/1.19/org/bukkit/event/Event.html 这里]可以了解 Paper 所提供的 <code>Event</code> 类的全部子类。
仅有实现了静态 <code>getHandlerList</code> 方法的事件才能被监听。
</blockquote>
== 注册监听器 ==
要注册监听器,你需要调用 <code>Bukkit.getPluginManager().registerEvents()</code> 并传入监听器类的实例和你的插件主类的实例。
这一方法将会注册监听器,并允许它监听事件。<br />
这一方法通常写在你的插件主类的 <code>onEnable()</code> 方法中,此时监听器将在服务器开始计算游戏刻 (tick) 时注册。
<syntaxhighlight lang="java">
public class ExamplePlugin extends JavaPlugin {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new ExampleListener(), this);
}
}
</syntaxhighlight>
<span id="eventpriority"></span>
== EventPriority ==
你也可以指定事件监听器的优先级。
<pre>
public class ExampleListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</pre>
你可以选择六个不同的优先级: - <code>EventPriority.LOWEST</code> - <code>EventPriority.LOW</code> - <code>EventPriority.NORMAL</code> - <code>EventPriority.HIGH</code> - <code>EventPriority.HIGHEST</code> - <code>EventPriority.MONITOR</code>
实际上优先级的顺序与直觉相反。优先级 '''越高''',事件被调用就 '''越晚'''。<br />
例如:你的插件需要对某个事件一锤定音,此后不希望被其他监听器再作覆盖,则需要使用<code>EventPriority.HIGHEST</code>。
<blockquote>'''注意'''<br />
<code>MONITOR</code> 的优先级常常用于获得其他插件对事件的修改结果,而不是亲自修改它。具有此优先级的监听器在所有监听器中排在最后。<br />
因此这样的监听器可获悉先前插件对事件的修改,例如事件是否被取消(cancellation)和对事件中某些字段的修改(modification)。
</blockquote>
== 取消事件 ==
一些事件可以取消,阻止某些行为发生。这些事件类实现了 <code>Cancellable</code>。
译注:事件的触发时机是在某个行为发生以前,当事件监听器全部运行完毕后,被插件所修改过的事件结果才会真正发生。
<syntaxhighlight lang="java">
public class ExampleListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
event.setCancelled(true);
}
}
</syntaxhighlight>
<blockquote>在你的插件取消某事件之前,请思考一下其它插件是否已经取消或更改了该事件。<br />
请先检查事件的各个字段再进行修改!
</blockquote>
上面的例子会取消事件,这意味着玩家无法加入到服务器中。当一个事件被取消后,其他监听器将继续按顺序被调用下去,除非某个监听器在 <code>@EventHandler</code> 注解中添加了 <code>ignoreCancelled = true</code> 以忽略已取消的事件。
如欲忽略已取消的事件,可以这样写:
<pre>
public class ExampleListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</pre>
|
编辑后的新页面,已解析为HTML源码 (new_html) | <div class="mw-parser-output"><p><code>Events</code>(事件)是在游戏中监听某一特定行为发生的有效方式。它们可以被服务器(或插件)触发。<br />
例如某名玩家加入了服务器,抑或是某个方块被破坏时,都将触发对应事件。<br />
插件能够触发自定义事件,例如玩家完成了某个插件自定义的任务,以供其它插件监听。
</p>
<div id="toc" class="toc"><div class="toctitle" lang="zh-CN" dir="ltr"><h2>目录</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#.E4.BD.A0.E7.9A.84.E7.9B.91.E5.90.AC.E5.99.A8.E7.B1.BB"><span class="tocnumber">1</span> <span class="toctext">你的监听器类</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#.40EventHandler"><span class="tocnumber">2</span> <span class="toctext">@EventHandler</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#.E7.9B.91.E5.90.AC.E5.99.A8.E6.96.B9.E6.B3.95"><span class="tocnumber">3</span> <span class="toctext">监听器方法</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="#.E6.B3.A8.E5.86.8C.E7.9B.91.E5.90.AC.E5.99.A8"><span class="tocnumber">4</span> <span class="toctext">注册监听器</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="#EventPriority"><span class="tocnumber">5</span> <span class="toctext">EventPriority</span></a></li>
<li class="toclevel-1 tocsection-6"><a href="#.E5.8F.96.E6.B6.88.E4.BA.8B.E4.BB.B6"><span class="tocnumber">6</span> <span class="toctext">取消事件</span></a></li>
</ul>
</div>
<h2><span id="你的监听器类"></span><span class="mw-headline" id=".E4.BD.A0.E7.9A.84.E7.9B.91.E5.90.AC.E5.99.A8.E7.B1.BB">你的监听器类</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%E5%99%A8&action=edit&section=1" title="编辑小节:你的监听器类">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>要进行监听,你需要创建一个类并实现 <code>Listener</code> 接口。<br />
类名可任取,不过建议使用与该类所监听的事件相关的名称。
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ExampleListener</span> <span class="kd">implements</span> <span class="n">Listener</span> <span class="o">{</span>
<span class="c1">// ...</span>
<span class="o">}</span>
</pre></div>
<p><span id="eventhandler"></span>
</p>
<h2><span id="@EventHandler"></span><span class="mw-headline" id=".40EventHandler"><code>@EventHandler</code></span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%E5%99%A8&action=edit&section=2" title="编辑小节:@EventHandler">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>要监听某一个事件,你需要创建一个含有 <code>@EventHandler</code> 注解 ( <code>annotation</code> ) 的方法。<br />
同理,方法名可任取,不过建议使用与该方法所监听的事件相关的名称,并避免无意义方法名。
</p>
<h2><span id="监听器方法"></span><span class="mw-headline" id=".E7.9B.91.E5.90.AC.E5.99.A8.E6.96.B9.E6.B3.95">监听器方法</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%E5%99%A8&action=edit&section=3" title="编辑小节:监听器方法">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>方法体无需返回任何值,因此建议使用 <code>void</code> 作为返回类型。<br />
监听器方法有且仅有一个参数,其类型为该方法所监听的事件的类型。
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ExampleListener</span> <span class="kd">implements</span> <span class="n">Listener</span> <span class="o">{</span>
<span class="nd">@EventHandler</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onPlayerJoin</span><span class="o">(</span><span class="n">PlayerJoinEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="c1">// ...</span>
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<blockquote><p>由于插件可以自定义事件,这里无法列出一份包括所有可监听事件的列表。不过在<a class="external text" href="https://jd.papermc.io/paper/1.19/org/bukkit/event/Event.html">这里</a>可以了解 Paper 所提供的 <code>Event</code> 类的全部子类。
</p><p>仅有实现了静态 <code>getHandlerList</code> 方法的事件才能被监听。
</p>
</blockquote>
<h2><span id="注册监听器"></span><span class="mw-headline" id=".E6.B3.A8.E5.86.8C.E7.9B.91.E5.90.AC.E5.99.A8">注册监听器</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%E5%99%A8&action=edit&section=4" title="编辑小节:注册监听器">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>要注册监听器,你需要调用 <code>Bukkit.getPluginManager().registerEvents()</code> 并传入监听器类的实例和你的插件主类的实例。
</p><p>这一方法将会注册监听器,并允许它监听事件。<br />
这一方法通常写在你的插件主类的 <code>onEnable()</code> 方法中,此时监听器将在服务器开始计算游戏刻 (tick) 时注册。
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ExamplePlugin</span> <span class="kd">extends</span> <span class="n">JavaPlugin</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onEnable</span><span class="o">()</span> <span class="o">{</span>
<span class="n">getServer</span><span class="o">().</span><span class="na">getPluginManager</span><span class="o">().</span><span class="na">registerEvents</span><span class="o">(</span><span class="k">new</span> <span class="n">ExampleListener</span><span class="o">(),</span> <span class="k">this</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<p><span id="eventpriority"></span>
</p>
<h2><span class="mw-headline" id="EventPriority">EventPriority</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%E5%99%A8&action=edit&section=5" title="编辑小节:EventPriority">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>你也可以指定事件监听器的优先级。
</p>
<pre>public class ExampleListener implements Listener {
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</pre>
<p>你可以选择六个不同的优先级: - <code>EventPriority.LOWEST</code> - <code>EventPriority.LOW</code> - <code>EventPriority.NORMAL</code> - <code>EventPriority.HIGH</code> - <code>EventPriority.HIGHEST</code> - <code>EventPriority.MONITOR</code>
</p><p>实际上优先级的顺序与直觉相反。优先级 <b>越高</b>,事件被调用就 <b>越晚</b>。<br />
例如:你的插件需要对某个事件一锤定音,此后不希望被其他监听器再作覆盖,则需要使用<code>EventPriority.HIGHEST</code>。
</p>
<blockquote><p><b>注意</b><br />
</p><p><code>MONITOR</code> 的优先级常常用于获得其他插件对事件的修改结果,而不是亲自修改它。具有此优先级的监听器在所有监听器中排在最后。<br />
因此这样的监听器可获悉先前插件对事件的修改,例如事件是否被取消(cancellation)和对事件中某些字段的修改(modification)。
</p>
</blockquote>
<h2><span id="取消事件"></span><span class="mw-headline" id=".E5.8F.96.E6.B6.88.E4.BA.8B.E4.BB.B6">取消事件</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E4%BA%8B%E4%BB%B6%E7%9B%91%E5%90%AC%E5%99%A8&action=edit&section=6" title="编辑小节:取消事件">编辑</a><span class="mw-editsection-bracket">]</span></span></h2>
<p>一些事件可以取消,阻止某些行为发生。这些事件类实现了 <code>Cancellable</code>。
</p><p>译注:事件的触发时机是在某个行为发生以前,当事件监听器全部运行完毕后,被插件所修改过的事件结果才会真正发生。
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ExampleListener</span> <span class="kd">implements</span> <span class="n">Listener</span> <span class="o">{</span>
<span class="nd">@EventHandler</span>
<span class="kd">public</span> <span class="kt">void</span> <span class="nf">onPlayerJoin</span><span class="o">(</span><span class="n">PlayerJoinEvent</span> <span class="n">event</span><span class="o">)</span> <span class="o">{</span>
<span class="n">event</span><span class="o">.</span><span class="na">setCancelled</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<blockquote><p>在你的插件取消某事件之前,请思考一下其它插件是否已经取消或更改了该事件。<br />
</p><p>请先检查事件的各个字段再进行修改!
</p>
</blockquote>
<p>上面的例子会取消事件,这意味着玩家无法加入到服务器中。当一个事件被取消后,其他监听器将继续按顺序被调用下去,除非某个监听器在 <code>@EventHandler</code> 注解中添加了 <code>ignoreCancelled = true</code> 以忽略已取消的事件。
</p><p>如欲忽略已取消的事件,可以这样写:
</p>
<pre>public class ExampleListener implements Listener {
@EventHandler(ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) {
// ...
}
}
</pre>
<!--
NewPP limit report
Cached time: 20221126052027
Cache expiry: 86400
Dynamic content: false
CPU time usage: 0.020 seconds
Real time usage: 4.768 seconds
Preprocessor visited node count: 77/1000000
Preprocessor generated node count: 172/1000000
Post‐expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Highest expansion depth: 2/40
Expensive parser function count: 0/100
Unstrip recursion depth: 0/20
Unstrip post‐expand size: 3186/5000000 bytes
-->
<!--
Transclusion expansion time report (%,ms,calls,template)
100.00% 0.000 1 -total
-->
</div> |
更改的Unix时间戳 (timestamp) | 1669440022 |