开发教程 【插件编写】Bukkit如何判断GUI? 饭***版主 发表于 2022-4-14 · 最后回复 2022-4-30 IP:广东省 3,284 6 2022-4-14 23:08:15 本帖最后由 fantuan_233 于 2022-4-14 23:08 编辑 是这样的,今天一个朋友找我诉苦,说他的插件被一个服主应用了,但是应用之后却经常发生bug,他亲自查找,发现是因为服主的两个GUI的标题一样,而自己的插件是按照GUI的标题进行监听的,从而导致了错误。 但是另一个插件却没有出现这样的错误,他就跑来问我这是为什么。 今天,我来浅谈一下一个解决方法。 一,Inventory: 在Bukkit里面,每一个所谓GUI都是Inventory接口的一个实现。 因为接口不存在“构造器”所以创建一个新的gui的方法变成了org.bukkit.Bukkit.createInventory()这个方法(暂不列出参数) 在此,我们可以看出,创建一个gui有四个可选的重载方法,而其中都包括了一个参数:传入一个实现了InventoryHolder接口的对象 那么问题来了,我们可以自己实现一个InventoryHolder吗?这样不就能判别GUI了吗? 那么,可行吗? 二,InventoryHolder: 通过查阅代码,不难得出InventoryHolder是一个接口(interface)(这玩意比抽象类还抽象,连成员属性都没了) 如图: 可以很直观地看出,只有一个方法需要实现,难度不大,有可能实现。 三,动手: 创建一个类,在这里暂且名为MyHolder,并且实现InventoryHolder接口: 在这个时候,报错了,提示我们需要实现getInventory方法: 接受建议,但是注意了,这里的方法注解存在@NotNull,所以最好不要按照他的建议返回null 所以在此,我们可以创建一个inv,来给他传入,以此来不返回null。 接下来,我们在主类注册一个监听器,做个实验: 嗯很好,没有编译错误,接下来构建,放进服务端: 运行了。 由此可见,自己实现一个InventoryHolder,确实是这个问题的解决方案之一 评分 1 人参与铁粒 +10 查看全部评分 收起 星河*** 铁粒 +10 苦力怕论坛感谢有你~(原创) 提升卡 观察者
饭*** 版主· 当前离线 饭*** 楼主版主 2022-4-14 23:46:25 IP:广东省 评论复审中... 编号:1827541 来自 4# 2022-4-14 23:46:25 回复(0) 收起回复 我要说一句 评分 1 人参与铁粒 +1 查看全部评分 收起 *** 铁粒 +1 也退了( 支持 反对 回复 复制本楼链接 使用道具 观察者
不是*** Lv.3 中级会员· 当前离线 不是*** Lv.3 中级会员 2022-4-14 23:15:37 · 来自手机 IP:山东省 评论复审中... 编号:1827395 2# 2022-4-14 23:15:37 回复(0) 收起回复 我要说一句 支持 反对 回复 复制本楼链接 使用道具 观察者
穆雪*** Lv.5 金牌会员· 当前离线 穆雪*** Lv.5 金牌会员 2022-4-14 23:20:58 · 来自手机 IP:广东省 评论复审中... 编号:1827419 3# 2022-4-14 23:20:58 回复(0) 收起回复 我要说一句 支持 反对 回复 复制本楼链接 使用道具 观察者
xiaob*** 版主· 当前离线 xiaob*** 版主 2022-4-15 13:40:33 IP:山西省 评论复审中... 编号:1830731 5# 2022-4-15 13:40:33 回复(0) 收起回复 我要说一句 支持 反对 回复 复制本楼链接 使用道具 观察者
饭*** 版主· 当前离线 饭*** 楼主版主 2022-4-15 17:26:20 IP:广东省 评论复审中... 编号:1832616 6# 2022-4-15 17:26:20 回复(0) 收起回复 我要说一句 支持 反对 回复 复制本楼链接 使用道具 观察者
-苏晴*** 版主· 当前离线 -苏晴*** 版主 2022-4-15 22:20:55 · 来自手机 IP:黑龙江省 评论复审中... 编号:1836183 7# 2022-4-15 22:20:55 回复(0) 收起回复 我要说一句 支持 反对 回复 复制本楼链接 使用道具 观察者