本帖最后由 嘟嘟 于 2016-4-16 22:59 编辑
根据标题就知道我们今天学的是监听器
这一章会详细讲述监听器的使用方式 但不包括所有监听器能做的事情(关于这点自己查API )
关于监听器我想说的一点是,这是一种非常有用且有趣的东西
在不考虑protocollib的情况下 有用的插件基本没法缺它 所以 监听器很重要 监听器很重要 监听器很重要
在第一章的情况下的插件是根本无卵用的,想要让他有个高端的功能 需要从两点入手: 监听器 指令
监听器的创建方式有两种 第一种是创建一个类专用来搞监听器 另一种是在主类中直接写类
不管是哪种 都是大同小异的
方式1: 新类
创建一个类并使其继承Listener 现在你的类看上去是这样子的 (假设我的类名为Listner且路径为com.Tas.Listner)- package com.TAS;
- import org.bukkit.event.Listener;
- public class Listner implements Listener {
- }
复制代码 接下来导入包org.bukkit.event.EventHandler与org.bukkit.event.player.PlayerDropItemEvent并在类中加入方法DropItem
并加入标注@EventHandler
现在你的代码看上去是这样子的- package com.TAS;
- import org.bukkit.event.Listener;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.player.PlayerDropItemEvent;
- public class Listner implements Listener {
- @EventHandler
- public void DropItem(PlayerDropItemEvent evt){ //这里用了什么监听器就写什么监听器 只写一个
- }
- }
复制代码 接下来在DropItem方法中加入一行代码
evt.setCancelled(true);
这一行代码表示取消这个事件(在监听器的使用中非常常见) 在我们这个实例中就是不让玩家扔出去物品
接下来在主类的onEnable方法中加入以下代码 以注册此监听器- getServer().getPluginManager().registerEvents(Listner(), this);
复制代码 其中的Listner就是你的监听器的类
方式2: 使用主类
所有步骤与之前一致
注意依然需要继承Listner
但最后一步的Listner()改成this
关于监听器无法直接使用getConfig等方法的解决方案(超纲)
另外 因为服务端某些原因 extends了javaplugin的类才能方便地使用getConfig
但是listner类不可能继承javaplugin 故我们需要在注册此监听器时使用其构造函数
在你的监听器类中加入以下代码
Main plugin; //Main为你的主类类名
public listner(Main main){
this.plugin=main;
}
其中因为创建的是构造函数 所以中间的方法不应该带有类型 且参数应为插件主类本身 而listner则为此类的类名
之后在Main 即插件的主类中注册监听器的代码稍作修改 将listner()变成listner(this)
在这之后在listner类中即可使用plugin.xxxx();调用主类的方法
getConfig也同理 |
EP.2完结 撒花~
版权为嘟嘟所有 侵权必究 谢谢!
|