Bukkit 插件教程(4) 事件

事件(Event),对于我们并不陌生。若微观,可以小到你每天起床、刷牙、开门等等。MC中的事件分的也很多。

具体事件可以在https://bukkit.windit.net/javadoc 参考,且函数格式大多与本章和下一章举例 PlayerJoinEventPlayerItemHeldEvent 一致。

玩家加入事件(PlayerJoinEvent)

玩家加入事件通常用于欢迎某玩家加入,或者在插件配置中新建一个玩家记录下来。

public void onJoin(PlayerJoinEvent e){
}Code language: JavaScript (javascript)

同样,创建一个函数 onJoin,因为不需要返回任何值,因此为void。
Bukkit 会在玩家加入时实例化这个class PlayerJoinEvent并传给此函数当作参数 e(在本处参数为e,可以自行修改随你喜好)

查阅该类,发现有一个方法:

这个方法返回的 Player 是和我们上一章的 CommandSender 属于继承关系!(CommandSender 继承了 Player

因此我们可以调用这个方法获取进入到游戏的玩家。

@EventHandler
public void onJoin(PlayerJoinEvent e){
  Player player = e.getPlayer();
}Code language: JavaScript (javascript)

因为我们没有导入 Player 这个类和 EventHandler,因此需要导入:

在开头加入:

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;Code language: CSS (css)

(提示:实际上不导入也可以,但是在后面的操作中你需要一直通过函数 e.getPlayer 获取玩家实例,你是觉得一个变量“p“简单还是”e.getPlayer()“简单呢?)

@EventHandler 用于告诉Bukkit这是一个玩家加入事件的处理函数,不然Bukkit无法找到该函数。

随意加个信息提示。(注意,此处是只单单发送给这个玩家信息),这里还用了一个方法:Player.getName,用于获取玩家的名称。

重中之重!在插件中的onEnable函数,我们需要加入这一行:

getServer().getPluginManager().registerEvents(this, this);Code language: JavaScript (javascript)

用于监听事件。

打包,进游戏看看:

因为我们没有修改服务器默认的进服提示,所以还是会弹出第二个(第一个只发送给玩家,第二个发送给全服玩家).

扩展

Spigot-API查查更改全服玩家广播内容的函数是什么?

答案(点击查看)

发表回复