基于Java的Minecraft游戏后端自定义插件 05事件监听器
事件监听器
- 内容简介
- 事件监听器
内容简介
事件监听器
文档中org.bukkit.event都是事件包
https://www.youtube.com/watch?v=PWQNsqwD-AY.
public void registerEvents(Listener listener, Plugin plugin) {
以上省略…
for (Map.Entry<Class<? extends Event>, Set> entry : plugin.getPluginLoader().createRegisteredListeners(listener, plugin).entrySet()) {
getEventListeners(getRegistrationClass((Class)entry.getKey())).registerAll((Collection)entry.getValue());
}
}
那么我们可以从上边的代码发现, BukkitAPI 先对传入的 Listener 实现类进行检查,
之后反射遍历传入的 Listener 实现类的所有方法, 之后再做些必要的事情后就注册好了一个事件了
优先级
详细教程http://mineplugin.org/Event_API_Reference#EventHandler.E7.9A.84.E5.8F.82.E6.95.B0
插件中我编写的事件监听包括游戏进入游戏后的操作提示以及图鉴界面上的按钮点击操作跳转:
package com.project.minecraft.event;import FzmXer.VexFxTitle.Gui.FxTitleGui;
import FzmXer.VexFxTitle.Gui.PlayerTags;
import FzmXer.VexFxTitle.SQL.DataManager;
import FzmXer.VexFxTitle.Utils.Utils;
import com.connorlinfoot.titleapi.TitleAPI;
import com.project.minecraft.main;
import com.project.minecraft.vexview.Jiangli_Effect1;
import com.project.minecraft.vexview.Jiangli_Effect2;
import com.project.minecraft.vexview.MyGui_tujian;
import lk.vexview.api.VexViewAPI;
import lk.vexview.event.ButtonClickEvent;
import lk.vexview.event.VerificationFinishEvent;
import lk.vexview.event.gui.VexGuiOpenEvent;
import lk.vexview.gui.components.VexComponents;
import lk.vexview.hud.VexImageShow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;import java.util.List;public class VexGuiEvent implements Listener {@EventHandlerpublic void PlayerOpenGui(VexGuiOpenEvent event) {List<VexComponents> components = event.getGui().getComponents();for (VexComponents vex : components) {main.plugin.getLogger().info(vex.getType());}}
//监听图鉴界面上的按钮点击操作跳转@EventHandlerpublic void PlayerClickButton(ButtonClickEvent event) {Player player = event.getPlayer();int buttonID = (int) event.getButtonID();if (buttonID == 1) {VexViewAPI.openGui(player, MyGui_tujian.zhiwuGui());player.sendMessage("§d打开植物图鉴界面§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§1Minecraft图鉴", "§2植物图鉴");} else if (buttonID == 2) {VexViewAPI.openGui(player, MyGui_tujian.shengwuGui());player.sendMessage("§d打开生物图鉴界面§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§1Minecraft图鉴", "§2生物图鉴");} else if (buttonID == 3) {VexViewAPI.openGui(player, MyGui_tujian.zhuangbeiGui());player.sendMessage("§d打开装备图鉴界面§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§1Minecraft图鉴", "§2装备图鉴");} else if (buttonID == 4) {VexViewAPI.openGui(player, MyGui_tujian.chengjiuGui());player.sendMessage("§d打开悬赏任务界面§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§1Minecraft图鉴", "§2悬赏任务");} else if (buttonID == 5) {VexViewAPI.openGui(player, MyGui_tujian.tujianGui());player.sendMessage("§d返回图鉴列表§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§1Minecraft图鉴", "§2返回");} else if (buttonID == 6) {player.closeInventory();player.sendMessage("§d关闭图鉴界面§e成功");} else if (buttonID == 7) {VexViewAPI.openGui(player, MyGui_tujian.jiangliGui(player));player.sendMessage("§d打开奖励图鉴界面§e成功");}else if (buttonID == 8) {//装备 特效1Jiangli_Effect1 effect1 = new Jiangli_Effect1(player);effect1.startEffect();player.sendMessage("§d装备特效1“闪电风暴”§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§2闪电风暴", "特效1");}else if (buttonID == 9) {//返回 主菜单VexViewAPI.openGui(player, MyGui_tujian.tujianGui());player.sendMessage("§d返回图鉴界面§e成功");}else if (buttonID == 10) {//装备 特效2Jiangli_Effect2 effect2 = new Jiangli_Effect2(player);effect2.startEffect();player.sendMessage("§d装备特效2“龙之吐息”§e成功");TitleAPI.sendTitle(player, 5, 4, 5, "§2龙之吐息", "特效2");} else if (buttonID == 12) {//装备 称号1DataManager.SetTitleState(player.getUniqueId().toString(), 1);VexViewAPI.openGui(player, new FxTitleGui(player, Utils.Scale(player)));PlayerTags.ResPlayerTags(player);TitleAPI.sendTitle(player, 5, 4, 5, "§2羿若惊羽", "称号1");player.sendMessage("§a称号显示界面§e已打开");}else if (buttonID == 13) {//取消装备 称号1DataManager.SetTitleState(player.getUniqueId().toString(), 0);PlayerTags.cencelRun(player);player.sendMessage("§a称号显示: 已关闭");}else if (buttonID == 14) {//装备 称号2DataManager.SetTitleState(player.getUniqueId().toString(), 1);VexViewAPI.openGui(player, new FxTitleGui(player, Utils.Scale(player)));PlayerTags.ResPlayerTags(player);player.sendMessage("§a称号显示界面§e已打开");TitleAPI.sendTitle(player, 5, 4, 5, "§2魅影无双", "称号2");}else if (buttonID == 15) {//取消装备 称号2DataManager.SetTitleState(player.getUniqueId().toString(), 0);PlayerTags.cencelRun(player);player.sendMessage("§a称号显示: 已关闭");}else if (buttonID == 16) {//装备 称号3DataManager.SetTitleState(player.getUniqueId().toString(), 1);VexViewAPI.openGui(player, new FxTitleGui(player, Utils.Scale(player)));PlayerTags.ResPlayerTags(player);player.sendMessage("§a称号显示界面§e已打开");TitleAPI.sendTitle(player, 5, 4, 5, "§2仙神蕴灵", "称号3");}else if (buttonID == 17) {//取消装备 称号3DataManager.SetTitleState(player.getUniqueId().toString(), 0);PlayerTags.cencelRun(player);player.sendMessage("§a称号显示: 已关闭");}else if (buttonID == 18) {//装备 称号4DataManager.SetTitleState(player.getUniqueId().toString(), 1);VexViewAPI.openGui(player, new FxTitleGui(player, Utils.Scale(player)));PlayerTags.ResPlayerTags(player);player.sendMessage("§a称号显示界面§e已打开");TitleAPI.sendTitle(player, 5, 4, 5, "§2傲视天下", "称号4");}else if (buttonID == 19) {//取消装备 称号4DataManager.SetTitleState(player.getUniqueId().toString(), 0);PlayerTags.cencelRun(player);player.sendMessage("§a称号显示: 已关闭");}else if (buttonID == 20) {//装备 称号5DataManager.SetTitleState(player.getUniqueId().toString(), 1);VexViewAPI.openGui(player, new FxTitleGui(player, Utils.Scale(player)));PlayerTags.ResPlayerTags(player);player.sendMessage("§a称号显示界面§e已打开");TitleAPI.sendTitle(player, 5, 4, 5, "§2御神役鬼", "称号5");}else if (buttonID == 21) {//取消装备 称号5DataManager.SetTitleState(player.getUniqueId().toString(), 0);PlayerTags.cencelRun(player);player.sendMessage("§a称号显示: 已关闭");}else if (buttonID == 22) {//装备 称号6DataManager.SetTitleState(player.getUniqueId().toString(), 1);VexViewAPI.openGui(player, new FxTitleGui(player, Utils.Scale(player)));PlayerTags.ResPlayerTags(player);player.sendMessage("§a称号显示界面§e已打开");TitleAPI.sendTitle(player, 5, 4, 5, "§2八荒雷动·傲视群雄", "称号6");}else if (buttonID == 23) {//取消装备 称号6DataManager.SetTitleState(player.getUniqueId().toString(), 0);PlayerTags.cencelRun(player);player.sendMessage("§a称号显示: 已关闭");}}// 监听玩家进入游戏后显示操作提示@EventHandlerpublic void PlayerJoinFinishEvent(VerificationFinishEvent event){Player player = event.getPlayer();VexImageShow vis = new VexImageShow("0","[local]欢迎.jpg",-1,-1,240,160,240,160,10);VexViewAPI.sendHUD(player,vis);int num = main.plugin.getConfig().getInt(event.getPlayer().getName());if(num==0){num++;main.plugin.getConfig().set(event.getPlayer().getName(),1);main.plugin.saveConfig();}else{num++;main.plugin.getConfig().set(event.getPlayer().getName(),num);main.plugin.saveConfig();}event.getPlayer().sendMessage("你是第"+num+"次进入游戏");main.plugin.getLogger().info("触发了加入服务器时间:" + player.getName());player.sendMessage("§4欢迎至尊vip进入游戏:§c【" + player.getName() + "】");player.sendMessage("§d打开主菜单具体指令操作 :§e【 /handbook menu 】");player.sendMessage("§d打开图鉴界面请输入指令:§e【 /open 以查看帮助 】");player.sendMessage("§d图鉴界面具体指令操作 :§e【 /open <GuiName> 】");player.sendMessage("§d成就奖励具体指令操作 :§e【 /vftxi < Order > 】");player.sendMessage("§d每日签到具体指令操作 :§e【 /signin < Order > 】");player.sendMessage("§d成就具体指令操作 : §e【 /chengjiu < Order> 】");}
}
如何实现VexView绘制的Gui界面中VexButton的点击完成相应的操作如界面跳转?
通过赋予VexView绘制的Gui界面中相同功能的VexButton以相同的ButtonID,通过ButtonClickEvent中的getButtonID();方法获取每一个按钮的ID并赋予其所需要的方法,当监听到玩家点击了某个Button时,获取其ID并调用其方法如VexViewAPI.openGui()方法以实现界面跳转或其他功能。
基于Java的Minecraft游戏后端自定义插件 05事件监听器相关推荐
- 基于Java的Minecraft游戏后端自定义插件 的Java实践项目整理
Minecraft_Plugin 1.项目概述 2.系统设计 3.功能模块成果展示 4.个人总结 1.项目概述 1.1 项目简介 小组准备编写一个具有武器战斗,道具收集.互动社交和任务悬赏四大系统的聚 ...
- 基于Java的Minecraft游戏后端自定义插件 01客户端服务端
客户端服务端 课程大纲 初识客户端与服务端 服务端 客户端 客户端下载与启动 客户端文件目录介绍 服务端与启动 服务端目录 服务端文件详解 常规游戏通信同步 课程大纲 常见服务端简介 服务端目录结构介 ...
- 基于Java的Minecraft游戏后端自定义插件 04注册命令与处理
注册命令与处理 内容简介 如何注册命令 权限设置 plugin.yml权限 luckpermission 内容简介 如何注册命令(理解) 如何重写JavaPlugin中的onCommand方法来做到命 ...
- 基于Java的Minecraft游戏后端自定义插件 06绘制简单粒子特效与BukkitRunable定时器
绘制简单粒子特效与BukkitRunable定时器 粒子特效 多线程BukkitRunable 粒子特效 利用定时器来设定特效出现是否延迟,以及周期频率 奖励特效一: VexLighting 在玩家处 ...
- 基于java的雷电游戏系统设计与实现(项目报告+答辩PPT+源代码+部署视频)
项目报告 基于Java的雷电游戏 电脑游戏,是指在计算机上能够运转的游戏软件.这种软件具有较强的娱乐性.电脑游戏的创新和发展与硬件.软件的发展紧密相关.它能够给玩家提供一个虚拟的环境,使游戏带给了人们 ...
- 基于Java的雷电游戏设计(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的雷电游戏 摘 要 电脑游戏,是指在计算机上能够运转的游戏软件.这种软件具 ...
- 基于java的俄罗斯方块游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
基于Java的俄罗斯方块游戏的设计与实现 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑.手机.掌上游戏机产品,是一款游戏规则简单,但又不缺乏乐趣的简单经典小游戏,上手容易,适用范围广泛 ...
- java拼图游戏设计文档_基于JAVA的拼图游戏的设计与实现(含录像)
基于JAVA的拼图游戏的设计与实现(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文15500字,程序代码,答辩PPT,答辩视频录像) 摘 要 在我们日常生活中,有很多的益智类游戏,如七巧 ...
- 基于JAVA网页小游戏交流论坛计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA网页小游戏交流论坛计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA网页小游戏交流论坛计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开 ...
最新文章
- 面试季:如何在面试中介绍自己的项目经验
- 值类型与引用类型的区别
- 随笔 面试题网站
- 三方协议,档案,工龄,保险,户口,
- python拼图游戏_乐趣无穷的Python课堂
- 通过Rancher安装K8s
- java中的执行顺序_Java中的执行顺序
- 向英雄联盟生涯致敬,三十行Python代码爬取LOL官网英雄皮肤图片
- 详解ProToolkit注册文件
- c#精彩编程200例百度云_每天宅家创客5分钟|智龙6号星球车:01唤醒星球车——温州中小学趣味信息技术云课程...
- js 判断移动终端浏览器版本信息
- 000webhost – 1500M支持PHP可绑米免费虚拟主机
- c语言智能手环程序,iCareTech C+医学智能手环设计流程
- Linux系统异常夯死或宕机分析
- spin_lock_bh()与spin_unlock_bh()
- eWebEditor 编辑器功能不能使用
- NR 物理资源(pointA,PRB,CRB之间关系)
- 计算机网络技术(一)——概论
- 铁电存储器这样应对充电桩存储痛点
- AXI 基础第 5 讲-创建 AXI4-Lite Sniffer IP 以在赛灵思Vivado IP Integrator中使用