【插件编写】Bukkit如何判断GUI?
本帖最后由 fantuan_233 于 2022-4-14 23:08 编辑是这样的,今天一个朋友找我诉苦,说他的插件被一个服主应用了,但是应用之后却经常发生bug,他亲自查找,发现是因为服主的两个GUI的标题一样,而自己的插件是按照GUI的标题进行监听的,从而导致了错误。
但是另一个插件却没有出现这样的错误,他就跑来问我这是为什么。
今天,我来浅谈一下一个解决方法。
一,Inventory:
在Bukkit里面,每一个所谓GUI都是Inventory接口的一个实现。
因为接口不存在“构造器”所以创建一个新的gui的方法变成了org.bukkit.Bukkit.createInventory()这个方法(暂不列出参数)
https://s2.loli.net/2022/04/14/S1YrtwqjfLp5l8J.png
在此,我们可以看出,创建一个gui有四个可选的重载方法,而其中都包括了一个参数:传入一个实现了InventoryHolder接口的对象
那么问题来了,我们可以自己实现一个InventoryHolder吗?这样不就能判别GUI了吗?
那么,可行吗?
二,InventoryHolder:
通过查阅代码,不难得出InventoryHolder是一个接口(interface)(这玩意比抽象类还抽象,连成员属性都没了[贴吧_滑稽])
如图:https://s2.loli.net/2022/04/14/EaBJAROMkzCXrKq.png
可以很直观地看出,只有一个方法需要实现,难度不大,有可能实现。
三,动手:
https://s2.loli.net/2022/04/14/rDXYgAnZH5K2OE4.png
创建一个类,在这里暂且名为MyHolder,并且实现InventoryHolder接口:
https://s2.loli.net/2022/04/14/sR2wIHSNvrkmzlg.png
在这个时候,报错了,提示我们需要实现getInventory方法:
接受建议,但是注意了,这里的方法注解存在@NotNull,所以最好不要按照他的建议返回null
所以在此,我们可以创建一个inv,来给他传入,以此来不返回null。
https://s2.loli.net/2022/04/14/Rhnqbt3gQ6XBW9k.png
接下来,我们在主类注册一个监听器,做个实验:
https://s2.loli.net/2022/04/14/XGyp8cYLrjn39QF.png
嗯很好,没有编译错误,接下来构建,放进服务端:
https://s2.loli.net/2022/04/14/yKNi97QptbOAazT.png
运行了。
由此可见,自己实现一个InventoryHolder,确实是这个问题的解决方案之一
中考退坛前最后一篇了,再at一下我的朋友吧:
@Paddy @-苏晴晴在此- @baili001 @Dreeam @NetheriteX1 @punchmi @Spring_Maple @xiaobaobao @克里昂一世 @小天吖~ @缔造者
@色御泥坊 @水稻本尊 @酒保的起点 @M397749490 @满船清梦丶
本帖最后由 DHF_Believer 于 2022-4-14 23:17 编辑
我看不懂,但我大受震撼=-= 我看不懂啊[哔哩_笑哭]= ̄ω ̄=!!! 写的不错,但是有些难懂,虽然我看了一遍大概懂了,但是对于某些新人,建议文字叙述再多些在细节些 xiaobaobao 发表于 2022-4-15 13:40
写的不错,但是有些难懂,虽然我看了一遍大概懂了,但是对于某些新人,建议文字叙述再多些在细节些 ...
讲个笑话,有基础的用不到,没基础的看不懂[哔哩_doge]
(我觉得有点Java基础的都懂了,没有的大概也可以照猫画虎实现一个)
fantuan_233 发表于 2022-4-14 23:46
中考退坛前最后一篇了,再at一下我的朋友吧:
@Paddy @-苏晴晴在此- @baili001 @Dreeam @NetheriteX1 @punc ...
再见,祝你中考顺利![哔哩_脱单]
页: [1]