OpenModsLib
[!INFO] Git Commit:
e5e8177| Updated: 2026-10-02
OpenModsLib 是 OpenMods 团队的基础库模组(mcmod.info 描述为 “Boring stuff for all that silly Open* mods”),为同团队的 OpenBlocks、OpenPeripheral、OpenComputers 提供共享代码。它不注册任何方块、物品或合成配方——全部价值在代码与 API:1 个 coremod(6 个原版类字节码补丁)、1 个数学表达式引擎(213 个类、5 种数值后端)、4 条网络通道、19 个可混入的公开接口,以及 9 条玩家指令。
项目起源是 OpenBlocks 与 OpenPeripheral 的公共代码抽取。README 明确警告:“NEVER LET IT GO ABOVE 0.10.x”,因为其它 mod 依赖其 0.10.x 的 API 形态。维护者为 Mikee、NeverCast、boq、Lyqyd,官网 https://openmods.info/。
五个名称互不相同
本条目涉及 5 个独立字符串,没有任何两个完全相同(除分类名与资源域恰好同形外),阅读源码或排查资源问题时必须分别确认:
| 名称类型 | 实际值 | 来源 |
|---|---|---|
| modid | OpenMods |
src/main/java/openmods/OpenMods.java:52 的 public static final String MODID = "OpenMods",并作为 @Mod(modid = OpenMods.MODID) 使用(:46) |
| 资源域 | openmodslib |
资源目录 src/main/resources/assets/openmodslib/(lang / sounds.json / textures 均在此下) |
| 分类名 | openmodslib |
data/relation.md 分类行(驼峰转小写规则) |
| 仓库目录名 | OpenModsLib |
/Users/evlos/a/mirror/OpenModsLib(大小写经 git ls-files 与 os.listdir 双重确认;同目录另有独立仓库 OpenModularTurrets,勿混淆) |
| jar 名 | OpenModsLibs |
gradle.properties 的 customArchiveBaseName = OpenModsLibs(注意结尾多一个 s) |
modid OpenMods ≠ 分类名 openmodslib,且资源域又是第三种写法。查找资源文件时应搜 assets/openmodslib/,查找 mod 注册名时应搜 OpenMods。
另有一个 FML 容器 modid OpenModsCore(src/main/java/openmods/core/OpenModsCore.java:23-24),由 @Mod(dependencies = "required-after:OpenModsCore")(OpenMods.java:48)声明为硬前置 —— 但它由本 mod 自身的 coremod 提供,不是外部依赖。
版本与语言
- Minecraft 1.7.10 / Forge 10.13.4.1614 —— 证据为
gradle.properties的minecraftVersion = 1.7.10与forgeVersion = 10.13.4.1614;OpenModsCorePlugin另标注@MCVersion("1.7.10")(src/main/java/openmods/core/OpenModsCorePlugin.java:16) - 纯 Java:712 个
.java文件(src/main/java675 +src/test/java37),0 个.kt、0 个.scala - 引用提交
e5e8177f2dd2297d5aea6bb733955a67ffa63c95(git cat-file -t验证为commit)。未采用git describe作为版本判据:该仓库是 depth-1 浅克隆(git rev-list --count HEAD= 1,存在.git/shallow),轻量标签0.10.14虽与versionPattern = 0.10.d+(-pre|-snapshot)?吻合,但浅克隆的标签不足以证明工作树的 MC 版本,故以gradle.properties的显式声明为准 - 构建使用
com.gtnewhorizons.gtnhconvention插件(RetroFuturaGradle 系),故version_gate.py的形态 ① 可正常解析
依赖关系
| 类型 | 内容 | 依据 |
|---|---|---|
| 硬依赖 | 无外部 mod | @Mod(dependencies = "required-after:OpenModsCore") 指向自带的 coremod 容器(OpenMods.java:48) |
| 软依赖(编译期) | com.github.GTNewHorizons:BuildCraft:7.1.57:api |
dependencies.gradle:4 声明为 compileOnly;仅 BuildCraftPipes.java:9 导入 buildcraft.api.transport.IPipeTile,并在 :18 用 classExists(...) 做运行时探测 |
| 软依赖(运行时探测) | TConstruct、ExtraUtilities、BiomesOPlenty | src/main/java/openmods/utils/render/PaintUtils.java:38,41,44 的 Loader.isModLoaded(...) |
| 仅声明未使用 | Mods.java 中另外 55 个 modid 常量 |
src/main/java/openmods/Mods.java 共声明 58 个 modid 常量(:6-64),但全仓库仅 3 个被实际引用(见下) |
Mods.java 的常量清单极易被误读为依赖列表。逐条核对 Mods.<NAME> 的真实引用点后确认:58 个常量中只有 TINKERSCONSTRUCT(“TConstruct”)、EXTRAUTILITIES(“ExtraUtilities”)、BIOMESOPLENTY(“BiomesOPlenty”)出现在 PaintUtils.java,其余 55 个(如 OpenComputers、ArsMagica2、Thaumcraft)在全仓库无任何引用,属历史遗留清单,不构成依赖。
源码中不存在 FML 的 @Optional 依赖声明(@OptionalArgs 是计算器引擎的函数派发注解,与依赖无关)。
注册内容(仅计生效项)
| 类别 | 数量 | 说明 |
|---|---|---|
@Mod 类 |
1 | openmods.OpenMods(OpenMods.java:51) |
DummyModContainer 子类 |
1 | openmods.core.OpenModsCore(非 @Mod,coremod 专用) |
IFMLLoadingPlugin 实现 |
1 | openmods.core.OpenModsCorePlugin |
| 方块 | 0 | GameRegistry.registerBlock 仅出现在 GameConfigProvider(供下游用的 API),OpenModsLib 自身未调用 |
| 物品 | 0 | 同上,GameRegistry.registerItem 仅在 GameConfigProvider.java:210,213 |
| TileEntity | 0 | GameRegistry.registerTileEntity 仅在 GameConfigProvider.java:291,299 |
| 实体 | 1 | EntityBlock,id 804(OpenMods.java:54 常量、:107 注册) |
| 合成配方 | 0 | 无 |
| 原版类 ASM 补丁 | 6 | 见coremod 补丁 |
| 网络通道 | 4 | 见网络与同步 API |
| 指令 | 9 | 见指令总览 |
| 键位 | 1 | CalcKey,默认 =,名称 “Open Calculator” |
| 配置 GUI | 1 | GuiFactory.ConfigScreen(@Mod(guiFactory = "openmods.GuiFactory"),OpenMods.java:49) |
| 崩溃报告条目 | 3 | 变换器状态、注入器安全检查、模板缓冲状态 |
| 配置属性 | 4 | 见OpenModsLib 配置 |
| 语言文件 | 5 | en_US / zh_CN / es_ES / ru_RU / pt_BR,均属资源域 openmodslib |
玩家功能总览
对玩家而言,OpenModsLib 只有一个直接可见的功能:数学计算器。按 = 键即在聊天框预填 = ,可用 /=eval、/=let、/=fun、/=config、/=execute 求值表达式、定义变量函数、切换 5 种数值后端(浮点 / 分数 / 大整数 / 布尔 / 多类型)并执行 <游戏目录>/scripts 下的脚本。另有 /om_config_* 配置读写与 /om_source_* 类来源诊断。
其余 90% 的功能(coremod 补丁、接口混入、网络层、渲染钩子)都是为下游 mod 提供的基础设施,在游戏内不可见。
已核实缺陷
以下 4 项均经源码逐行核对,可在对应条目查看完整证据:
TypedCalcConstants常量名与取值互换 ——SYMBOL_FALSE = "true"、SYMBOL_TRUE = "false"(TypedCalcConstants.java:14-15)。求值行为正确,仅命名误导。见多类型值系统/=config push与/=config pop指令名与行为互换 —— 指令名与所调用的CalcState方法相反。见计算器指令- 语言文件引用不存在的指令
/om_config_m—— 仅见于 5 个.lang文件,源码中无此注册。见指令总览 BIGINT后端gcd符号重复注册 ——BigIntCalculatorFactory.java:98与:106实现相同,后者覆盖前者。见类型后端
另有两处易被误判为缺陷、实为设计的写法,特此说明以免后续重复排查:SyncChannelHolder.ensureLoaded()(SyncChannelHolder.java:49)方法体为空但通过类初始化完成通道注册;echo 未注册为顶层指令但可在 /=execute 脚本内使用。
计算器列表
- 计算器引擎 - 分词→解析→编译→执行流水线、算符字典、3 种表达式模式与栈操作内建函数
- 类型后端 - 5 套数值实现的全局符号与算符对照表(DOUBLE / FRACTION / BIGINT / BOOL / MULTI)
- 多类型值系统 - MULTI 后端的 12 种注册类型、6 个转换器与 19 档算符优先级
指令列表
- 指令总览 - 全部 9 条已注册指令、权限模型与
/om_config_*、/om_source_*子命令 - 计算器指令 -
=config/=eval/=fun/=let/=execute指令树与脚本执行
配置列表
- OpenModsLib 配置 -
LibConfig4 个属性的默认值、读取点与配置 GUI - 特性注册 API - 供下游 mod 使用的
@RegisterBlock/@RegisterItem注解式注册层
核心与字节码列表
- coremod 补丁 -
OpenModsCorePlugin入口、6 个原版类补丁与其配置开关 - 类注入与 include - 动态类生成协议与
@IncludeInterface接口混入的字节码实现