末影龙崩服原理详解源码分析 #1 清祭坛法【1.9 - 1.14.4】-一次就好漫画
注:关于节点放置法的分析专栏要等段时间再出,因为涉及到龙的寻路需要实时debug亿会,等我有时间先把主世界冻龙术的教程视频出了再说罢(笑)。专栏里涉及到的代码由MCP-Reborn及fabric-yarn生成。
注1:该崩服法严格来讲应该叫"冻服法",服务器只不过是卡住了。
注2:该崩服法已在19w36a(1.15的一个快照)版本中修复。链接:https://bugs.mojang.com/browse/MC-158677
一、起因起因是我在B站上搜索看有没有人发现了其他的末影龙崩服法,接着看到了这个视频:
生电服务器迫害可怜的末影龙,竟只为确定黑曜石柱位置! 终遭崩服之"报应"[doge]
1.14.4?起初我以为是龙卡在了起飞态且麻将暗改过龙的寻路(例如说1.9-1.10就无法使用节点法崩服)
于是我跑了个本地1.14.4服务器,将主岛清光后在祭坛不远处放了个生存模式下的假人。
Bot:又迫害我?崩服重现成功二、翻代码我换用MCP-Reborn跑1.14.4的服务端来重新崩服,得到的崩溃报告如下:
反混淆后崩服起因简介明了FlamingSittingPhase是啥?当然是龙在祭坛吐龙息时调用到的类。
让我们直奔FlamingSittingPhase.serverTick方法:
//lmao乍一看这一块代码是不是没毛病?无非就是在龙该吐龙息时,通过某些计算算出药水云该吐在哪个坐标。
要不咱打几个breakpoints实时debug下?
y=-220641790三、结论游戏先会通过计算算出龙头前面某处方块的xyz坐标(通常是x=aaa, y=67, z=bbb)
随后,游戏会开始往下找最高的非空气方块生成龙息
由于该xz坐标上的方块全是空气,游戏就会卡在这一直循环找方块,导致服务器整个卡住
结果watchdog发现1tick花了60s强行关闭服务器
英文带语病版解释四、其他的话我并不是第一个翻代码找清祭坛法崩服原因的人,第一个翻代码的人似乎是智乃,并且也是他汇报给了麻将
的确是本人我此刻的表情不亚于机器被人抢先发概念早被人确定轮子已经被造过发现的零日漏洞被修刚建完初代更新跳略器就有压缩版守望2的堡垒被移除
谈到守望2的堡垒,它的无限炮弹bug和这个清祭坛法崩服也有点类似,都没有加变量限制,如图:
卡-1?轻轻松松!更详细的解释可见Marblr的视频:【中字】为什么堡垒会发生无限火炮的大招
如专栏开头的注释,清祭坛法崩服bug已在1.15的快照19w36a中修复,现在关于循环找最高方块放龙息的代码部分如下:
g指的是计算得出的龙身体高度(也是h原值)这篇专栏很水(因为原理的确很简单,我不想像某些人拿到源码就把事情讲得太复杂),各位看个乐呵就好(doge)
1.9-1.14.4环境下可以崩服,也许你们可以试着用这个方法崩2b2t? idk