跳到主要内容

版本适配

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