Nova-Committee / McBot

A mod allowed you to connect minecraft and QQ
Other
131 stars 17 forks source link

fabric-1.18.1-1.5.2 tps计算不准的问题 #52

Closed fnsflm closed 1 year ago

fnsflm commented 1 year ago

(不好意思,不小心点错了,不是很熟issue) 首先fabric-1.18分支是无法直接运行的, 缺少BotConfig.java, ConfigManger,JSONFormat等文件, 我复制fabric-1.17的相关文件才编译运行代码. 在common.command.Invoke.java中可以看到这段代码

if ("tps".equals(commandBody)) {
            double overTickTime = BotApi.SERVER.getNextTickTime() * 1.0E-6D;
            double overTPS = Math.min(1000.0 / overTickTime, 20);
//            double netherTickTime = mean(BotApi.SERVER.getTickTime(Level.NETHER)) * 1.0E-6D;
//            double netherTPS = Math.min(1000.0 / netherTickTime, 20);
//            double endTickTime = mean(BotApi.SERVER.getTickTime(Level.END)) * 1.0E-6D;
//            double endTPS = Math.min(1000.0 / endTickTime, 20);

            String outPut = String.format("主世界TPS: %.2f\n", overTPS)

运行之后显示的tps值为0.35和服务器内tps20相差甚远,有理由怀疑调用的getNextTickTime是有问题的. 关于模组开发我还是个小白,懂得不多,可以请问下能不能提供下相关文档解释下getNextTickTime的含义,我找了好久没找到. 或者是否能提供fabric-1.18.1-1.5.6的源代码, 这个版本的tps计算的是正确的

cnlimiter commented 1 year ago

建议使用最新版本

fnsflm commented 1 year ago

建议使用最新版本

可以问下最新版本的源码(最新的看curseforge应该是1.8.2)或者能保证能运行的源码有吗?

fnsflm commented 1 year ago

我使用了fabric-1.18.2分支的d5a13fba7f34605cc8749c7e319afd5f95727af3commit解决了上述问题. 作者在之后的版本对代码做了大面积的重构, list命令通过自定义文件的形式设置, 不再对tps进行单独计算了, 原版fabric不能计算tps的命令. 如果要适配1.18.1需要修改fabric.mod.json文件 此外, 计算mspt时在.../botapi/init/mixins/LevelTickMixin.javaaverageMspt()不知道为什么加了个大于等于5的判定, 去掉后显示正常. 最后, 十分感谢作者在QQ上的答疑解惑!