发掘Minecraft中的有价值bug——Mojang漏洞追踪器使用指南
Jellie_
编辑于 2021年08月01日 19:09

Mojang漏洞追踪器(亦称 Mojira)是一个面向玩家的Minecraft官方漏洞反馈网站。与反馈站点类似,其主要由社区玩家来管理。漏洞追踪器的网址为bugs.mojang.com ——Minecraft wiki

Minecraft 一向以 bug 众多而闻名,因此,Mojang 使用 Jira 来管理数不胜数的漏洞,同时给玩家提供了一个报告游戏bug和漏洞的平台。

也是因此,Mojira 上汇集了形形色色的 bug,其中许多 bug 并不具有价值——那么,如何从浩如烟海的 bug 报告中找到我们关心的 bug 呢?

cut-off

相信大家都是从 av 号时代走过来的吧(笑)?B站曾经使用 av 号来管理投稿视频,从第一个视频 av1 开始,按照投稿顺序依次排列。

类似的,Mojira 也按照报告时间对 bug 报告进行编号管理,对于 Java 版来说,第一个报告的 bug 是 MC-1。秉承B站优良的考古传统,大家可以打开这个链接查看:https://bugs.mojang.com/browse/MC-1

Mojira中Java版Minecraft最古老的bug——MC-1

这就是一个典型的 bug 报告界面了。如果你没有选择语言的话,可能会看到一个满是英文的界面。你可以通过注册一个 Jira 账号来选择语言。

我们来看一看其中有用的信息:

cut-off

标题

标题会简明扼要地描述bug现象。

MC-1的标题,当僵尸尝试破门时被打断,破坏门的裂纹会一直保持

cut-off

详情

MC-1的详情部分

类型:故障,说明这个漏洞追踪器里追踪的是一个故障(bug)。暂时还没有看到其它的类型。

影响版本:这里详细记载了哪些版本的 Minecraft 受到这个 bug 的影响。这一项大概是手动添加的,所以有时会漏掉几个版本。某些远古bug会有超多的影响版本,比如 https://bugs.mojang.com/browse/MC-1

MC-14,影响版本囊括从远古的1.4.1到最近的1.16rc1

标签:给 bug 报告的简单分类,比如 sound(声音),redstone(红石),等等。

环境:bug 报告者运行 Minecraft 的环境,通常不用关心。

Confirmation Status(确认状态):并不是所有 bug 报告都是真实的 bug,有些 bug 报告无法复现,有些 bug 报告别人已经提交过了,有些 bug 报告刚刚才提交,开发人员还没来得及确认。这些 bug 报告的 Confirmation Status 都是 Unconfirmed(未确认)。(不太明白为啥MC-1 这个 bug 还在未确认状态,或许 MC-1 修复好后 Mojira 才有 Confirmation Status 的功能?)对于确实是 Minecraft 中的游戏 bug,或者报告的 bug 是游戏刻意为之的特性,这里会显示Confirmed(已确认)。

状态:这里会显示这个漏洞目前的状态。一个漏洞有这些状态:开放(Open),关闭(Closed),重新打开(Reopen),已解决(Resolved)。一个漏洞刚刚提交时会处于“开放”状态;被解决、认定为重复提交,或者无效的提交会被“关闭”或者“已解决”;不同意开发者的处置方式,或者一个已经修复的bug又复发了,则会处于“重新打开”状态。

