前提提醒:本文章使用了ai生成(服务器代码中也有使用ai,如您对ai开发有意见,我无法保证没有使用ai)
Mili(米粒)
为生电而生的 Folia 高性能服务端核心


p1和p2分别是高负荷和低负荷做个参考吧,虽然没啥用(CPU:
Intel Xeon Gold5218)
══════════════════════════════════════════════════════════
当你的服务器人数突破百人、红石机器遍地开花、实体数量节节攀升——
原版卡顿,Paper 不够用,Folia 又红石不兼容?
Mili 给你第三种选择。
══════════════════════════════════════════════════════════
▌ 为什么是 Mili?
Mili 站在 Folia 的肩膀上,但不止于 Folia。
Folia 开创了区域多线程调度的先河,让单服承载百人成为可能。但它的红石行为变更、区域崩溃、负载不均,让无数生电服主望而却步。
Mili 要做的事情很简单:让 Folia 的多线程性能真正可用于生电场景。
我们用 Rust 为 hottest code path 装上原生引擎,用从 Leaves 移植的红石兼容层修复原版行为,用共享线程池替代 Folia 的区域独占模型——然后把 Carpet、Jade、Syncmatica、XaeroMap 这些生电玩家离不开的协议全部适配进来。(感谢lophine做出移植)
一个核心,性能拉满,生电全兼容。
▌ 核心亮点
【Rust 原生加速 —— 把每 tick 的算力压榨到极限】
Mili 不是第一个在服务端引入原生代码的项目,但我们是第一个把它做到这个粒度的。
通过 JNI 桥接 Rust 编译的原生库,Mili 将实体视锥剔除这一高频计算路径完全下沉到原生层。Java 侧将实体数据打包进 DirectByteBuffer,Rust 直接通过内存地址读取——零拷贝、零序列化开销。配合 Rayon 并行框架,每 tick 的剔除计算在多核 CPU 上真正并行展开。(我们无法得知是否正常工作,但写都写了,就宣传一下吧)
每 tick 仅需 M 次 JNI 调用(M = 观察者数量),而非传统的 N×M 次(N = 实体数)。当你的服务器有 200 人在线、数万实体时,这个差距是致命的。
没有 Rust 环境?没关系。原生库缺失时自动回退到纯 Java 实现,核心照常运行,只是少了那层原生加速。
【Folia 稳定性重构 —— 让多线程真正可靠】
Folia 的区域调度模型很美,但实战中问题不少。Mili 从底层重构了关键调度机制:
· Region Balancer:共享线程池 + 优先级队列替代每区域独占线程,繁忙区域拿到更多算力,空闲区域不浪费资源。动态负载均衡,告别"一个区域卡全服"。
· Region Load Monitor:无锁滑动窗口实时统计每个区域的 tick 耗时,精准定位性能瓶颈。
· Adaptive TPS Manager:根据实时负载动态调整 TPS,高负载时优雅降频而非硬卡。
· Cross-Region Helper:类型化跨区事件队列——红石信号、实体伤害、方块通知,跨区域传递安全有序。
· 全局实体计数器:按区域聚合 mob 数量,告别 O(entities) 全量扫描。
· 崩溃修复:RegionizedWorldData 空连接 NPE、已移除实体效果添加、/save-all 区域安全化——Folia 遗留的崩溃隐患逐个清除。
【红石与生电兼容 —— 原版行为,一个都不少】
生电服的核心诉求很简单:红石行为必须和原版一致。
Mili 从 Leaves/lophine 移植并适配 Folia 的全套红石/生电修复:
· 更新抑制(Update Suppression):捕获 UpdateSuppressionException 防止服务端崩溃,保留掉落物,不回滚已放置方块。生电玩家的刷沙、刷蜡机安心运行。
· 红石忽略向上更新:恢复 1.20.1/1.19 的红石粉/中继器/比较器行为,老机器照常工作。
· 即时方块更新器:InstantNeighborUpdater 替换 CollectingNeighborUpdater,红石响应更贴合原版语义。
· 旧方块移除行为:恢复 1.21 之前的 onRemove 语义,避免新版本的行为变更破坏既有装置。
· 羊毛漏斗计数器:通过羊毛颜色实现 hopper counter + /counter 命令,物品计数一目了然。
【Carpet 与协议兼容 —— 客户端工具全支持】
生电玩家离不开的客户端 mod,Mili 全部适配:
· Carpet:50+ 条 Carpet/TIS/AMS 规则映射,TPS/mobcaps/counter HUD 实时同步
· TISCM:tiscm:network/v1 协议,MSPT 广播与握手
· XaeroMap:Xaero 地图通道支持
· Jade:服务端数据提供,鼠标悬停即看方块信息
· Syncmatica:Litematic 投影同步,多人协作建造
· Servux:Servux 客户端服务
· REI:Roughly Enough Items 服务端协议
· BBOR:Bounding Box Outline Reloaded,结构边界可视化
· AppleSkin:饥饿值与饱和度精确同步
· Alternative Block Placement:Accurate/Carpet/Litematica 方块放置协议
玩家装好客户端 mod,连上 Mili 服务器,一切自动生效。无需额外配置。
【假玩家 / Bot 系统 —— 自动化测试与挂机利器】
从 Leaves/lophine 移植并全面适配 Folia 多线程环境。支持创建、管理和移除假玩家,常驻在线、执行背包操作和多种动作(攻击、破坏、钓鱼、跳跃、移动等)。无论是挂机刷怪、自动化测试还是红石机器调试,都能胜任。
【ReplayMod 摄影师 —— 服务器端录像】
支持创建 ReplayMod 摄影师实体进行录像,为服务器活动记录、宣传片制作提供便利。
▌ 谁适合使用 Mili?
· 生电服 / 技术服:红石行为全兼容,更新抑制、漏斗计数器等生电特性开箱即用
· 高人数生存服:Folia 多线程 + Rust 加速,百人在线不是梦
· 注重性能的服主:共享线程池、自适应 TPS、实体剔除,每一层都在为性能服务
· 追求原版体验的玩家:Carpet/Jade/Syncmatica 等协议全适配,客户端体验不打折
▌ 快速上手
环境要求:JDK 21+、Git 2.x,Rust 为可选项(缺失自动回退纯 Java)
构建命令:
git clone https://github.com/xucy10/Mili.git
cd Mili
./gradlew applyAllPatches --no-configuration-cache --no-build-cache
python scripts/inject_kotlin.py
./gradlew :mili-rust:stageRustBinary # 可选,编译 Rust 原生库
./gradlew :mili-server:createMojmapPaperclipJar
产物位于 mili-server/build/libs/,一个 JAR 拖进服务器目录即可启动。
配置文件 mili_config.toml 按功能分为 function / experiment / fixes / misc 四大类,所有开关一目了然,完整说明见项目 Wiki。
▌ 继承与致谢
Mili 沿 Minecraft → Paper → Folia → Mili 的 fork 链构建,大量生电特性源自 LeavesMC 社区。原为 Lophine/Luminol 衍生分支,现为直接基于 Folia 的独立项目。
感谢 PaperMC、LeavesMC、Lophine、LuminolMC等上游项目及所有贡献者的持续付出。
▌ 项目信息
GitHub:https://github.com/xucy10/Mili
许可证:GPL-3.0
适用版本:Minecraft 1.21.11
如果 Mili 对你的服务器有帮助,欢迎在 GitHub 上点一个 Star。
Mili(米粒)
为生电而生的 Folia 高性能服务端核心


