
Minecraftのサーバーは、16GBを超えるメモリを積んだPCで動かすのが当たり前になっている。そこに挑んだのが、Redditユーザー angelthebox(GitHub: 4ngel2769)氏の自作プロジェクト「Macerun」だ。16MBのフラッシュとOctal PSRAMを搭載したESP32-S3マイコン上で、Minecraft Java Edition 1.16.5のサーバーをベアメタルで動作させる。
特徴はJavaランタイムもLinuxカーネルも使わず、ソースコードはすべてC言語で記述されている点だ。FreeRTOS上で動作し、ネットワーク処理はlwIPの生TCPソケットを直接扱う。Minecraft Java版プロトコル754の制約されたサブセットを実装し、最大4名のプレイヤーが同時接続できる。
ワールドは事前生成ではなく、2Dバイオーム生成とバイリニア補間によるハイトマップをオンザフライで計算して送信する方式だ。プレイヤーによるブロック変更やインベントリは、ESP32のNVS(Non-Volatile Storage)パーティションに直接書き込む。
実装済みの機能は、サーバー接続、移動、ブロックの破壊と設置、2×2のインベントリ内クラフト、チャット、基本的な物理演算、体力と空腹の管理など。未実装はMobのスポーンとAI、3×3クラフトテーブル、チェストやかまどといったコンテナ、プレイヤー切断時のインベントリと座標の保存だ。
着想元は、PortalRunner氏がESP32向けに開発した同種プロジェクト「bareiron」。angelthebox氏は、bareironより機能は少ないがESP32-S3とFreeRTOS向けに一から書いた学習目的のプロジェクトだと説明している。ソースコードはGPL-3.0で公開され、ビルドにはESP-IDF v6.0.0が必要。機能追加のPull Requestも歓迎するとしている。

