活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
目录
事件监听器基础:
服务器里发生的事情,服务器会用事件 来告诉你。 Bukkit中有各种各样的事件,例如 玩家的互动(玩家登录, 玩家点击了一个方块, 玩家死了,玩家重生...), 方块的动态(方块被放置, 方块被破坏, 方块附近的实体被改变...), 实体事件(一个怪物看上了你, 一个苦力怕帮你收集土方块...), 世界事件 (一个世界被加载或卸载, 一个区块被加载或卸载)等等. 由于MC官方的一些原因,他们的JavaDocs都挂了= =
上一期我们写好了插件的基本信息,这一篇文章会教你怎么写有关事件。
创建方法:
为了让你的插件能够监听并处理该事件的回调,你需要为它创建一个方法,这个方法就是事件监听器。
@EventHandler
public void onLogin(PlayerLoginEvent event) {
// 你自己的代码...
}
你需要向Bukkit注册你的监听器,这样服务器才会在"PlayerLoginEvent"触发时调用该监听器。我们需要给监听器打上 @EventHandler 批注。
@EventHandler" 是一个能打在某个方法上的批注,打上这个批注,这所对应的方法就成为了一个 优先级 为NORMAL的监听器。
你可以设置EventHandler标签的EventPriority属性来自定义事件的优先级,例如:
@EventHandler(priority = EventPriority.HIGHEST) // 将优先级设为HIGHEST级 @EventHandler(priority = EventPriority.LOW) // 优先级设为LOW级
添加监听器
为了让Bukkit能够注册你的监听器,你需要给你的监听器所在的类实现Listener接口(org.bukkit.event.Listener)。例如这样:
public final class MyPlayerListener implements Listener {
@EventHandler
public void onLogin(PlayerLoginEvent event) {
// Your code here...
}
}
监听器的方法名(例子中是“onlogin”的东西)并不重要;只要符合命名规则,起什么名字,你开心就好。Bukkit通过上面例子中“PlayerLoginEvent”这个参数知道的。个监听器只能监听一个事件,否则Bukkit是不会注册它的!你的插件的主类 (就是继承JavaPlugin的那个类) 也可以成为一个事件监听器。
EventHandler的参数
@EventHandler 批注可以设置某些参数来改变监听器的某些作用等。在某些情况下,你可以设置这些参数:
名称 |
---|