p1和p2分别是高负荷和低负荷做个参考吧,虽然没啥用(CPU:
Intel Xeon Gold5218)
══════════════════════════════════════════════════════════
当你的服务器人数突破百人、红石机器遍地开花、实体数量节节攀升——
原版卡顿,Paper 不够用,Folia 又红石不兼容?
Mili 给你第三种选择。
══════════════════════════════════════════════════════════
▌ 为什么是 Mili?
Mili 站在 Folia 的肩膀上,但不止于 Folia。
Folia 开创了区域多线程调度的先河,让单服承载百人成为可能。但它的红石行为变更、区域崩溃、负载不均,让无数生电服主望而却步。
Mili 要做的事情很简单:让 Folia 的多线程性能真正可用于生电场景。
我们用 Rust 为 hottest code path 装上原生引擎,用从 Leaves 移植的红石兼容层修复原版行为,用共享线程池替代 Folia 的区域独占模型——然后把 Carpet、Jade、Syncmatica、XaeroMap 这些生电玩家离不开的协议全部适配进来。(感谢lophine做出移植)
一个核心,性能拉满,生电全兼容。
▌ 核心亮点
【Rust 原生加速 —— 把每 tick 的算力压榨到极限】
Mili 不是第一个在服务端引入原生代码的项目,但我们是第一个把它做到这个粒度的。
通过 JNI 桥接 Rust 编译的原生库,Mili 将实体视锥剔除这一高频计算路径完全下沉到原生层。Java 侧将实体数据打包进 DirectByteBuffer,Rust 直接通过内存地址读取——零拷贝、零序列化开销。配合 Rayon 并行框架,每 tick 的剔除计算在多核 CPU 上真正并行展开。(我们无法得知是否正常工作,但写都写了,就宣传一下吧)
每 tick 仅需 M 次 JNI 调用(M = 观察者数量),而非传统的 N×M 次(N = 实体数)。当你的服务器有 200 人在线、数万实体时,这个差距是致命的。
没有 Rust 环境?没关系。原生库缺失时自动回退到纯 Java 实现,核心照常运行,只是少了那层原生加速。
【Folia 稳定性重构 —— 让多线程真正可靠】
Folia 的区域调度模型很美,但实战中问题不少。Mili 从底层重构了关键调度机制:
· Region Balancer:共享线程池 + 优先级队列替代每区域独占线程,繁忙区域拿到更多算力,空闲区域不浪费资源。动态负载均衡,告别"一个区域卡全服"。
· Region Load Monitor:无锁滑动窗口实时统计每个区域的 tick 耗时,精准定位性能瓶颈。
· Adaptive TPS Manager:根据实时负载动态调整 TPS,高负载时优雅降频而非硬卡。
· Cross-Region Helper:类型化跨区事件队列——红石信号、实体伤害、方块通知,跨区域传递安全有序。
· 全局实体计数器:按区域聚合 mob 数量,告别 O(entities) 全量扫描。
· 崩溃修复:RegionizedWorldData 空连接 NPE、已移除实体效果添加、/save-all 区域安全化——Folia 遗留的崩溃隐患逐个清除。
【红石与生电兼容 —— 原版行为,一个都不少】
生电服的核心诉求很简单:红石行为必须和原版一致。
Mili 从 Leaves/lophine 移植并适配 Folia 的全套红石/生电修复:
· 更新抑制(Update Suppression):捕获 UpdateSuppressionException 防止服务端崩溃,保留掉落物,不回滚已放置方块。生电玩家的刷沙、刷蜡机安心运行。
· 红石忽略向上更新:恢复 1.20.1/1.19 的红石粉/中继器/比较器行为,老机器照常工作。
· 即时方块更新器:InstantNeighborUpdater 替换 CollectingNeighborUpdater,红石响应更贴合原版语义。
· 旧方块移除行为:恢复 1.21 之前的 onRemove 语义,避免新版本的行为变更破坏既有装置。
· 羊毛漏斗计数器:通过羊毛颜色实现 hopper counter + /counter 命令,物品计数一目了然。
【Carpet 与协议兼容 —— 客户端工具全支持】
生电玩家离不开的客户端 mod,Mili 全部适配:
· Carpet:50+ 条 Carpet/TIS/AMS 规则映射,TPS/mobcaps/counter HUD 实时同步
· TISCM:tiscm:network/v1 协议,MSPT 广播与握手
· XaeroMap:Xaero 地图通道支持
· Jade:服务端数据提供,鼠标悬停即看方块信息
· Syncmatica:Litematic 投影同步,多人协作建造
· Servux:Servux 客户端服务
· REI:Roughly Enough Items 服务端协议
· BBOR:Bounding Box Outline Reloaded,结构边界可视化
· AppleSkin:饥饿值与饱和度精确同步
· Alternative Block Placement:Accurate/Carpet/Litematica 方块放置协议
玩家装好客户端 mod,连上 Mili 服务器,一切自动生效。无需额外配置。
【假玩家 / Bot 系统 —— 自动化测试与挂机利器】
从 Leaves/lophine 移植并全面适配 Folia 多线程环境。支持创建、管理和移除假玩家,常驻在线、执行背包操作和多种动作(攻击、破坏、钓鱼、跳跃、移动等)。无论是挂机刷怪、自动化测试还是红石机器调试,都能胜任。
【ReplayMod 摄影师 —— 服务器端录像】
支持创建 ReplayMod 摄影师实体进行录像,为服务器活动记录、宣传片制作提供便利。
▌ 谁适合使用 Mili?
· 生电服 / 技术服:红石行为全兼容,更新抑制、漏斗计数器等生电特性开箱即用
· 高人数生存服:Folia 多线程 + Rust 加速,百人在线不是梦
· 注重性能的服主:共享线程池、自适应 TPS、实体剔除,每一层都在为性能服务
· 追求原版体验的玩家:Carpet/Jade/Syncmatica 等协议全适配,客户端体验不打折
▌ 快速上手
环境要求:JDK 21+、Git 2.x,Rust 为可选项(缺失自动回退纯 Java)
构建命令:
git clone https://github.com/xucy10/Mili.git
cd Mili
./gradlew applyAllPatches --no-configuration-cache --no-build-cache
python scripts/inject_kotlin.py
./gradlew :mili-rust:stageRustBinary # 可选,编译 Rust 原生库
./gradlew :mili-server:createMojmapPaperclipJar
产物位于 mili-server/build/libs/,一个 JAR 拖进服务器目录即可启动。
配置文件 mili_config.toml 按功能分为 function / experiment / fixes / misc 四大类,所有开关一目了然,完整说明见项目 Wiki。
▌ 继承与致谢
Mili 沿 Minecraft → Paper → Folia → Mili 的 fork 链构建,大量生电特性源自 LeavesMC 社区。原为 Lophine/Luminol 衍生分支,现为直接基于 Folia 的独立项目。
感谢 PaperMC、LeavesMC、Lophine、LuminolMC等上游项目及所有贡献者的持续付出。
▌ 项目信息
GitHub:https://github.com/xucy10/Mili
许可证:GPL-3.0
适用版本:Minecraft 1.21.11
如果 Mili 对你的服务器有帮助,欢迎在 GitHub 上点一个 Star。
最后编辑: