• 欢迎来到Minecraft插件百科!
  • 对百科编辑一脸懵逼?帮助:快速入门带您快速熟悉百科编辑!
  • 因近日遭受攻击,百科现已限制编辑,有意编辑请加入插件百科企鹅群:223812289

防滥用过滤器日志

滥用过滤器导航主页 | 最近过滤器更改 | 检查过去的编辑 | 滥用日志
跳转至: 导航搜索

本日志列出了过滤器捕捉到的所有操作。

日志详情:159

2022年11月26日 (六) 13:24:Poikcue讨论 | 贡献Paper/自定义事件执行操作“edit”时触发了过滤器4。采取的行动:标签;过滤器描述:禁止段首空两格(检查

编辑中的更改

 +
创建自定义事件是为你的插件添加新功能的不错的方式。<br />
 +
这将允许其它插件监听你的自定义事件并为你的插件添加新功能。
  
 +
== 创建一个自定义事件 ==
 +
 +
要创建一个自定义事件,你需要创建一个继承 <code>Event</code> 的类。每个事件都要求有一个 <code>HandlerList</code> 以存储所有监听该事件的监听器。<br />
 +
唯一一种例外情况是某个事件被有意设计为不可监听以便作其他事件的父类所用。比如 <code>BlockPistonEvent</code> 没有 <code>HandlerList</code>,所以不能被监听。<br />
 +
HandlerList 用于在事件被触发时,调用所有的监听器。
 +
 +
译注:虽然不能直接监听“活塞事件”,但是可以监听“活塞推出事件”和“活塞收回事件”。同理,尽管无法直接监听“玩家事件”,但是可以监听“玩家加入事件”、“玩家退出事件”等等。 <code>BlockPistonEvent</code> 是一个抽象类,自然不会用于直接监听。即使其不是抽象类也不能用于直接监听。
 +
 +
<blockquote>'''关于<code>getHandlerList</code>的信息:'''<br />
 +
尽管这一方法不是从 <code>Event</code> 类继承来的,你仍需要添加一个静态 <code>getHandlerList()</code> 方法并返回一个 <code>HandlerList</code>。<br />
 +
若要使你的事件正常工作, <code>getHandlers</code> 和 <code>getHandlerList</code> 方法必须同时存在。
 +
</blockquote>
 +
<syntaxhighlight lang="java">
 +
public class PaperIsCoolEvent extends Event {
 +
 +
    private static final HandlerList HANDLER_LIST = new HandlerList();
 +
 +
    public static HandlerList getHandlerList() {
 +
        return HANDLER_LIST;
 +
    }
 +
 +
    @Override
 +
    public HandlerList getHandlers() {
 +
        return HANDLER_LIST;
 +
    }
 +
}
 +
</syntaxhighlight>
 +
既然已经创建好了我们的事件,我们现在可以为它添加许多功能啦!<br />
 +
比如:我们想要在这个 <code>PaperIsCoolEvent</code> 事件被调用时,在服务器内发送一条广播。
 +
 +
<syntaxhighlight lang="java">
 +
public class PaperIsCoolEvent extends Event {
 +
 +
    private static final HandlerList HANDLER_LIST = new HandlerList();
 +
    private Component message;
 +
 +
    public PaperIsCoolEvent(Component message) {
 +
        this.message = message;
 +
    }
 +
 +
    public static HandlerList getHandlerList() {
 +
        return HANDLER_LIST;
 +
    }
 +
 +
    @Override
 +
    public HandlerList getHandlers() {
 +
        return HANDLER_LIST;
 +
    }
 +
 +
    public Component getMessage() {
 +
        return this.message;
 +
    }
 +
   
 +
    public void setMessage(Component message) {
 +
        this.message = message;
 +
    }
 +
}
 +
</syntaxhighlight>
 +
== 调用事件 ==
 +
 +
既然我们已经创建好了这个事件,我们接下来就可以触发它。
 +
 +
<syntaxhighlight lang="java">
 +
public class ExamplePlugin extends JavaPlugin {
 +
 +
    // ...
 +
 +
    public void callCoolPaperEvent() {
 +
        PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!"));
 +
        coolEvent.callEvent();
 +
        // 插件可以通过监听器来对消息作出更改。所以在事件被调用后我们需要重新获取消息内容。
 +
        // 这一段代码允许其它插件按自己的需求更改广播消息。
 +
        // 举个例子:某一插件通过监听该事件来为所有广播消息添加前缀。
 +
        Bukkit.broadcast(coolEvent.getMessage());
 +
    }
 +
}
 +
</syntaxhighlight>
 +
== 取消实现 ==
 +
 +
如果你想要让你的事件可被取消,则可以令其实现 <code>Cancellable</code> 接口。
 +
 +
<syntaxhighlight lang="java">
 +
public class PaperIsCoolEvent extends Event implements Cancellable {
 +
 +
    private static final HandlerList HANDLER_LIST = new HandlerList();
 +
    private Component message;
 +
    private boolean cancelled;
 +
 +
    // ...
 +
 +
    @Override
 +
    public boolean isCancelled() {
 +
        return this.cancelled;
 +
    }
 +
 +
    @Override
 +
    public void setCancelled(boolean cancelled) {
 +
        this.cancelled = cancelled;
 +
    }
 +
}
 +
</syntaxhighlight>
 +
现在,当事件被调用后,你就可以检查它是否被正常取消了。
 +
 +
<syntaxhighlight lang="java">public class ExamplePlugin extends JavaPlugin {
 +
 +
    // ...
 +
 +
    public void callCoolPaperEvent() {
 +
        PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!"));
 +
        coolEvent.callEvent();
 +
        if (!coolEvent.isCancelled()) {
 +
            Bukkit.broadcast(coolEvent.getMessage());
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>
 +
当一个事件是可以被取消的,并且事件已经被取消了,<code>Event#callEvent</code> 方法会返回 <code>false</code>。这就允许你直接在 if 语句中使用 <code>callEvent</code> 方法的返回值,无需再调用 <code>Cancellable#isCancelled</code> 方法手动检查了。
 +
 +
<syntaxhighlight lang="java">
 +
public class ExamplePlugin extends JavaPlugin {
 +
 +
// ...
 +
 +
public class ExamplePlugin extends JavaPlugin {
 +
    // ...
 +
    public void callCoolPaperEvent() {
 +
        PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!"));
 +
        if (coolEvent.callEvent()) { // 直接通过 callEvent 方法获取结果。
 +
            Bukkit.broadcast(coolEvent.getMessage());
 +
        }
 +
    }
 +
}
 +
</syntaxhighlight>

操作参数

变量
编辑是否被标记为小编辑 (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)
创建自定义事件是为你的插件添加新功能的不错的方式。<br /> 这将允许其它插件监听你的自定义事件并为你的插件添加新功能。 == 创建一个自定义事件 == 要创建一个自定义事件,你需要创建一个继承 <code>Event</code> 的类。每个事件都要求有一个 <code>HandlerList</code> 以存储所有监听该事件的监听器。<br /> 唯一一种例外情况是某个事件被有意设计为不可监听以便作其他事件的父类所用。比如 <code>BlockPistonEvent</code> 没有 <code>HandlerList</code>,所以不能被监听。<br /> HandlerList 用于在事件被触发时,调用所有的监听器。 译注:虽然不能直接监听“活塞事件”,但是可以监听“活塞推出事件”和“活塞收回事件”。同理,尽管无法直接监听“玩家事件”,但是可以监听“玩家加入事件”、“玩家退出事件”等等。 <code>BlockPistonEvent</code> 是一个抽象类,自然不会用于直接监听。即使其不是抽象类也不能用于直接监听。 <blockquote>'''关于<code>getHandlerList</code>的信息:'''<br /> 尽管这一方法不是从 <code>Event</code> 类继承来的,你仍需要添加一个静态 <code>getHandlerList()</code> 方法并返回一个 <code>HandlerList</code>。<br /> 若要使你的事件正常工作, <code>getHandlers</code> 和 <code>getHandlerList</code> 方法必须同时存在。 </blockquote> <syntaxhighlight lang="java"> public class PaperIsCoolEvent extends Event { private static final HandlerList HANDLER_LIST = new HandlerList(); public static HandlerList getHandlerList() { return HANDLER_LIST; } @Override public HandlerList getHandlers() { return HANDLER_LIST; } } </syntaxhighlight> 既然已经创建好了我们的事件,我们现在可以为它添加许多功能啦!<br /> 比如:我们想要在这个 <code>PaperIsCoolEvent</code> 事件被调用时,在服务器内发送一条广播。 <syntaxhighlight lang="java"> public class PaperIsCoolEvent extends Event { private static final HandlerList HANDLER_LIST = new HandlerList(); private Component message; public PaperIsCoolEvent(Component message) { this.message = message; } public static HandlerList getHandlerList() { return HANDLER_LIST; } @Override public HandlerList getHandlers() { return HANDLER_LIST; } public Component getMessage() { return this.message; } public void setMessage(Component message) { this.message = message; } } </syntaxhighlight> == 调用事件 == 既然我们已经创建好了这个事件,我们接下来就可以触发它。 <syntaxhighlight lang="java"> public class ExamplePlugin extends JavaPlugin { // ... public void callCoolPaperEvent() { PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); coolEvent.callEvent(); // 插件可以通过监听器来对消息作出更改。所以在事件被调用后我们需要重新获取消息内容。 // 这一段代码允许其它插件按自己的需求更改广播消息。 // 举个例子:某一插件通过监听该事件来为所有广播消息添加前缀。 Bukkit.broadcast(coolEvent.getMessage()); } } </syntaxhighlight> == 取消实现 == 如果你想要让你的事件可被取消,则可以令其实现 <code>Cancellable</code> 接口。 <syntaxhighlight lang="java"> public class PaperIsCoolEvent extends Event implements Cancellable { private static final HandlerList HANDLER_LIST = new HandlerList(); private Component message; private boolean cancelled; // ... @Override public boolean isCancelled() { return this.cancelled; } @Override public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } } </syntaxhighlight> 现在,当事件被调用后,你就可以检查它是否被正常取消了。 <syntaxhighlight lang="java">public class ExamplePlugin extends JavaPlugin { // ... public void callCoolPaperEvent() { PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); coolEvent.callEvent(); if (!coolEvent.isCancelled()) { Bukkit.broadcast(coolEvent.getMessage()); } } } </syntaxhighlight> 当一个事件是可以被取消的,并且事件已经被取消了,<code>Event#callEvent</code> 方法会返回 <code>false</code>。这就允许你直接在 if 语句中使用 <code>callEvent</code> 方法的返回值,无需再调用 <code>Cancellable#isCancelled</code> 方法手动检查了。 <syntaxhighlight lang="java"> public class ExamplePlugin extends JavaPlugin { // ... public class ExamplePlugin extends JavaPlugin { // ... public void callCoolPaperEvent() { PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); if (coolEvent.callEvent()) { // 直接通过 callEvent 方法获取结果。 Bukkit.broadcast(coolEvent.getMessage()); } } } </syntaxhighlight>
编辑产生的差异 (edit_diff)
@@ -1,1 +1,136 @@ +创建自定义事件是为你的插件添加新功能的不错的方式。<br /> +这将允许其它插件监听你的自定义事件并为你的插件添加新功能。 +== 创建一个自定义事件 == + +要创建一个自定义事件,你需要创建一个继承 <code>Event</code> 的类。每个事件都要求有一个 <code>HandlerList</code> 以存储所有监听该事件的监听器。<br /> +唯一一种例外情况是某个事件被有意设计为不可监听以便作其他事件的父类所用。比如 <code>BlockPistonEvent</code> 没有 <code>HandlerList</code>,所以不能被监听。<br /> +HandlerList 用于在事件被触发时,调用所有的监听器。 + +译注:虽然不能直接监听“活塞事件”,但是可以监听“活塞推出事件”和“活塞收回事件”。同理,尽管无法直接监听“玩家事件”,但是可以监听“玩家加入事件”、“玩家退出事件”等等。 <code>BlockPistonEvent</code> 是一个抽象类,自然不会用于直接监听。即使其不是抽象类也不能用于直接监听。 + +<blockquote>'''关于<code>getHandlerList</code>的信息:'''<br /> +尽管这一方法不是从 <code>Event</code> 类继承来的,你仍需要添加一个静态 <code>getHandlerList()</code> 方法并返回一个 <code>HandlerList</code>。<br /> +若要使你的事件正常工作, <code>getHandlers</code> 和 <code>getHandlerList</code> 方法必须同时存在。 +</blockquote> +<syntaxhighlight lang="java"> +public class PaperIsCoolEvent extends Event { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } +} +</syntaxhighlight> +既然已经创建好了我们的事件,我们现在可以为它添加许多功能啦!<br /> +比如:我们想要在这个 <code>PaperIsCoolEvent</code> 事件被调用时,在服务器内发送一条广播。 + +<syntaxhighlight lang="java"> +public class PaperIsCoolEvent extends Event { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + private Component message; + + public PaperIsCoolEvent(Component message) { + this.message = message; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + public Component getMessage() { + return this.message; + } + + public void setMessage(Component message) { + this.message = message; + } +} +</syntaxhighlight> +== 调用事件 == + +既然我们已经创建好了这个事件,我们接下来就可以触发它。 + +<syntaxhighlight lang="java"> +public class ExamplePlugin extends JavaPlugin { + + // ... + + public void callCoolPaperEvent() { + PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); + coolEvent.callEvent(); + // 插件可以通过监听器来对消息作出更改。所以在事件被调用后我们需要重新获取消息内容。 + // 这一段代码允许其它插件按自己的需求更改广播消息。 + // 举个例子:某一插件通过监听该事件来为所有广播消息添加前缀。 + Bukkit.broadcast(coolEvent.getMessage()); + } +} +</syntaxhighlight> +== 取消实现 == + +如果你想要让你的事件可被取消,则可以令其实现 <code>Cancellable</code> 接口。 + +<syntaxhighlight lang="java"> +public class PaperIsCoolEvent extends Event implements Cancellable { + + private static final HandlerList HANDLER_LIST = new HandlerList(); + private Component message; + private boolean cancelled; + + // ... + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } +} +</syntaxhighlight> +现在,当事件被调用后,你就可以检查它是否被正常取消了。 + +<syntaxhighlight lang="java">public class ExamplePlugin extends JavaPlugin { + + // ... + + public void callCoolPaperEvent() { + PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); + coolEvent.callEvent(); + if (!coolEvent.isCancelled()) { + Bukkit.broadcast(coolEvent.getMessage()); + } + } +} +</syntaxhighlight> +当一个事件是可以被取消的,并且事件已经被取消了,<code>Event#callEvent</code> 方法会返回 <code>false</code>。这就允许你直接在 if 语句中使用 <code>callEvent</code> 方法的返回值,无需再调用 <code>Cancellable#isCancelled</code> 方法手动检查了。 + +<syntaxhighlight lang="java"> +public class ExamplePlugin extends JavaPlugin { + +// ... + +public class ExamplePlugin extends JavaPlugin { + // ... + public void callCoolPaperEvent() { + PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); + if (coolEvent.callEvent()) { // 直接通过 callEvent 方法获取结果。 + Bukkit.broadcast(coolEvent.getMessage()); + } + } +} +</syntaxhighlight>
新页面大小 (new_size)
5213
编辑增加的行 (added_lines)
创建自定义事件是为你的插件添加新功能的不错的方式。<br /> 这将允许其它插件监听你的自定义事件并为你的插件添加新功能。 == 创建一个自定义事件 == 要创建一个自定义事件,你需要创建一个继承 <code>Event</code> 的类。每个事件都要求有一个 <code>HandlerList</code> 以存储所有监听该事件的监听器。<br /> 唯一一种例外情况是某个事件被有意设计为不可监听以便作其他事件的父类所用。比如 <code>BlockPistonEvent</code> 没有 <code>HandlerList</code>,所以不能被监听。<br /> HandlerList 用于在事件被触发时,调用所有的监听器。 译注:虽然不能直接监听“活塞事件”,但是可以监听“活塞推出事件”和“活塞收回事件”。同理,尽管无法直接监听“玩家事件”,但是可以监听“玩家加入事件”、“玩家退出事件”等等。 <code>BlockPistonEvent</code> 是一个抽象类,自然不会用于直接监听。即使其不是抽象类也不能用于直接监听。 <blockquote>'''关于<code>getHandlerList</code>的信息:'''<br /> 尽管这一方法不是从 <code>Event</code> 类继承来的,你仍需要添加一个静态 <code>getHandlerList()</code> 方法并返回一个 <code>HandlerList</code>。<br /> 若要使你的事件正常工作, <code>getHandlers</code> 和 <code>getHandlerList</code> 方法必须同时存在。 </blockquote> <syntaxhighlight lang="java"> public class PaperIsCoolEvent extends Event { private static final HandlerList HANDLER_LIST = new HandlerList(); public static HandlerList getHandlerList() { return HANDLER_LIST; } @Override public HandlerList getHandlers() { return HANDLER_LIST; } } </syntaxhighlight> 既然已经创建好了我们的事件,我们现在可以为它添加许多功能啦!<br /> 比如:我们想要在这个 <code>PaperIsCoolEvent</code> 事件被调用时,在服务器内发送一条广播。 <syntaxhighlight lang="java"> public class PaperIsCoolEvent extends Event { private static final HandlerList HANDLER_LIST = new HandlerList(); private Component message; public PaperIsCoolEvent(Component message) { this.message = message; } public static HandlerList getHandlerList() { return HANDLER_LIST; } @Override public HandlerList getHandlers() { return HANDLER_LIST; } public Component getMessage() { return this.message; } public void setMessage(Component message) { this.message = message; } } </syntaxhighlight> == 调用事件 == 既然我们已经创建好了这个事件,我们接下来就可以触发它。 <syntaxhighlight lang="java"> public class ExamplePlugin extends JavaPlugin { // ... public void callCoolPaperEvent() { PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); coolEvent.callEvent(); // 插件可以通过监听器来对消息作出更改。所以在事件被调用后我们需要重新获取消息内容。 // 这一段代码允许其它插件按自己的需求更改广播消息。 // 举个例子:某一插件通过监听该事件来为所有广播消息添加前缀。 Bukkit.broadcast(coolEvent.getMessage()); } } </syntaxhighlight> == 取消实现 == 如果你想要让你的事件可被取消,则可以令其实现 <code>Cancellable</code> 接口。 <syntaxhighlight lang="java"> public class PaperIsCoolEvent extends Event implements Cancellable { private static final HandlerList HANDLER_LIST = new HandlerList(); private Component message; private boolean cancelled; // ... @Override public boolean isCancelled() { return this.cancelled; } @Override public void setCancelled(boolean cancelled) { this.cancelled = cancelled; } } </syntaxhighlight> 现在,当事件被调用后,你就可以检查它是否被正常取消了。 <syntaxhighlight lang="java">public class ExamplePlugin extends JavaPlugin { // ... public void callCoolPaperEvent() { PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); coolEvent.callEvent(); if (!coolEvent.isCancelled()) { Bukkit.broadcast(coolEvent.getMessage()); } } } </syntaxhighlight> 当一个事件是可以被取消的,并且事件已经被取消了,<code>Event#callEvent</code> 方法会返回 <code>false</code>。这就允许你直接在 if 语句中使用 <code>callEvent</code> 方法的返回值,无需再调用 <code>Cancellable#isCancelled</code> 方法手动检查了。 <syntaxhighlight lang="java"> public class ExamplePlugin extends JavaPlugin { // ... public class ExamplePlugin extends JavaPlugin { // ... public void callCoolPaperEvent() { PaperIsCoolEvent coolEvent = new PaperIsCoolEvent(Component.text("Paper is cool!")); if (coolEvent.callEvent()) { // 直接通过 callEvent 方法获取结果。 Bukkit.broadcast(coolEvent.getMessage()); } } } </syntaxhighlight>
编辑后的新页面,已解析为HTML源码 (new_html)
<div class="mw-parser-output"><p>创建自定义事件是为你的插件添加新功能的不错的方式。<br /> 这将允许其它插件监听你的自定义事件并为你的插件添加新功能。 </p> <h2><span id="创建一个自定义事件"></span><span class="mw-headline" id=".E5.88.9B.E5.BB.BA.E4.B8.80.E4.B8.AA.E8.87.AA.E5.AE.9A.E4.B9.89.E4.BA.8B.E4.BB.B6">创建一个自定义事件</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6&amp;action=edit&amp;section=1" title="编辑小节:创建一个自定义事件">编辑</a><span class="mw-editsection-bracket">]</span></span></h2> <p>要创建一个自定义事件,你需要创建一个继承 <code>Event</code> 的类。每个事件都要求有一个 <code>HandlerList</code> 以存储所有监听该事件的监听器。<br /> 唯一一种例外情况是某个事件被有意设计为不可监听以便作其他事件的父类所用。比如 <code>BlockPistonEvent</code> 没有 <code>HandlerList</code>,所以不能被监听。<br /> HandlerList 用于在事件被触发时,调用所有的监听器。 </p><p>译注:虽然不能直接监听“活塞事件”,但是可以监听“活塞推出事件”和“活塞收回事件”。同理,尽管无法直接监听“玩家事件”,但是可以监听“玩家加入事件”、“玩家退出事件”等等。 <code>BlockPistonEvent</code> 是一个抽象类,自然不会用于直接监听。即使其不是抽象类也不能用于直接监听。 </p> <blockquote><p><b>关于<code>getHandlerList</code>的信息:</b><br /> </p><p>尽管这一方法不是从 <code>Event</code> 类继承来的,你仍需要添加一个静态 <code>getHandlerList()</code> 方法并返回一个 <code>HandlerList</code>。<br /> 若要使你的事件正常工作, <code>getHandlers</code> 和 <code>getHandlerList</code> 方法必须同时存在。 </p> </blockquote> <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">PaperIsCoolEvent</span> <span class="kd">extends</span> <span class="n">Event</span> <span class="o">{</span> <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">HandlerList</span> <span class="n">HANDLER_LIST</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HandlerList</span><span class="o">();</span> <span class="kd">public</span> <span class="kd">static</span> <span class="n">HandlerList</span> <span class="nf">getHandlerList</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">HANDLER_LIST</span><span class="o">;</span> <span class="o">}</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="n">HandlerList</span> <span class="nf">getHandlers</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">HANDLER_LIST</span><span class="o">;</span> <span class="o">}</span> <span class="o">}</span> </pre></div> <p>既然已经创建好了我们的事件,我们现在可以为它添加许多功能啦!<br /> 比如:我们想要在这个 <code>PaperIsCoolEvent</code> 事件被调用时,在服务器内发送一条广播。 </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">PaperIsCoolEvent</span> <span class="kd">extends</span> <span class="n">Event</span> <span class="o">{</span> <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">HandlerList</span> <span class="n">HANDLER_LIST</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HandlerList</span><span class="o">();</span> <span class="kd">private</span> <span class="n">Component</span> <span class="n">message</span><span class="o">;</span> <span class="kd">public</span> <span class="nf">PaperIsCoolEvent</span><span class="o">(</span><span class="n">Component</span> <span class="n">message</span><span class="o">)</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="na">message</span> <span class="o">=</span> <span class="n">message</span><span class="o">;</span> <span class="o">}</span> <span class="kd">public</span> <span class="kd">static</span> <span class="n">HandlerList</span> <span class="nf">getHandlerList</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">HANDLER_LIST</span><span class="o">;</span> <span class="o">}</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="n">HandlerList</span> <span class="nf">getHandlers</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="n">HANDLER_LIST</span><span class="o">;</span> <span class="o">}</span> <span class="kd">public</span> <span class="n">Component</span> <span class="nf">getMessage</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">message</span><span class="o">;</span> <span class="o">}</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setMessage</span><span class="o">(</span><span class="n">Component</span> <span class="n">message</span><span class="o">)</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="na">message</span> <span class="o">=</span> <span class="n">message</span><span class="o">;</span> <span class="o">}</span> <span class="o">}</span> </pre></div> <h2><span id="调用事件"></span><span class="mw-headline" id=".E8.B0.83.E7.94.A8.E4.BA.8B.E4.BB.B6">调用事件</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6&amp;action=edit&amp;section=2" title="编辑小节:调用事件">编辑</a><span class="mw-editsection-bracket">]</span></span></h2> <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">ExamplePlugin</span> <span class="kd">extends</span> <span class="n">JavaPlugin</span> <span class="o">{</span> <span class="c1">// ...</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">callCoolPaperEvent</span><span class="o">()</span> <span class="o">{</span> <span class="n">PaperIsCoolEvent</span> <span class="n">coolEvent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PaperIsCoolEvent</span><span class="o">(</span><span class="n">Component</span><span class="o">.</span><span class="na">text</span><span class="o">(</span><span class="s">&quot;Paper is cool!&quot;</span><span class="o">));</span> <span class="n">coolEvent</span><span class="o">.</span><span class="na">callEvent</span><span class="o">();</span> <span class="c1">// 插件可以通过监听器来对消息作出更改。所以在事件被调用后我们需要重新获取消息内容。</span> <span class="c1">// 这一段代码允许其它插件按自己的需求更改广播消息。</span> <span class="c1">// 举个例子:某一插件通过监听该事件来为所有广播消息添加前缀。</span> <span class="n">Bukkit</span><span class="o">.</span><span class="na">broadcast</span><span class="o">(</span><span class="n">coolEvent</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span> <span class="o">}</span> <span class="o">}</span> </pre></div> <h2><span id="取消实现"></span><span class="mw-headline" id=".E5.8F.96.E6.B6.88.E5.AE.9E.E7.8E.B0">取消实现</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Paper/%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6&amp;action=edit&amp;section=3" title="编辑小节:取消实现">编辑</a><span class="mw-editsection-bracket">]</span></span></h2> <p>如果你想要让你的事件可被取消,则可以令其实现 <code>Cancellable</code> 接口。 </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">PaperIsCoolEvent</span> <span class="kd">extends</span> <span class="n">Event</span> <span class="kd">implements</span> <span class="n">Cancellable</span> <span class="o">{</span> <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">HandlerList</span> <span class="n">HANDLER_LIST</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HandlerList</span><span class="o">();</span> <span class="kd">private</span> <span class="n">Component</span> <span class="n">message</span><span class="o">;</span> <span class="kd">private</span> <span class="kt">boolean</span> <span class="n">cancelled</span><span class="o">;</span> <span class="c1">// ...</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">isCancelled</span><span class="o">()</span> <span class="o">{</span> <span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="na">cancelled</span><span class="o">;</span> <span class="o">}</span> <span class="nd">@Override</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setCancelled</span><span class="o">(</span><span class="kt">boolean</span> <span class="n">cancelled</span><span class="o">)</span> <span class="o">{</span> <span class="k">this</span><span class="o">.</span><span class="na">cancelled</span> <span class="o">=</span> <span class="n">cancelled</span><span class="o">;</span> <span class="o">}</span> <span class="o">}</span> </pre></div> <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">ExamplePlugin</span> <span class="kd">extends</span> <span class="n">JavaPlugin</span> <span class="o">{</span> <span class="c1">// ...</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">callCoolPaperEvent</span><span class="o">()</span> <span class="o">{</span> <span class="n">PaperIsCoolEvent</span> <span class="n">coolEvent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PaperIsCoolEvent</span><span class="o">(</span><span class="n">Component</span><span class="o">.</span><span class="na">text</span><span class="o">(</span><span class="s">&quot;Paper is cool!&quot;</span><span class="o">));</span> <span class="n">coolEvent</span><span class="o">.</span><span class="na">callEvent</span><span class="o">();</span> <span class="k">if</span> <span class="o">(!</span><span class="n">coolEvent</span><span class="o">.</span><span class="na">isCancelled</span><span class="o">())</span> <span class="o">{</span> <span class="n">Bukkit</span><span class="o">.</span><span class="na">broadcast</span><span class="o">(</span><span class="n">coolEvent</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span> </pre></div> <p>当一个事件是可以被取消的,并且事件已经被取消了,<code>Event#callEvent</code> 方法会返回 <code>false</code>。这就允许你直接在 if 语句中使用 <code>callEvent</code> 方法的返回值,无需再调用 <code>Cancellable#isCancelled</code> 方法手动检查了。 </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="c1">// ...</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="c1">// ...</span> <span class="kd">public</span> <span class="kt">void</span> <span class="nf">callCoolPaperEvent</span><span class="o">()</span> <span class="o">{</span> <span class="n">PaperIsCoolEvent</span> <span class="n">coolEvent</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PaperIsCoolEvent</span><span class="o">(</span><span class="n">Component</span><span class="o">.</span><span class="na">text</span><span class="o">(</span><span class="s">&quot;Paper is cool!&quot;</span><span class="o">));</span> <span class="k">if</span> <span class="o">(</span><span class="n">coolEvent</span><span class="o">.</span><span class="na">callEvent</span><span class="o">())</span> <span class="o">{</span> <span class="c1">// 直接通过 callEvent 方法获取结果。</span> <span class="n">Bukkit</span><span class="o">.</span><span class="na">broadcast</span><span class="o">(</span><span class="n">coolEvent</span><span class="o">.</span><span class="na">getMessage</span><span class="o">());</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span> </pre></div> <!-- NewPP limit report Cached time: 20221126052411 Cache expiry: 86400 Dynamic content: false CPU time usage: 0.028 seconds Real time usage: 1.991 seconds Preprocessor visited node count: 53/1000000 Preprocessor generated node count: 148/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: 10613/5000000 bytes --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 0.000 1 -total --> </div>
更改的Unix时间戳 (timestamp)
1669440249