版本适配
Monoceros 当前定位是跨版本机制框架。它不是简单地“勉强兼容”,而是把版本差异单独做成了一层可识别、可切换、可适配的体系。
VersionProfile 是什么
VersionProfile 可以理解成“当前运行环境画像”。它通常会描述:
- Minecraft 版本 ID
- Java 版本
- 当前属于 legacy 还是 modern 模式
- 当前环境对应的 profile ID
有了这层画像,框架就能知道自己现在跑在什么环境里。
FeatureFlags 是什么
FeatureFlags 是“当前环境支持哪些能力”的一组开关。当前文档里最值得关注的有:
| 开关 | 含义 |
|---|---|
legacyNbt | 是否使用旧版 NBT 兼容模式 |
dataComponent | 是否支持数据组件(1.20.5+) |
itemModel | 是否支持物品模型能力 |
packetRewriteSafe | 当前环境下数据包覆写是否足够安全 |
VersionAdapterResolver 做什么
它的作用是:根据当前环境画像,找到最合适的版本适配实现。
你可以把它理解成:
- 先判断当前环境
- 再选择合适版本模块
- 最后把统一接口暴露给上层使用
当前版本层结构
从源码结构看,Monoceros 把版本差异拆成了这些层:
| 模块 | 作用 |
|---|---|
legacy/ | 老版本兼容层 |
modern/ | 现代版本能力层 |
compat/java17/ | Java 17 兼容层 |
compat/java21/ | Java 21 兼容层 |
对服主有什么意义
对服主来说,这套系统最大的价值是:
- 同一套玩法配置更容易跨版本迁移
- 很多底层差异由框架自己消化
- 某些高风险能力会通过 FeatureFlags 明确告知能不能安全用
建议理解方式
你不需要把版本适配理解成“我要自己写适配层”。对大多数服主来说,只要知道 Monoceros 已经把这件事单独抽出来,就足够了。
真正和你直接相关的,是:
- 某些功能在低版本可能不可用
- 某些功能在高版本会有额外能力
- 某些行为会被 FeatureFlags 或实际模块能力影响
这也是为什么你在使用 NMS 挥发、数据包系统或部分物品能力时,最好先执行一次 /mono selfcheck。