最MC论坛

标题: PC端插件开发教程 EP.2玩家的手没法扔物品了 [打印本页]

作者: 嘟嘟    时间: 2016-4-14 20:58
标题: PC端插件开发教程 EP.2玩家的手没法扔物品了
本帖最后由 嘟嘟 于 2016-4-16 22:59 编辑

根据标题就知道我们今天学的是监听器
这一章会详细讲述监听器的使用方式 但不包括所有监听器能做的事情(关于这点自己查API

关于监听器我想说的一点是,这是一种非常有用且有趣的东西
在不考虑protocollib的情况下 有用的插件基本没法缺它 所以 监听器很重要 监听器很重要 监听器很重要

在第一章的情况下的插件是根本无卵用的,想要让他有个高端的功能 需要从两点入手: 监听器 指令
监听器的创建方式有两种 第一种是创建一个类专用来搞监听器 另一种是在主类中直接写类
不管是哪种 都是大同小异
方式1: 新类
创建一个类并使其继承Listener  现在你的类看上去是这样子的 (假设我的类名为Listner且路径为com.Tas.Listner)
  1. package com.TAS;

  2. import org.bukkit.event.Listener;

  3. public class Listner implements Listener {

  4. }
复制代码
接下来导入包org.bukkit.event.EventHandler与org.bukkit.event.player.PlayerDropItemEvent并在类中加入方法DropItem
加入标注@EventHandler
现在你的代码看上去是这样子的
  1. package com.TAS;

  2. import org.bukkit.event.Listener;
  3. import org.bukkit.event.EventHandler;
  4. import org.bukkit.event.player.PlayerDropItemEvent;

  5. public class Listner implements Listener {

  6.     @EventHandler
  7.     public void DropItem(PlayerDropItemEvent evt){ //这里用了什么监听器就写什么监听器 只写一个
  8.     }
  9. }
复制代码
接下来在DropItem方法中加入一行代码
evt.setCancelled(true);
这一行代码表示取消这个事件(在监听器的使用中非常常见) 在我们这个实例中就是不让玩家扔出去物品
接下来在主类的onEnable方法中加入以下代码 以注册此监听器
  1. 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完结 撒花~
版权为嘟嘟所有 侵权必究 谢谢!





欢迎光临 最MC论坛 (http://www.zuimc.com/) Powered by Discuz! X3.2