上一期介绍了Command的使用, 本期教程是Listener(监听器)的使用,那么本期内容将教你如何使用Listener来完成简单的监听。让我们开始吧~

上期传送门:#2 Bukkit插件开发 – Command命令 – LovelyCat的小站 (lovelycatv.cn)

1.创建并注册监听器

回到项目, 新建一个类或包, 名字随意.
别忘了给你的这个类 implements Listener。
然后, 开始写 onJoin 和 onQuit 方法。(函数名字随便取都行)
记得在每个方法前加上 @EventHandler。
这是我的代码:

@EventHandler
    public void onJoin(PlayerJoinEvent event) {
        event.setJoinMessage(null);
        Bukkit.broadcastMessage("* Welcome "+event.getPlayer().getName()+"!");
        event.getPlayer().sendMessage("你好, 这条信息只有你可见!");
    }
    @EventHandler
    public void onQuit(PlayerQuitEvent event) {
        event.setQuitMessage(null);
        Bukkit.broadcastMessage("* "+event.getPlayer().getName()+"离开了游戏");
    }
  • event.setJoinMessage(null); //这条代码将关闭游戏自带的加入提示
  • Bukkit.broadcastMessage(); //这将发送一条公共信息
  • event.getPlayer().sendMessage(); //给玩家发送信息(private)

现在回到主类, 在 onEnable() 方法中写

getServer().getPluginManager().registerEvents(new PlayerEvent(), this);

来注册这个监听器.

@Override
    public void onEnable() {
        getLogger().info("Activity");
        Bukkit.getPluginCommand("cmd").setExecutor(new cmd());
        getServer().getPluginManager().registerEvents(new PlayerListener(), this);
    }

现在你的监听器已经可以正常运行了!

null

好啦,现在你已经学会创建监听器了,那么下面用一些事件举例子,当然还有很多很多监听事件,详情见此:概览 (Spigot-API 1.17-R0.1-SNAPSHOT API 中文文档) (windit.net)

拓展1.WeatherChangeEvent(天气改变)

WeatherChangeEvent 下提供了 toWeatherState() 方法. 返回值是 boolean 类型.
你可以使用这个方法来判断是否下雨.
例子:

@EventHandler
    public void WorldEvents (WeatherChangeEvent event) {
        boolean isRain;
        isRain = event.toWeatherState();
        if (isRain == true) {
            Bukkit.broadcastMessage("天气已改变!");
        }
    }

拓展2.PlayerExpChangeEvent(玩家经验变更)

@EventHandler
    public void onExpChanged (PlayerExpChangeEvent expChangeEvent) {
        int a = expChangeEvent.getAmount(); //改变的经验值
    }

拓展3.PlayerLevelChangeEvent(玩家经验等级变更)

@EventHandler
    public void onLvLChanged (PlayerLevelChangeEvent event) {
       event.getNewLevel();
       event.getOldLevel();
    }

拓展4.AsyncPlayerChatEvent(玩家聊天)

也许你不喜欢Minecraft自带的聊天格式, 那么这个拓展可能对你有所帮助.
开始之前, 先看一段代码:

public void onChat (AsyncPlayerChatEvent event) {
        String chat = event.getMessage(); //获取玩家要发送的信息
        event.setCancelled(true); //取消发送
        Bukkit.broadcastMessage(event.getPlayer().getName()+" >> "+chat); //换成想要的格式再发送到公屏.
    }

AsyncPlayerChatEvent 类下提供了一些方法,这里不一一举例,自己探索吧。


那么本期教程就到此结束啦,感谢观看!


0 条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注