解决结果:显示开发者怎么解决这个 bug 的。通常解决结果有:按照预期运行(Works as intended,也就是常说的WAI),已修复(Fixed),重复提交(Duplicate),无效(Invalid),不会修复(won't fix)。

修复的版本:如果 bug 被修复了,这里会显示是在哪个版本修复的。

cut-off

描述和附件

这一部分是重头戏,描述了这个bug的现象,以及复现方法。

MC-1的描述和附件

可以看到报告者提供了这些描述:僵尸破门时,门上“破坏”的裂纹会一直保持下来,哪怕门被打掉了。提交者希望门的裂纹在僵尸停止破门后消失(就像玩家撸方块撸到一半停下来时裂纹会消失一样),同时也提供了复现方法:让僵尸破门,杀掉僵尸,打掉门,破坏的裂纹还留在空气中,看起来非常不正常。

附件是一张截图,截下了这有趣的一幕。

cut-off

问题链接

MC-1的问题链接

其实我认为这里翻译成“相关问题链接”更合适一些……

可以看到 MC-1 被https://bugs.mojang.com/browse/MC-185597复制了,打开 MC-185597 一看,原来这个远古 bug 在 1.15.2 又复活了,bugjang 果然名不虚传。顺便同情一下那些可怜的程序猿,维护这样一座远古屎山,要不出 bug 的同时还要新功能,真是太难了。

同时还能看到这个 bug 被重复提交了很多次,MC-7584,MC-9796,等等,都是在重复提交同一个 bug。为了减轻管理漏洞的压力,这些重复提交的漏洞都会被标记到 MC-1 来统一管理。

这一部分的链接在我们查找漏洞时非常有用,通过这部分链接在相关问题间跳转,可以快速找到我们需要的页面。

cut-off

活动日志

MC-1的活动日志。可以看到Jeb

活动日志部分记录了这个 bug 的历程,包括状态的更变,相关链接的增加,以及玩家、开发者的评论。刚刚提交时的问题描述和标题可能并不准确,因此可能会被修改,这里会留下修改的历史。

注意这里是很严肃的讨论 bug 及其修复方法的地方,不是类似知乎、微博等带有娱乐性质的评论区,不要在这里发送与解决问题无关的评论。珍惜自己发言的权利,尊重社区规则。

cut-off

人员与日期

MC-1的人员与日期

从日期可以看出,MC-1 是在 2012 年 10 月 23 日提交的,是比不上B站的 av2 ​的(笑)。

表决:如果你有 Jira 账号,可以在这里给你认为需要修复的 bug 投票(翻译成“表决”真是让人摸不着头脑)

点击“开始关注这个问题”,你就会在这个问题发生变动时收到 Jira 发给你的邮件,帮助你实时了解 bug 的最新动态。

Jira的更新邮件

cut-off

实战 Mojira

下面我们来实战一下吧!

首先,我们需要发现 Minecraft 中的一个游戏bug。作为一个以“特性”著称的游戏,找一个还不是轻而易举,比如我在玩 1.13.2 时,就发现我的附魔三叉戟有点 bug:

1.13.2,附魔之后

众所周知,附魔后的物品,表面会出现附魔光泽,而三叉戟附魔后,却还是原样,并没有出现附魔的光泽。我们来 Mojira 上看看有没有人已经提交了 bug 了。我们打开 Mojira 主页:

https://bugs.mojang.com

Mojira主页

看起来这是个登录界面,不过我们完全不用登录,点击右上角的“Search”就能开始搜索了。

几乎所有的漏洞都是用英文提交的,因此我们需要用英文搜索。

现在,我们需要提取问题的关键词:“三叉戟在附魔后没有出现附魔光泽”,提取出这些关键词:“三叉戟”、“附魔”、“附魔光泽”。三叉戟的英文很简单,“trident”;附魔,则是“enchant”。然而“附魔光泽”怎么翻译啊?没关系,我们先用前两个关键词试一试:

看起来没有哪个标题跟附魔光泽有关啊……初战不利,但我们不要放弃,这里只是把最可能的几个 bug 报告列了出来,点一下下面的 View all matching issues,查看所有匹配的bug报告。

查看所有匹配的问题

随后我们会看到一列长长的列表

其中我们需要注意的是,圈起来的 MCPE-66823 是 PE 版的漏洞报告,作为 Java 版的玩家我们只需要关心 Java 版 MC 的漏洞,因此我们忽略掉 MCPE 开头的漏洞,专心看 MC 开头的漏洞。

随后我们就会发现几个非常切题的漏洞,“Glowing effect”,闪烁效果,“enchantment overlay”,附魔饰面,我们点进https://bugs.mojang.com/browse/MC-134475看看:

附魔三叉戟没有闪烁光泽

我们会发现这是一个重复提交的 bug,因此我们应该找到原始提交的页面,这里我们看问题链接,会发现这是 https://bugs.mojang.com/browse/MC-125360 的重复提交。我们打开 MC-125360,就可以看到它的修复进展:

MC-125360

可以看到,这样一个明显影响普通玩家视觉效果的 bug,Mojang 在 19w39a​(1.15的一个快照版)才修复,也真是够慢的了。

打开 1.15.2,会发现现在附魔的三叉戟终于能正常展现出它的附魔光泽了:

1.15.2,闪烁着附魔光泽的三叉戟

更复杂的挑战

许多bug也许并不容易描述,因而难以搜索。比如我们来看看Fallen_Breath发现的这个bug​

Fallen_Breath发现的迷惑bug

这怎么描述呢?也许用“中继器”、“故障”、“区块卸载”作为关键词来搜索?我们来试一试:

使用repeater glitch chunk load作为关键词搜索

看起来并没有想要的结果……

当然,这个bug确实非常有迷惑性,因为活塞瞬推、中继器发生奇怪的延时,只是这个bug的表象,真正的bug其实是这个:https://bugs.mojang.com/browse/MC-172307

MC-172307

MC-172307,区块加载时所有计划刻事件会在第一个游戏刻立即执行。中继器的亮起、熄灭是计划刻事件,所以会受到这个bug的影响。

@Fallen_Breath​认为这是https://bugs.mojang.com/browse/MC-169919导致的,不过我认为从根本上还是MC-172307导致的,MC-169919也只是表象。

这个神奇的bug成功迷惑了一众大佬,即便是RedCMD一开始也没能认清本质,认为是所有奇数计划刻的时间会在区块加载时+1游戏刻执行。

那么这种神奇的bug该怎么找呢?下面我向大家墙裂推荐:SciCraft Discord的technical-bugs频道

https://discord.gg/SciCraft

SciCraft的一众大佬会找到对生电非常有价值的bug,并在这个频道向大家分享。

这里举几个栗子:

非常生草的bug,矿车可以被旁观者模式的玩家停下来

僵尸增援可以在地狱亮度高于9的地方刷出

从1.13开始,更新铁轨比原来卡3~4倍

对于设计大型机器,这些bug报告可谓珍贵。关注这些有用的bug,也可以在bug修复后第一时间利用新特性设计机器,比如,https://bugs.mojang.com/browse/MC-153787(僵尸增援可以刷在玻璃上)在20w22a修复后,造大叔那种手砍猪人塔就能用玻璃防僵尸增援了。

发掘有价值的bug:https://bugs.mojang.com/browse/MC-164281

前段时间,光照更新抑制开启了生电技术新的研究方向。

然而,最令人懊悔的是,自己那迟钝的神经,以及对问题思考的浅薄:

这是无糖雪梨​的一个投稿视频,视频中,1.14 各种光照 bug 真的是屡见不鲜。然而,我就真把它当作娱乐视频来看了(虽然它本来就是),丝毫没有意识到——既然岩浆旁一直没有亮度,既然火把亮着亮着就突然自己灭掉了,那么这就说明——玩家附近的随机光照更新已经不复存在了,如果能深入发掘并利用 1.14 的光照更新的“特性”,完全可以做出能稳定存在亮度为0的地狱门——而这样的研究并不复杂,只需要在 Mojira 上找到 https://bugs.mojang.com/browse/MC-164281,就能找到完整的复现方法,以及用处——Monsters spawning in lit up areas

MC-164281

而看看活动日志,就能看到,早在 2019 年 10 月 22 日,就已经有完整详细的复现、保持光照更新抑制的办法了

可惜世上没有“如果”,只能怪自己太迟钝,缺少联系思考的能力,让vktec摘得了光照更新抑制技术的桂冠。

所以我会说,Mojang 的漏洞追踪器真是亟待挖掘的宝藏啊… …

cut-off

最后,关于活塞、投掷器与发射器的 bug

许多人可能会发现两种活塞、投掷器与发射器非常容易出 bug,请大家在搜索相关的 bug 时,考虑一下先看看 https://bugs.mojang.com/browse/MC-108(qc激活)与https://bugs.mojang.com/browse/MC-11193(红石线乱序更新)这两个bug,因为绝大部分与活塞、投掷器、发射器相关的 bug 都是 MC-108,或者两者一起作用,进而导致的bug。

cut-off

感谢观看!

cut-off

您可以自由地: 共享 — 在任何媒介以任何形式复制、发行本作品 演绎 — 修改、转换或以本作品为基础进行创作 惟须遵守下列条件: 署名、非商业性使用、相同方式共享 https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh