GenDustry

[!INFO] Git Commit: e4af5e5 | Updated: 2026-10-02

GenDustry(modid gendustry)是 bdew 原作的 GTNH 分支,把 Forestry 的生物遗传学(蜂种、基因、繁殖)重构成一套完全由机器驱动的工业体系:基因药皿、基因样本、基因模板三件套贯穿全部 10 台机器,用 MJ 作为统一能量单位驱动从采样 → 压印 → 诱变 → 复制 的完整遗传流水线。

modid 从源码读出:Gendustry.scala:54 的 final val modId = "gendustry",并在 :42-49 的 @Mod(modid = Gendustry.modId, ...) 中引用,与 gradle.properties 的 modId = gendustry 一致。Minecraft 版本为 1.7.10(gradle.properties 的 minecraftVersion = 1.7.10;modLanguage = "scala")。版本标签 1.9.13-GTNH(git describe --tags),许可证 MMPL-1.0。

[!IMPORTANT] 分类名 gendustry ≠ modid 的大小写争议 relation.md 记录的仓库路径是 /Users/evlos/a/mirror/gendustry/(小写),分类名与 modid 均为全小写 gendustry。注意 mod 作者 ID 与包名是 net.bdew.gendustry(modGroup),与 modid 同为小写,但不要把它误读成别的 mod。

[!NOTE] 本模组不是 GregTech 5 附属 GenDustry 与 GregTech 毫无关系。dependencies.gradle 的依赖是 NEI、bdlib、Forestry、IC2 Experimental、BuildCraft,另有 waila / CoFH Lib / Mekanism 三个 compileOnly。全仓库 grep -rniE 'gregtech|gregoriy' src/ 仅 16 条命中,且全部是语言文件里两个蜂种样本的 tooltip 文本(item.gendustry.GeneSample.gregtech.lifeEon.* 与 item.gendustry.GeneSample.gregtech.effectTreetwister.*),没有任何 GregTech API 调用或继承。真正的硬依赖只有两个(见下)。

依赖(@Mod(dependencies = ...),Gendustry.scala:47):

依赖 作用域 说明
Forestry@[4.0.0.0,) required-after 唯一的必需游戏模组;其 Apiculture / Trees 模块分别决定蜂种与花粉装备是否注册
bdlib@[1.9.4.109,) required-after bdew 自己的库,提供 ItemManager / MachineManager / BlockManager / gencfg 解析器
BuildCraft|energy、BuildCraft|Silicon after(软) 电力、组装线配方、管道推送、触发器
IC2 after(软) EU 电力;缺失时 PowerProxy 警告
CoFHCore after(软) RF 电力与导管
BinnieCore、ExtraBees、ExtraTrees、MineFactoryReloaded、MagicBees after(软) 扩展内容联动
Waila IMC 消息(无依赖声明) init 阶段发 register 消息接入

PowerProxy.logModVersions 在既无 CoFHCore 又无 IC2 时连续打两条警告 —— 实际运行需要至少一个能量系统。

运行机制

模组主体是 173 个 .scala 文件 + 17 个 .java 文件(.java 全部位于 src/main/scala/ 树下的 api/ 目录,是对外 API 而非 JVM 限制)。启动流程(Gendustry.scala):

  • preInit:绑定 4 个 API 静态字段 → ItemPush.init() 探测 4 个物品推送后端 → 释放并加载 5 个配置文件 → 注册 BC 触发器 → Fluids / Blocks / Items / Machines 四次 load()
  • init:加载 client.config(仅客户端)→ 注册 GUI handler → 注册 GeneRecipe 与 ChargeRecipe → Upgrades.init() → CustomContent.registerBranches() / registerSpecies() → 发 WAILA IMC
  • postInit:TuningLoader.loadDelayed() 真正提交配方 → registerAlleles() / registerTemplates() / registerMutations() / CustomHives.registerHives() → RegistriesApiImpl.mergeToMainRegistry()
  • serverStarting:注册 3 条指令

内容与数据分离是本模组最大的特色:几乎所有内容(机器数值、配方、升级件、蜂种、蜂巢)都由 config/gendustry/ 下的自定义配置语言驱动,配置文件优先于代码。GeneticsCache、ResourceListener、TuningLoader 三个类配合实现热读。

机器列表

10 台机器,全部继承 BaseMachineBlock(硬度 2.0、Material(MapColor.ironColor)),消耗品统一是基因药皿。

  • 诱变剂制造机 - 固体转 Mutagen,10000 mB 储罐,唯一只接受输入盖板的机器
  • 诱变机 - 机器繁殖,4 槽,支持 4 条变异覆盖表
  • 高级诱变机 - 储能 160000 MJ,无秘密变异,配方需整台诱变机
  • 工业蜂箱 - 15 槽,4 个升级槽,4 个产出槽,机器形态蜂箱
  • 基因压印机 - 模板写回活体,自然蜂 0% / 人工蜂 10% 死亡率
  • 基因采样机 - 随机采一条等位基因,接受任意 Forestry 个体
  • 基因提取机 - 液体 DNA,启动能量 40 MJ(全场最高之一)
  • 蛋白质液化机 - 肉类转蛋白质,单槽无培养皿
  • 基因复制机 - 双液体输入,每次 250000 MJ(全场最高)
  • 基因转换机 - 样本与模板互转,培养皿消耗仅 20%

物品列表

22 个物品类(含 3 种盖板与 2 种多 meta 染色物品)。

液体列表

3 种流体,各自带方块 + 桶 + Forestry 空罐两种容器。

  • Mutagen - 诱变机的燃料,红石 100 mB / 铀 9000 mB
  • Liquid DNA - 复制机燃料,每次 1000 mB
  • Protein - 复制机主燃料,每次 5000 mB,是 DNA 的 5 倍

升级件列表

工业蜂箱 的 21 种升级,按功能分四组。

蜂种列表

默认注册 17 个自定义蜂种(16 染色 + 1 赞助),另 18 条变异配方。

  • 染色蜂种 - 16 种,新属 gendustry.color,完整颜色体系 + 18 条 10% 变异
  • 赞助蜂种 - 1 种,独立属 gendustry.patreon,掉原版蜂蜡

方块列表

  • 自定义蜂巢方块 - 运行时按 hives.cfg 动态生成,默认注册 0 个(配置文件不在 files.lst 中)

配置列表

5 个内部配置文件 + 1 个纯客户端配置,合计 102 个可调键 + 12 个客户端项。

集成列表

4 组跨模组兼容层,全部基于 @Optional 注解与运行时探测,无硬编译依赖。

API 列表

  • Gendustry API - 4 个静态入口 + 17 个接口,2.0.0 起语义化版本
  • 注册表 API - 3 个液体来源注册表 + 变异覆盖表 + ApiaryModifiers 15 个字段

指令列表

3 条服务端指令,均为权限等级 2、无 /gendustry 前缀。

  • /givetemplate - 1 参数,按物种 UID 发放空模板
  • /givesample - 3 参数,5 级校验后发放指定等位基因的样本
  • /dumpalleles - 0 参数,转储等位基因表到 alleles.dump