您尚未登录,请登录后浏览更多内容! 登录 | 加入最MC

QQ登录

只需一步,快速开始

 找回密码
 加入最MC

QQ登录

只需一步,快速开始

查看: 2548|回复: 0
打印 上一主题 下一主题

[其他] PC端插件开发教程 EP.2玩家的手没法扔物品了

[复制链接]
  • TA的每日心情
    擦汗
    2016-5-27 18:53
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    跳转到指定楼层
    楼主
    发表于 2016-4-14 20:58:38 | 只看该作者 |0人打赏回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 嘟嘟 于 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完结 撒花~
    版权为嘟嘟所有 侵权必究 谢谢!
    打赏

    0

    收藏

    0

    支持

    0

    反对

    0

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    您需要登录后才可以回帖 登录 | 加入最MC

    本版积分规则