老周目地图常驻内存,机器实在吃不消

一个服务器跑久了,总会攒下好几个充满回忆的老周目存档。以前的做法是把老地图全塞进一个多世界集合服里,结果不仅十几个世界常驻内存把机器吃得死死的,而且不同年代的周目跨越了好几个 Minecraft 大版本和不同服务端核心,根本没法硬塞进同一个服务端里跑。

可要是直接把老周目关停打成压缩包丢网盘,玩家想回去看看自己当年建的房子还得自己下载几十个 G 的地图,太折腾了。

点一下 NPC,Go 守护进程帮你现场开机

2026 年 8 月 25 日到 26 日(Commit da44c94、2c0efcd),我换了个思路:用 Velocity 4.1.0 代理层 + Go 语言写的宿主机守护进程 ArchiveController + 独立的 Lophine Docker 容器,搭起了 igng-archive-system 周目存档馆。

平时所有老周目的容器全部处于关机休眠状态,整套系统只跑一个占 2GB 内存的轻量大厅服(archive-lobby)。玩家进大厅后,走过去右键点一下对应周目的展览 NPC,或者敲一句 /server season-01,大厅插件就会通过本地带 HMAC 密钥的 HTTP 接口通知宿主机上的 ArchiveController:“有人要看一周目,赶紧开机!”

如果好几个老朋友约好了同时点同一个 NPC,系统不会傻乎乎地重复发指令,而是让大家共享同一个唤醒会话,每个人的屏幕下方都会同步显示 ActionBar 读秒倒计时。等容器里的服务端启动完毕、通过健康检查的那一刻,插件直接借用 AuthMe 的共享登录会话,把在场等候的玩家免二次输密码直接送进老周目里;等大家逛完拍照离开、服里没人超过设定时间后,控制器又会自动向容器发指令优雅停机,把内存全数还给宿主机。

顺手修好超平坦世界 Y=-60 的悬空 NPC

系统上线的第二天,我还修了一个特别逗的 Bug:现版本 Minecraft 的超平坦世界默认地表高度从早年的 Y=4 改成了 Y=-60,结果我写死在旧高度的展厅 NPC 全都高高悬在半空中,玩家仰着脖子根本点不到。排查清楚后赶紧给大厅坐标加了自适应贴地修正,这座能随时唤醒回忆的博物馆才算真正稳稳落了地。