打开网易新闻 查看精彩图片

每年固定节目,一群三十来岁的人蹲在语音频道里,为了一块钻石矿吵到凌晨三点。这是作者和他的朋友们的年度Minecraft狂欢,通常需要16GB内存的服务器才能稳住一个大型模组包。但有人问了:如果硬件需求可以砍掉三个零呢?

Reddit用户angelthebox给出了答案。他把完整的服务器代码用C语言重写,剔除了对Java的依赖,最终让Minecraft 1.16.5跑在了ESP32-S3上。这块芯片售价不到10美元,尺寸比指甲盖还小一圈。

指甲盖上的方块世界

指甲盖上的方块世界

项目叫Macerun,目前的状态用开发者自己的话说:能玩,但别指望流畅。2x2合成配方正常工作,3x3的还没加上;玩家退出后,背包物品和坐标位置会被遗忘——ESP32的内存实在挤不出空间做持久化存储。最致命的是零生物生成,你只能被迫开启和平模式,在一个没有僵尸、没有苦力怕的世界里孤独地搭房子。

但angelthebox塞进的功能清单依然让人意外:多人联机、区块加载、基础的红石电路、甚至下界传送门。这些原本需要GB级内存支撑的系统,被压缩进了520KB的RAM(ESP32-S3的可用内存)。作为对比,官方Minecraft服务器启动时的内存占用是它的三千倍以上。

这不是优化,是截肢手术。开发者砍掉了渲染引擎、砍掉了生物AI、砍掉了几乎所有"让Minecraft像Minecraft"的东西,只留下最核心的方块同步逻辑。

代码开源在GitHub上,任何人都可以下载烧录。作者放出的演示视频里,两个玩家站在一片超平坦地形上,放置和破坏方块的延迟肉眼可见,但确实能同步。

为什么偏偏是ESP32

为什么偏偏是ESP32

这块芯片在创客圈的地位,相当于厨房里的瑞士军刀。WiFi+蓝牙双模、双核240MHz处理器、功耗低到能用电池跑几个月,价格却压在了人民币20元以内。过去几年,有人用它做智能开关、有人做无人机飞控、有人甚至移植了NES模拟器。

但Minecraft服务器是另一回事。原版游戏用Java编写,启动即吞掉数百兆内存,GC(垃圾回收)机制对实时性极不友好。angelthebox的解法很直接:用C从零写一套兼容协议的服务器,把内存管理权攥在自己手里。没有虚拟机开销,没有运行时膨胀,每一字节都要精打细算。

代价是兼容性。Macerun只支持1.16.5版本,客户端必须用完全相同的协议版本接入。模组?数据包?自定义资源?想都不要想。这是一个功能残缺但逻辑自洽的孤岛,和官方生态彻底割裂。

类似的极端移植在ESP32社区不算新鲜事。去年有人在这块芯片上跑通了3D赛车游戏,帧率惨淡但物理引擎完整;更早之前,NES模拟器的移植已经证明,只要有足够的耐心,8位机的游戏库可以完整迁移。Macerun的特殊之处在于,它挑战的不是"能不能运行",而是"能不能服务多人实时交互"——后者对延迟和状态同步的要求,比单机游戏高出整整一个数量级。

谁在需要这种疯狂

谁在需要这种疯狂

说实话,没人会真的用这个服务器开服营业。520KB内存的上限决定了它最多承载两三个玩家,区块加载范围被压缩到窒息,一次意外的断电就会抹掉所有进度。它的价值纯粹在证明边界:当硬件约束被推到极限时,软件还能保留多少核心体验?

angelthebox在Reddit回复中提到,这个项目始于一个赌约。朋友断言"绝对不可能",他花了三个月的周末时间,把"不可能"改成了"很难用"。代码里到处是硬编码的妥协:世界高度被锁在128格以下,区块只缓存玩家周围3x3的区域,实体系统被整个注释掉。

这些不是缺陷,是特征。就像把一部小说压缩成电报,每个字都要付出代价。

对物联网开发者来说,Macerun提供了一个有趣的参照。ESP32最常见的应用场景是传感器数据采集、边缘计算、或者作为WiFi中继。但angelthebox证明了它的天花板远高于此——只要你能接受足够激进的裁剪,这块芯片可以扮演原本属于x86服务器的角色。

当然,"足够激进"是个模糊地带。当Minecraft没有了怪物、没有了合成深度、没有了进度保存,它还算是Minecraft吗?这个问题没有标准答案。但至少在angelthebox的服务器里,你依然可以和朋友一起,在延迟半秒的世界里,笨拙地堆出一座像素金字塔。

GitHub仓库的Issue列表里,有人请求加入苦力怕,有人抱怨背包丢失太打击人,也有人单纯留言"这太疯狂了"。开发者回复最后一条时用了个笑脸表情:「下次赌约,我打算试试能不能跑1.20版本。」

如果赌约成立,他需要再榨出多少KB的内存?