老玩家们还是怀念逛箱子货架的感觉
在 igng-economy 的第一版里,我按照金融系统的思路写了个自动撮合订单簿。虽然逻辑很严密,但放进服里试跑之后发现,Minecraft 玩家们根本不喜欢像炒股一样填价格挂撮合单——大家还是怀念当年经典插件 GlobalMarketPlus(GMP 1.4.1.6)那种打开箱子 GUI 一页页逛别人摆出来的附魔剑、给朋友发物品邮箱、参与竞拍和在基地门口立木牌商店的手感。
可问题是,原版 GMP 底层存数据用的是本地 SQLite 和零散的 JSON 文件,既不支持 Folia 的多线程区域调度,也没法应付我们严格的事务安全要求,直接拿原版插件装进服里肯定要出乱子。
把 GMP 1.4.1.6 的外壳 1:1 像素级重写一遍
既然大家喜欢 GMP 的交互,我又信不过原版的数据层,那干脆自己动手把它的外壳完整重写一遍!2026 年 9 月 6 日到 9 日(Commit eef2006),我关掉了第一版的自动撮合订单簿,在 igng-economy 里开启了一场硬核的兼容重写。
我对着 GMP 1.4.1.6 的操作手册,把玩家看得见的 11 组核心命令(/gmp market|auction|mailbox|store|search|sell|buy 等)和全部 12 类箱子 GUI 界面 1:1 对齐还原了出来。不管是直接上架的一口价出售、预先冻结定金的求购单,还是有人出价就自动顺延截止时间的延时竞拍,甚至连箱子界面里每个按钮的槽位、翻页逻辑和木牌商店交互,都做得跟老玩家记忆里一模一样,同时还顺手写好了从旧版 CrazyAuctionsPlus 导数据的迁移工具。
熟悉的配方,换上铁打的 MySQL 事务心
虽然表面上看完全就是大家熟悉的全球市场,但玩家每点一下鼠标,底下跑的全是我们自己在 igng-economy 里打磨好的 MySQL InnoDB 事务、双账本冻结和 Escrow 物品托管状态机。
比如你在拍卖行里跟别人抢拍一把满配镐子,每次加价时系统都在数据库事务里原子冻结新买家的出价、退还上一位出价者的冻结款;竞拍结束物品进邮箱,领邮件时照样走 DELIVERING 租约锁发往对应 Folia 实体线程的背包。既留住了老玩家们最习惯的逛街体验,又把每一分钱和每一件装备锁进了安全的事务铁盒里。