事件(Event),对于我们并不陌生。若微观,可以小到你每天起床、刷牙、开门等等。MC中的事件分的也很多。
具体事件可以在https://bukkit.windit.net/javadoc 参考,且函数格式大多与本章和下一章举例 PlayerJoinEvent 和 PlayerItemHeldEvent 一致。
玩家加入事件(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查查更改全服玩家广播内容的函数是什么?
答案(点击查看)