开发教程

【插件编写】Bukkit如何判断GUI?

饭***版主 发表于 2022-4-14 · 最后回复 2022-4-30 IP:广东省 3,284 6
本帖最后由 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,确实是这个问题的解决方案之一

  • 星河*** 铁粒 +10 苦力怕论坛感谢有你~(原创)
回复 6 最早 最新 只看楼主
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则