白羊羊
本帖最后由 mimimis 于 2018-2-10 19:23 编辑

细谈ActionBar与Title的使用
—— Bukkit | Spigot ——
在1.8之后,似乎使用ActionBar和Title显示信息的插件越来越多了,因为ActionBar位于物品名称显示区域的上方,而Title位于屏幕中央并靠下,相比传统的聊天框显示,显得更为简洁、新颖。那么,作为开发者,如何使用这些功能呢?在Bukkit1.9版本之后,Player类新增了一个sendTitle(Stirng title, String subtitle)方法,到了1.11版本,这个方法变得更高级了sendTitle(String title ,String subtitle ,int fadein ,int stay ,int fadeout),你可以直接传入全部构造Title的参数来为玩家发送Title。不过,Title在1.8同样可以使用,但是Bukkit没有为我们封装方法,怎么办呢?
方案一、借助API插件
基础教程:

使用ProtocolLib发送数据包:

方案二、直接使用nms
基础教程:

实现多版本教程:

ActionBar的发送

方案三、反射
ActionBar反射使用+向上版本兼容:

Title的反射使用+向上反射兼容:


来自群组: PluginsCDTribe

beizi6666
ddddddddddd

 咕 
园神凛祢 发表于 2018-2-14 08:36
介绍比较全面
(不过这个比较简单,因为95%的开发者都会)
对小白有比较实质性的帮助

多版本的nms使用反射最大的问题是运行速度慢
抽象为接口并在每个版本实现是追求高性能的多版本实现
参见citizens

另外如果不想分别实现可以用asm动态生成实现类

白羊羊
园神凛祢 发表于 2018-2-14 10:58
有道理,但是那样会有点麻烦吧
每个版本都要撸一个接口出来。。

其实国外很多插件都是这样的,之前有看到过很多类似插件都使用了这种

 咕 
园神凛祢 发表于 2018-2-14 10:58
有道理,但是那样会有点麻烦吧
每个版本都要撸一个接口出来。。

反射的性能,就算写了缓存,消耗也有点大
连nodejs的运行速度都比不上

Dante_7
我记得去年我写过一篇差不多的, 不过我直接放上了反射过程的源码以及api, 某dalao(耗*)批评道"我看看是谁这么愿意弄别人早就做过的事情"
当然, 没有楼主这篇详细, 感谢楼主分享, 看了以后我感觉...昧着良心说学到了好多东西....

liuyipeng001
印象中ASM和直接访问差不多,反射就。。。。。。

艾了个拉
牛逼,顶

LiquidBounce___
表示没看懂。。。。。。。。。。。。。。。。

樱之恋
感谢分享,MCBBS有你更精彩~

sulinly
正在找呢 谢谢

iPad水晶
支持楼主啦啦啦

日暮清林
白羊,你图挂了

第一页 上一页 下一页 最后一页