事件监听是Bukkit插件最主要的功能实现渠道,甚至是使用nms也是为其服务,甚至你自己写的操作口也和他的本质差不了多少。简单描述事件监听就是:Bukkit将游戏内的各种行为标出,在行为执行前后设置插入点来限制这些行为或者当做触发器用,例如着火了行为,我可以利用Bukkit在着火前取消、修改着火原因,在着火时让特定被着火物体灭火,着火后掉多少血(或者是更奇怪的浴火重生),都是可以依靠事件系统搞定的。

事件监听编写可以直接写到主类,也可以单独一个类,由于我们要监听的事件很多,所有我们只讲单独一个类的形式。仍然,为了方便管理,我们在主包下面建立一个监听子包,存放 事件监听类A.java →:

//事件监听类实现了Listener接口
public class 事件监听类A implements Listener {
    //这句先不要在意
    private static String smotd = "§6RNM退钱!!\n对得起我们吗?!";
    //其内部的事件监听方法一个只能监听一个事件,使用@EventHandler修饰代表该方法是事件监听方法
    @EventHandler
    //此处监听的是PlayerLoginEvent,即玩家登陆事件,时间节点是玩家出现在游戏世界的前一瞬间
    //参见https://bukkit.windit.net/javadoc/org/bukkit/event/player/PlayerLoginEvent.html
    public void onLogin(PlayerLoginEvent e) {
        //e作为方法唯一参,他可以轻松获取我们需要的对象并进行操作
        //如果e.获取事件对应玩家.等同于(“sb”)
        if(e.getPlayer().equals("sb")) {
            //那么e.执行禁止登陆(人满为由,消息显示"sb不允许登入")
            e.disallow(PlayerLoginEvent.Result.KICK_FULL, "sb不允许登入");
        }
    }
    
    //同样修饰
    @EventHandler
    //监听刷新本服MOTD的事件
    public void onPing(ServerListPingEvent e) {
        //MOTD设置为smotd对象
        e.setMotd(smotd);
        //设置服务器图标,图标是出主类引来的
        e.setServerIcon(CyanHoning.csi);
    }
}

事件监听类是这样写的,写完我们需要对其注册一下,只需要在C1中的onEnable()方法中加入注册句即可:

@Override
public void onEnable() {
    //初始化插件静态化
    ins = this;
    //输出配置文件config.yml,不用也还是输出好,创建个文件夹表明正常启动了
    saveDefaultConfig();

    //监听类注册,流程是:BukkitAPI调用.获取插件管理器.注册事件类(new 事件类, 本插件);
    Bukkit.getPluginManager().registerEvents(new 事件监听类A, this);
    Bukkit.getPluginManager().registerEvents(new 事件监听类B, this);

    //加载成功信息
    Bukkit.getConsoleSender().sendMessage(ChatColor.BLUE + "CyanHoning插件已经加载成功!");
}

这样,服务器现在多了两个功能,一个是禁止sb进入服务器,一个是设置服务器在多人游戏列表的刷新显示内容。

最后修改:2022 年 05 月 26 日
如果觉得我的文章对你有用,请随意赞赏