• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】

教程 一款微微好用的生电核心

前提提醒:本文章使用了ai生成(服务器代码中也有使用ai,如您对ai开发有意见,我无法保证没有使用ai)

Mili(米粒)

为生电而生的 Folia 高性能服务端核心

Screenshot_20260806_210314_com.sonelli.juicessh_edit_442794580953788.webp
Image_1786107287879_93.webp
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。
 
最后编辑:

在线会员

  • 宥时雨
  • 诺诺noo
  • 沐予
  • 可乐不加冰
  • 1002
  • 请输入用户名91
  • 小叶
  • 健纲 黄
后退
顶部 底部