当前位置:首页 > CN2资讯 > 正文内容

java 我的世界插件smali转jar 我的世界用java自己写插件

1天前CN2资讯



事件监听器

  • 内容简介
  • 事件监听器


内容简介

事件监听器



文档中org.bukkit.event都是事件包







https:///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 { @EventHandler public void PlayerOpenGui(VexGuiOpenEvent event) { List<VexComponents> components = event.getGui().getComponents(); for (VexComponents vex : components) { main.plugin.getLogger().info(vex.getType()); } } //监听图鉴界面上的按钮点击操作跳转 @EventHandler public 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) { //装备 特效1 Jiangli_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) { //装备 特效2 Jiangli_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) { //装备 称号1 DataManager.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) { //取消装备 称号1 DataManager.SetTitleState(player.getUniqueId().toString(), 0); PlayerTags.cencelRun(player); player.sendMessage("§a称号显示: 已关闭"); }else if (buttonID == 14) { //装备 称号2 DataManager.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) { //取消装备 称号2 DataManager.SetTitleState(player.getUniqueId().toString(), 0); PlayerTags.cencelRun(player); player.sendMessage("§a称号显示: 已关闭"); }else if (buttonID == 16) { //装备 称号3 DataManager.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) { //取消装备 称号3 DataManager.SetTitleState(player.getUniqueId().toString(), 0); PlayerTags.cencelRun(player); player.sendMessage("§a称号显示: 已关闭"); }else if (buttonID == 18) { //装备 称号4 DataManager.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) { //取消装备 称号4 DataManager.SetTitleState(player.getUniqueId().toString(), 0); PlayerTags.cencelRun(player); player.sendMessage("§a称号显示: 已关闭"); }else if (buttonID == 20) { //装备 称号5 DataManager.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) { //取消装备 称号5 DataManager.SetTitleState(player.getUniqueId().toString(), 0); PlayerTags.cencelRun(player); player.sendMessage("§a称号显示: 已关闭"); }else if (buttonID == 22) { //装备 称号6 DataManager.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) { //取消装备 称号6 DataManager.SetTitleState(player.getUniqueId().toString(), 0); PlayerTags.cencelRun(player); player.sendMessage("§a称号显示: 已关闭"); } } // 监听玩家进入游戏后显示操作提示 @EventHandler public 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()方法以实现界面跳转或其他功能。



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/31711.html

    分享给朋友:

    “java 我的世界插件smali转jar 我的世界用java自己写插件” 的相关文章

    RackNerd IP 2024:优化你的VPS选择与网络性能

    RackNerd IP 2024概述 提到RackNerd,很多人可能已经对这家知名的VPS提供商有所耳闻。随着2024年的到来,RackNerd不仅继续以其性价比高、速度快和稳定性良好的服务受到用户的青睐,同时还有了一些新的改进和特色,让我感到很兴奋。这家公司在美国设有多个数据中心,为广大的用户提...

    CN2 VPS:选择优质虚拟专用服务器的最佳指南

    CN2 VPS概述 在如今的网络环境中,CN2 VPS(虚拟专用服务器)吸引了不少关注。简单来说,它是一种基于中国电信CN2线路的云服务器。CN2线路是中国电信提供的优质网络线路,拥有低延迟、高速度及良好的稳定性。对于那些希望搭建网站、进行外贸交易、跨境办公或者需要远程协作的人来说,CN2 VPS是...

    续费同价服务器:云服务的透明定价策略与用户优势

    续费同价服务器是什么呢?说白了,就是云服务提供商在定价上采取的一种政策。无论是新用户第一次购买,还是老用户续费,价格都是一样的。这种做法让很多用户感到安心,不用担心下次续费时价格会大幅上涨。这一策略在云服务行业越来越受到重视,也给用户带来了不少好处。 首先,续费同价服务器让价格变得透明。我之前在选择...

    搬瓦工Plan v2:高性价比VPS套餐详解与用户指南

    搬瓦工Plan v2作为一个限量版VPS套餐,给很多用户带来了新的选择。与之前的The Plan套餐相比,Plan v2在配置与流量方面都实现了显著的提升。这款套餐不仅是一种实用的解决方案,也为不同需求的用户提供了灵活的选择。接下来,我将分享一些关于这个套餐的背景信息、主要升级点以及它适合哪些用户。...

    如何选择适合你的匿名服务器以保护隐私和数据安全

    在当今互联网时代,保护个人隐私和数据安全变得尤为重要。匿名服务器的概念应运而生,成为许多人实现在线安全和隐私的一种方式。简单来说,匿名服务器是一种特殊的服务器,能够隐藏用户的真实IP地址,从而在用户上网时保护其身份和活动。这对于那些希望自由浏览网络、避免被追踪的用户尤其重要。 匿名服务器通常与虚拟私...

    甲骨文云账号如何注销:详尽步骤与注意事项

    甲骨文云账号注销流程 注销甲骨文云账号的流程其实并不复杂,但有几个关键步骤需要认真对待。整个过程主要分为几个部分,包括登录甲骨文云控制台、发起注销请求、查看注销请求状态,以及最后的等待和确认删除。 1.1 甲骨文云控制台的登录 进入甲骨文云控制台的第一步,就是要登录到你的账号。打开浏览器,访问甲骨文...