OpenBlocks
[!INFO] Git Commit:
ed3d366| Updated: 2026-10-02
OpenBlocks 是 GTNH 上体量最大的 1.7.10 模组之一,由 OpenMods 团队(作者 Mikee、NeverCast、boq、Lyqyd)维护,mcmod.info 描述语是 “All the things you never thought you will ever need”。它没有单一主题,而是把建筑辅助、垂直物流、液体经验、投影建造、地图绘制、装饰收集六套互不相干的系统塞进同一个 jar,条目跨度极大:40 个方块、29 个注册物品(展开为 52 个 meta 物品)、10 个实体、3 个附魔、17 个 FlimFlam 效果、25 种奖杯、7 个自定义配方、92 个配置项、1 个游戏规则、3 个指令。
身份标识
本模组的标识字符串分散在六个位置且大小写不一致,逐项核对如下:
| # | 字符串 | 值 | 来源 |
|---|---|---|---|
| 1 | modid | OpenBlocks(首字母大写) |
OpenBlocks.java:225 的 MODID,用于 @Mod(modid = OpenBlocks.MODID)(:218) |
| 2 | FML coremod 类 | openblocks.OpenBlocksCorePlugin |
gradle.properties 的 coreModClass 与 modGroup 拼接;类实现在 OpenBlocksCorePlugin.java |
| 3 | 资源域 | openblocks(全小写) |
src/main/resources/assets/openblocks/;Stencil.java:37-38 的 "openblocks:stencil_" 与 "openblocks:stencilcover_" 直接印证 |
| 4 | 分类名 | openblocks |
relation.md |
| 5 | 目录名 | openblocks |
data/openblocks/ |
| 6 | jar 名 | 无法从本仓库单独确定 | gradle.properties 中 customArchiveBaseName 被注释掉,jar 名由 GTNH 的 convention 插件决定;对比同族的 OpenModsLib(customArchiveBaseName = OpenModsLibs,注意多一个 s)可知这类项目常单独覆写,但 openblocks 没有 |
三处额外的大小写不一致
- 经验液体的本地化前缀是大写
OpenBlocks.:Fluid.setUnlocalizedName("OpenBlocks.xpjuice")(OpenBlocks.java:505),对应语言键fluid.OpenBlocks.xpjuice - coremod 依赖声明用的是 OpenModsLib 的 modid
OpenMods,不是仓库名:dependencies = "required-after:OpenMods@[0.10.1,)"(OpenBlocks.java:230) - 注册名大小写不统一:
blockPlacer/itemDropper是驼峰(OpenBlocks.java:350、:353),其余方块全小写
依赖
硬依赖(1 个)
- OpenModsLib(modid
OpenMods,gradle.properties的api('com.github.GTNewHorizons:OpenModsLib:0.10.14:dev'),dependencies.gradle:4)。@Mod(dependencies)要求版本 ≥ 0.10.1 - 隐式依赖 Forge
10.13.4.1614(gradle.properties),未在@Mod中重复声明
软依赖(有真实代码路径)
- OpenPeripheralCore —— 4 个外设适配器(
ModuleAdapters.java:15-17) - ComputerCraft —— 1 个磁铁海龟升级,需与 OpenPeripheralCore 同时存在(
ModuleTurtles.java:19-23) - Backhand —— 滑翔翼副手(
EntityHangGlider.java:55) - Et Futurum Requiem —— 滑翔翼接管鞘翅(
EntityHangGlider.java:167) - MFR —— 启动时无条件发 IMC 把行李箱加入刷怪笼黑名单(
OpenBlocks.java:720-723) - NotEnoughItems ——
IConfigureNEI实现,但仓库内无new NEIOpenBlocksConfig(),靠 NEI 的类路径扫描发现 - Baubles / AdventureBackpack2 / CosmeticArmorReworked / GalacticCraft / Minecraft-Backpack-Mod / TinkersConstruct —— 墓碑自动收纳,按
common/ModPresence.java的 7 个Loader.isModLoaded开关判断
参考 / 开发期依赖(devOnlyNonPublishable,不随 jar 分发)
Mobs-Info、Holoinventory、waila、NotEnoughItems。这三个在源码中无 import,用途无法从 openblocks 仓库核实。
技术要点
- 无
@RegisterEntity注解:实体全部手写EntityRegistry.registerModEntity(OpenBlocks.java:637-698),共 10 个,ID 701~710 - 只有一个
@Mod类:openblocks.OpenBlocks(OpenBlocks.java:217-223) - coremod 与 ASM:
OpenBlocksCorePlugin只有一个 ASM 变换器openblocks.asm.OpenBlocksClassTransformer,在EntityPlayer.isInBed上打补丁;它要求OpenModsCorePlugin.CORE_MARKER黑板键存在,否则throw new IllegalStateException("OpenModsLib not present, not yet loaded or too old (needs at least 0.7.1)") - 配置有两套:
Config.java的 92 个@ConfigProperty(28 分类),加上ItemHangGlider.loadConfig自建的general.BlacklistedDimensions(39 个维度,默认禁用) - 已确认的缺陷:
sponge.spongeRange配置键被声明两次(Config.java:467与:471),导致海绵方块与海绵棒无法分别设置半径。详见配置页 - 确认的死代码:
MetasGeneric.cursor被故意保留为空 meta 以稳定已有物品的索引,注释明确说明了理由(MetasGeneric.java:216-219) - 确认的容错缺陷:
PlayerDeathHandler.java:320-322的Log.warn未传入异常对象,堆栈被完全丢弃
方块列表
40 个方块按子系统归为 7 页:
- 电梯 / 旋转电梯 - 颜色配对的垂直传送,含配置化的方块穿透规则与经验消耗
- 建筑指导仪 / 强化建筑指导仪 - 客户端幽灵结构渲染;强化版可自动铺方块(正上方放黑曜石启用)
- 经验瓶机 / 经验收集器 / 喷经验浴 / 自动铁砧 / 自动附魔台 - 液体经验(XP Juice)整条链,5 个方块 5 个 TileEntity
- 破坏机 / 放置机 / 物品掉落器 / 真空漏斗 - 红石驱动的四件物流设备
- 画布 / 玻璃画布 / 投影仪 / 绘图桌 / 调色器 / 颜料罐 - 投影建造系统;绘图桌实为模板制作台,玻璃画布与颜料罐无合成配方
- 玉阶梯 / 绳梯 / 石板路 / 脚手架 / 海绵 / 大按钮 / 治疗方块 - 地形与移动辅助,7 个方块各带独立机制
- 目标方块 / 风扇 / 洒水器 / 捕兽夹 / 捐赠站 / 旗帜 / 储罐 / 物品炮 / 村庄高亮灯 / 金蛋 / 幻想方块 / 天空方块 / 墓碑 / 奖杯方块 - 14 个各自独立子系统的方块索引对照
物品列表
29 个注册物品展开为 52 个可获得物品(4 个 meta 家族展开),归为 5 页:
- 通用 meta 物品(generic)与不可堆叠 meta 物品(genericUnstackable) - 12 个枚举常量、11 个实际注册;
cursor为故意保留的死项 - 眼镜系列(声波眼镜 / 铅笔眼镜 / 彩笔眼镜 / 全彩眼镜 / 上帝眼镜) - 5 副头盔位护甲,
ItemImaginationGlasses.Type的 4 种过滤能力 - 工具与随身物品(扳手 / 海绵棒 / 刮水器 / 游标 / 起重机控制器 / 起重机背包 / 计步器 / 史莱姆检测仪 / /dev/null / 史诗橡皮擦 / 睡袋 / 行李箱 / 滑翔翼) - 14 件无共享基类的物品;滑翔翼持有本模组唯一的第二套配置
- 地图与制图物品(高度地图 / 空白地图 / 制图师 / 金眼石)与经验桶 - 高度地图系统 + 3 个自定义地图配方
- 模板(stencil)与颜料刷(paintBrush) - 15 种模板各带 2 张贴图;旧模板换新时以物品形式退还
附魔列表
- 附魔:FlimFlam / 爆炸 / 背水一战 - 3 个附魔;FlimFlam 附带的 17 个随机效果含一处「cost 其实是幸运上界」的反直觉设计
实体列表
- 实体(10 个) - 无
@RegisterEntity注解,全部手写注册;ID 701~710;12 个实体类中 3 个未注册
设置列表
- 配置项全表(92 项,28 个分类) - 含已确认的
sponge.spongeRange重复键缺陷 - 游戏规则与指令 - 1 个游戏规则 + 3 个指令 + 6 个网络事件;含 14 处
catch (Throwable)的容错核对结果
集成列表
- 外部模组集成 - 1 个硬依赖 + 7 个功能软依赖 + 6 个墓碑软依赖;磁铁海龟升级 ID 9260 作者自陈为临时值
API 列表
- 模组 API 与扩展点 - 1 个静态门面 + 6 个 RPC 接口 + 5 个供外部实现的标记接口;
IElevatorBlock是最实质的对外扩展点
奖杯列表
- 奖杯系统(25 种生物奖杯) - 单方块 + 25 meta;14 种带
ITrophyBehavior;掉落率是可热改的表达式