cioyenn
paper自带gettps,但是spigot没有gettps,问问大佬如何计算tps值,要哪些因素

RE_OVO
反射MinecraftServer类的recentTps数组即可

直接访问:
CraftServer cs = (CraftServer)Bukkit.getServer();
double[] recentTPS = cs.getHandle().getServer().recentTps;

cioyenn
RE_OVO 发表于 2020-10-1 21:57
反射MinecraftServer类的recentTps数组即可

直接访问:

1.16.2spigot没有

William_Shi

你的意思是1.16.2的MineCraftServer类没有这个数组了?还是你没找到?

天辉胡萝卜

net.minecraft.server.v1_16_R2.MinecraftServer.getServer().recentTps;

cioyenn
疾风暗影 发表于 2020-10-2 05:11
net.minecraft.server.v1_16_R2.MinecraftServer.getServer().recentTps;

没有minecraft.server

天辉胡萝卜
cioyenn 发表于 2020-10-3 13:21
没有minecraft.server

你需要引入buildtools构建出的jar而不是仅仅导入Spigot-API
Spigot-API不包含nms相关的内容所以找不到

William_Shi
cioyenn 发表于 2020-10-3 13:21
没有minecraft.server

这一部分是对于MineCraft源码的反混淆内容
本质上是侵权Mojang的
所以Spigot不可能正大光明地把它放在repo里
两种方式:1.Spigot把他加入mavenlocal,2.codemcrepo光明正大的把这部分代码放在仓库里面

Sssss...
如果上面的方法都不会,给你一个比较简单(但可能不太准确)的方法:
监听ServerTickStartEvent事件(每个tick开始的时候都会触发)然后计数
最后用触发次数除以监听的总时长(秒)得到近似tps

cioyenn
本帖最后由 cioyenn 于 2020-10-2 18:36 编辑
William_Shi 发表于 2020-10-2 17:48
这一部分是对于MineCraft源码的反混淆内容
本质上是侵权Mojang的
所以Spigot不可能正大光明地把它放在rep ...

这个报错是什么意思,大佬。26行代码是double[] tps = net.minecraft.server.v1_16_R2.MinecraftServer.getServer().recentTps;

洞穴夜莺
本帖最后由 洞穴夜莺 于 2020-10-3 14:46 编辑
cioyenn 发表于 2020-10-3 14:35
这个报错是什么意思,大佬。26行代码是double[] tps = net.minecraft.server.v1_16_R2.MinecraftServer.get ...

你的服务器是1_16_R1
你却在调用1_16_R2的类
请确认你开发环境导入的jar是开服使用的jar
然后改成
  1. net.minecraft.server.v1_16_R1.MinecraftServer.getServer().recentTps;
复制代码



William_Shi
cioyenn 发表于 2020-10-3 14:35
这个报错是什么意思,大佬。26行代码是double[] tps = net.minecraft.server.v1_16_R2.MinecraftServer.get ...

使用NMS、OBC的常见问题
版本兼容性差
甚至是同一个大版本比如说1.16
可能1.16写的插件和1.16.2都不能互相兼容
(如1_16_R0 1_16_R1)

在这里(TPS获取问题)
建议使用反射

mzmzmz
引入整个Bukkit核心