致玩家:关于卡服崩服

1.16是一个巨大的进步。小木斧脱离了崩服时代。

这些改进是Mojang和Papermc团队不懈努力的成果。
1.14版本下总有寻不到源头和难缠的崩服,你可能听说过VoxelShapes,AdvancementPlayerData这些阴魂不散的名字。
升级1.16后小木斧只有两次崩服。第一次是内存溢出,第二次是恶魂火球。
虽然1.16版本非常稳定,不会像1.14那样隔几天一崩,但也不能忽视崩服带来的后果。

这些天发生了些不愉快的事情。我有很多想说的话,请往下读。

崩服时,服务器逻辑运作不正常。服务器的其他组件会选择强制关闭服务器,避免永远的卡顿——至少重启后玩家还可以继续。
服务器被强制关闭时,很多已经加载的区块来不及保存。再次进入服务器的时候玩家发现刚刚修建的建筑没有了,也就是回档。
但只有回档这么简单吗?


在比较罕见的情况下,如果服务器被强制关闭时某个区块存档文件(.mca)恰好正在被服务器修改,这个存档文件会出现数据一致性问题,简单来说,存档损坏了。
这就好比在向U盘写入数据的时候突然拔出U盘。正在写入的文件大概率就损坏了。
区块存档损坏后再被服务器加载会出现区块错误。世界以区块为单位支离破碎,像拼图一样。每一个区块都完好无损,只是区块的位置错了。在地皮世界看到破碎的道路,一定是崩服导致的区块错误。

服务器中几个大的,没有修复的区块错误:
CanPlayer的作品:/warp bd_cpzn
JeasonLan的作品:/plot visit mo_java30433 (他们的地皮一起坏了)
Seikojin的作品:/plot visit crab5 (没看到异常?这里我修复了好久。打开观察者模式看看。)
还有一些被特大面积区块错误影响的建筑师:doubiEAE, jar9, Celo_Blain, Seikojin(他大小地皮都裂了)
其他一些区块错误发生在地皮世界没有建筑的区域,手动修复也不是很困难。
小木斧生存服由于多次崩服也发生过很多区块错误,包括面积超过1024×1024的特大区块错误。

出现了区块错误后只有两种选择。
回档。区块错误通常发生在邻近的几个mca文件上。如果错误发现的及时,可以从服务器的每日备份中取出损坏前的mca文件,加载到测试服务器,使用worldedit将正确的部分复制到服务器。
然而区块错误频繁的1.14时代,worldeidt根本承受不住这样巨大的操作。我们往往会停服,将问题区块置换到本地存档,本地粘贴,再载入到服务器。通常要花费数小时。
如果区块错误在数周或数月后才被发现,服务器的备份早已被刷掉,只能寄希望于每几个月进行一次的全服快照。如果建筑比较新,那建筑师的心血可以说是付之东流,我们没有任何办法回档。
或者我们可以拼合。因为区块错误仅仅是区块错位,如果问题发生在建筑的边上,大部分在空白的地皮,就可以手动拼合。拼合只适合很小的建筑,工作量同样也非常大,也需要花费管理员数小时。

区块错误只是我们发现了的,非常显眼的存档文件损坏导致的问题。我们不知道崩服还会带来什么更大的隐患。崩服实体被持久存储在存档中,区块永久性损坏等问题有出现在其他人的服务器里。小木斧虽然没有遇到,但也不代表不可能。

有意试图卡服也是不允许的。无论是个人尝试还是集体起哄,抛开卡服带来玩家体验的下降不说,我们不能将服务器置于风险之中。

小木斧有活跃扎堆的玩家,也有在背后默默做着大工程的玩家。在卡服的事情上沉默的玩家是完全被动的。他们也会被卡回弹,也会卡掉,电路也会不工作;出现了回档和区块错误他们也要承担。
大家都是平等的。没有人带着异于玩家的头衔。希望卡服的玩家三思。

抛开玩家体验,虽然单纯的物理/实体卡服并不容易让服务器崩溃,但如果恰好在服务器卡顿的时候有大面积创世神操作或地皮操作,服务器就很有可能死锁崩溃。
地皮插件和创世神插件都是很复杂,异步化的插件。在这里详细解释异步化带来的问题,竞争条件与死锁,细说这类崩服的机理和崩溃案例不太可能。但这种崩服发生过,也不在少数。


总而言之,不要试图卡服,更不要尝试崩服。减少服务器卡顿,增加玩家体验,尽一切代价避免崩服。

我只想说,卡服崩服并不能让你获得大家的关注,也不能展现你的能力。不要把小木斧想尽一切办法提供的高自由度当作自己为所欲为的机会。

我有几个小建议:

创世神操作并不是一次操作越多越好。你可能觉得很爽,但这会让其他玩家的体验下降,甚至崩掉你自己的客户端。
将操作分割成小区域是很好的习惯,50万以下的操作会很流畅。涉及流体的操作请谨慎,因为流体会附带额外的性能损耗。
不要立刻undo。请等待服务器处理完上一个操作,并稳定下来,再处理undo。

拿到不明的刷怪蛋不要急着右键。
小木斧没有全面封锁刷怪蛋的漏洞,玩家可以发挥创造力生成很多实体。
但也有实体具有特殊属性,可以使服务器卡顿或崩溃。
如果你确实导致了崩服或目睹了崩服,请不要一声不吭!
管理员从服务端能获取到崩服的信息是非常有限的。我们的目的不是ban掉物品,或者ban掉玩家,或者发脾气。我们希望在不影响玩家体验的前提下消灭崩服,所以请把所知告诉我们!

最后,希望神器玩家克制一下,不要攀比神器,不要钟爱32767,2147483647和99999999999。有些时候,几百或者几千已经完全够用,这些很大的数字并不能使武器更厉害。如果你并不是十分确定这个属性不会造成任何不好的后果,请不要上来就设置一个很大的数字。这样可以有效减少无意间的崩服。


快到春节了,玩家也多,大家也很开心,我本来也应该很开心。
我实在很不希望看到曾经一起欢笑着走过1.14时代,经历过每一次崩服的老玩家,
今天反过头来拿着刷怪蛋,拿着活塞粘液块,拿着木斧,要卡服要崩服。

我不能理解。我们都经历过崩服的痛苦,为什么要这样做?
我知道那些神器玩家,崩服选手,不太可能看到这篇文章。
但是我还是要说出来。我很伤心。我的努力难道白费了吗?

我不愿意小木斧再有这种恶意行为。