关于我写了个Minecraft基岩版服务端这件事(三):回望与尾声

Sun, November 6, 2022 - 7 min read

好了,我也差不多该走了
—— 茅场晶彦

回望与下一步计划

首先,代码在这里:Github

如果只看前篇那个,呃,行yi云xie流qian水li的推导过程,可能会以为这个架构是我某天晚上拍脑袋一气呵成的。

git提交日志则更加夸张,似乎我只花了一个星期(加一个用来写datacompiler的周末)就写出来了。

但这一个星期其实是过去三个月周末的原型迭代,以及大概六个月休息时间思考和酝酿的结果。

当然,一个星期绝对写不出一个完整的MC服务端。这东西目前只能算是勉勉强强地跑了起来,测试和文档都基本没有,但我认为足以展示我所设想的架构了。

可能我过年的时候会抽空更新一下,尽可能地稳定核心,补足文档。能的话集中精力完成基础创造模式相关的功能。再之后就要等一两年后有空再说了。

尾声

感想

在构思了这么多,写了这么一滩东西之后,我最大的感想就是:高质量的软件真的价格不菲。

《人月神话》曾提到过,如果写代码只需要一倍的精力,那么把它变成可以发布,实际可用的软件就需要至少九倍的精力。

毕竟写软件远不止写代码这么简单:

  • 代码需要设计,需要文档记录大体设计和关键决策
  • 代码写起来除了实现功能,还要考虑错误处理,可扩展性,可观测性
  • 代码需要测试,到底怎么写测试,怎么组织测试也需要考量
  • 代码更新需要考虑如何发布,旧API下线还需要考虑如何移除

和上面这些东西比起来,敲代码反而是最简单的一部分了。

个人动机

话说回来,为什么我会想不开,放着正事不做,来挑战这种问题呢?

首先,我觉得这个设计思路确实漂亮:好的开发体验和组件定义自动化推导也许是革命性的——可能真的比现有方案好十倍,至少值得尝试。

其次,这是一个相当有技术挑战的问题:

  • 如果你对Minecraft服务端没有兴趣,那么这个项目的另一种说法是“可扩展并行实时体素世界模拟器”,听名字就知道挑战不少
    • 再考虑到状态数据库和插件支持,甚至可以说是低配版sqlite+tomcat,难度显而易见
  • 而且这属于“非常规软件”——不是标准的CRUD信息管理系统,这类问题的解法也还没有烂大街,所以有意思

此外,这个项目也可以让我开始思考一些深刻的问题:

  • (用户体验)如何提升开发者和运维人员的体验,进而降低难度,提升效率
  • (软件设计)如何平衡性能,扩展性与复杂度,如何设计出可扩展,简单,容易理解,难以被误用的API
  • (测试)如何测试一个非典型软件,如何给这种东西编写测试,设计测试架构
  • (发布)如何安排发布,做API的上下线
  • (社区)如何发起和运行一个开源项目

好了,老实讲,上面这些其实都只是“nice to have”的东西,并不能迫使我起身去做这件事。

到头来,可能只是为了纪念我10年的MC经历吧,更是为了兑现我十年前看刀剑吹过的牛逼,结结实实地过一把当创世神的瘾。

令人感慨,十年前那个半夜不睡,面对java异常只能二分查找删插件的中二少年,居然走了这么远。

感谢与祝福

首先,深深地感谢我的环境和我的导师,能让我有时间,完成这个与本职工作无关的挑战。

其次,感谢我的入宅作《刀剑神域》。如果没有这个让我无论怎么样都要发点东西的DDL,我压根不会坚持到这里。这个项目也只会变成我无数个设想过,但最终放弃了的项目之一。

感谢Minecraft,让我在童年和少年时期留下了无数美好的回忆,成为了我进入编程领域和计算机科学的阶梯,也让我结识了许多优sha秀diao的网友们。

感谢Nukkit项目和PowerNukkit项目的所有开发者。诚然,Nukkit项目的代码质量让人汗颜,但如果 没有他们筚路蓝缕,从零到一,以及数年如一日地维护协议库。这整个项目都将无从谈起。

最后,祝福PowerNukkitX项目的开发者们,这貌似是Nukkit系服务端中最为活跃的一个分支。那里聚集着一批相当年少有为的开发者,祝他们好运!(你跟我说,TM是大一新生的手笔?)

如果我没搞砸的话,刀剑开服的时间就是本文发表的时间。有空去的诸位,要见着桐老爷一家,请务必替我祝他们玩的开心!

我还有正事要做,就先走了!

ARGUS
平台软件工程师
johnbanq