前几天在研究矿车运动时发现了这样一个Bug:矿车的Motion(用于决定速度)在矿车堆叠时会发生指数爆炸似的增长,最终会很快达到无穷大。经过研究,发现这一Bug似乎是由矿车间的相互推动造成的,因为在矿车运算过程中会将Motion限制在+-0.04之间,此后到Motion被获取应该就只有推动会影响Motion了。
这样,MC-14(堆叠的矿车在脱轨后继续匀速行进)这一远古Bug似乎就有了一个比较合理的解释:在矿车Motion为无穷大时,除非它撞到墙上,它的Motion不会被任何阻力和出无穷大以外的任何反向加速减少,而它对速度又有一个限制,无论Motion再大单轴速度都超不过8m/s,所以他的速度就不再变化,从而出现那种匀速直线运动。
为什么说这个Bug危险呢?研究过浮点数的都知道,无穷大并不是一个合法的数字,它在进行一些运算后(尽管目前还没有发现可以实现这些运算的方案)可能变成NaN(Not a Number,不是数字),最终会被写入到存档中。但是,在存档被再次加载时,如果遇到了值为NaN的Motion服务器(包括专门服务端和客户端内置的服务端)会拒绝读取它并立即崩溃,造成存档损坏,不过参考崩溃报告很好修复。即使没有产生NaN,这样的非法值也可能因为某些运算造成卡死服务器、崩溃等难以预料的后果。
刚才已经报告给Bugjump了,MC-233322(知道这样再晚11个提交多好)。
这样,MC-14(堆叠的矿车在脱轨后继续匀速行进)这一远古Bug似乎就有了一个比较合理的解释:在矿车Motion为无穷大时,除非它撞到墙上,它的Motion不会被任何阻力和出无穷大以外的任何反向加速减少,而它对速度又有一个限制,无论Motion再大单轴速度都超不过8m/s,所以他的速度就不再变化,从而出现那种匀速直线运动。
为什么说这个Bug危险呢?研究过浮点数的都知道,无穷大并不是一个合法的数字,它在进行一些运算后(尽管目前还没有发现可以实现这些运算的方案)可能变成NaN(Not a Number,不是数字),最终会被写入到存档中。但是,在存档被再次加载时,如果遇到了值为NaN的Motion服务器(包括专门服务端和客户端内置的服务端)会拒绝读取它并立即崩溃,造成存档损坏,不过参考崩溃报告很好修复。即使没有产生NaN,这样的非法值也可能因为某些运算造成卡死服务器、崩溃等难以预料的后果。
刚才已经报告给Bugjump了,MC-233322(知道这样再晚11个提交多好)。
这就离谱

确实不错,支持,下次有空去试试。
本帖最后由 Winner32 于 2021-7-29 18:31 编辑
wow,是源代码翻出来的?
1.14的矿车代码不知道跑哪去了
wow,是源代码翻出来的?
1.14的矿车代码不知道跑哪去了
所以是新的旧崩服方法?
为什么会有无穷大)
看完之后除了知道矿车在某些情况下会卡服意外什么都没有看懂
用这个原理差不多可以写个存档修复插件

emmm,好复杂的样子
这叫特性!mc没有bug
这就离谱,这个你是怎么看出来的。。
可以可以,我也去试试
下次我也去试试
有趣学到了
好家伙,又学到一个可以崩服的小技巧