Minecraft(我的世界)中文论坛

标题: [Bukit|Spigot][PCD]细谈ActionBar与Title的使用 | NMS与反射

作者: 白羊羊    时间: 2018-2-10 19:11
标题: [Bukit|Spigot][PCD]细谈ActionBar与Title的使用 | NMS与反射
本帖最后由 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的反射使用+向上反射兼容:


[groupid=1330]PluginsCDTribe[/groupid]
作者: beizi6666    时间: 2018-2-12 22:12
ddddddddddd
作者:  咕     时间: 2018-2-14 09:12
园神凛祢 发表于 2018-2-14 08:36
介绍比较全面
(不过这个比较简单,因为95%的开发者都会)
对小白有比较实质性的帮助

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

另外如果不想分别实现可以用asm动态生成实现类
作者: 白羊羊    时间: 2018-2-14 11:23
园神凛祢 发表于 2018-2-14 10:58
有道理,但是那样会有点麻烦吧
每个版本都要撸一个接口出来。。

其实国外很多插件都是这样的,之前有看到过很多类似插件都使用了这种
作者:  咕     时间: 2018-2-14 12:56
园神凛祢 发表于 2018-2-14 10:58
有道理,但是那样会有点麻烦吧
每个版本都要撸一个接口出来。。

反射的性能,就算写了缓存,消耗也有点大
连nodejs的运行速度都比不上
作者: 鸭蛋只吃黄    时间: 2018-2-19 09:04
我记得去年我写过一篇差不多的, 不过我直接放上了反射过程的源码以及api, 某dalao(耗*)批评道"我看看是谁这么愿意弄别人早就做过的事情"
当然, 没有楼主这篇详细, 感谢楼主分享, 看了以后我感觉...昧着良心说学到了好多东西....
作者: liuyipeng001    时间: 2018-2-19 10:43
印象中ASM和直接访问差不多,反射就。。。。。。
作者: 艾了个拉    时间: 2018-2-19 17:45
牛逼,顶
作者: LiquidBounce___    时间: 2018-2-20 10:03
表示没看懂。。。。。。。。。。。。。。。。
作者: 樱之恋    时间: 2018-2-20 12:14
感谢分享,MCBBS有你更精彩~
作者: sulinly    时间: 2019-8-2 01:47
正在找呢 谢谢
作者: iPad水晶    时间: 2019-9-8 17:11
支持楼主啦啦啦