RecEx
[!INFO] Git Commit:
85f1023| Updated: 2026-02-06
RecEx(modid RecEx,显示名 Recex Recipe Exporter)是一个纯客户端的配方导出工具——它不注册任何方块、物品、实体、附魔、维度、群系、结构、成就或指令,全部 21 个 Java 文件只做一件事:把当前游戏内存里已注册的合成配方抓出来,压缩成一个 JSON 文件(外加一个 zip)写到存档根目录,供 NotEnoughProduction 等外部程序读取。
源码包 com.bigbass.recex,作者 bigbass1997,GTNH fork,版本标签 1.1.5。
基本信息
| 属性 | 值 |
|---|---|
| modid | RecEx(首字母大写,非全小写) |
@Mod 类 |
com.bigbass.recex.RecipeExporterMod |
| 显示名 | Recex Recipe Exporter(gradle.properties 的 modName) |
| Minecraft | 1.7.10 / Forge 10.13.4.1614 |
| 版本 | 1.1.5(HEAD 正好在该 tag 上;@Mod 里写的是 gradle token Tags.VERSION) |
| 源码规模 | 21 个 Java 文件 |
| 端 | 仅客户端(ServerProxy 只打一条警告) |
| 硬依赖 | GregTech 5U 及其 BartWorks / GT++ / Good Generator / TecTech 附属(编译期直接 import) |
| 注册内容 | 1 个热键、0 方块 / 物品 / 实体 / TileEntity / 指令 / 附魔 / 维度 |
| 配置 | 无。<config>/RecEx 目录会被创建但永远为空 |
| 内容维度 | 仅 keybinding(1 条)与 setting(7 条) |
工作方式
按 K(默认键,可改) [Open Exporter GUI]
↓
全屏蓝底 GUI,单个 "Export!" 按钮
↓ 点击后立刻关闭 GUI,导出转入 daemon 线程
抓取 5 类配方 → Gson 压缩序列化 → 写 .json → zip4j 压 .zip
↓
<存档根>/RecEx-Records/<UTC时间戳>.json + .zip
因为是运行时即时抓取,任何在 init/postInit 期间发生的配方改动(包括 MineTweaker 脚本)都会被一并导出;代价是必须在已加载的存档里才能导出。
热键列表
- Open Exporter GUI — 默认
K,分类Recipe Exporter,打开导出器 GUI。全 mod 唯一热键
导出机制
- 配方导出流程 — 触发链、子线程执行、确定性排序、异常处理的一处不一致
- 导出输出位置 —
RecEx-Records/路径推导、UTC 秒级时间戳、zip 参数、被创建却从不写入的空配置目录 - 导出 JSON 格式 —
sources五段结构、字段缩写约定、GT 字段缺失、仓库里schema.json已过时
数据模型
- 配方类型对比 —
ShapedRecipe/ShapelessRecipe/OreDictShapedRecipe/FurnaceRecipe逐项对比 - 成分类型 —
IItem/Item/ItemOreDict/Fluid枚举与 NBT 编码 - GT 配方表遍历 — 反射扫描 5 个 RecipeMap 容器类、按机器分组
- 仅客户端模组 — 端代理差异、无网络消息、
acceptableRemoteVersions = "*"
本 mod 没有的内容(grep 实证)
以下维度经全源码检索确认没有任何内容,因此未创建对应目录。grep 命令均在 /Users/evlos/a/mirror/RecEx/src/main/java 下对全部 21 个 Java 文件执行。
没有方块 / 物品 / TileEntity
$ grep -rn "registerBlock\|registerItem\|registerTileEntity\|registerEntity" .
(无输出)
$ grep -rn "extends Item\b\|extends Block\b\|extends Entity\|extends TileEntity" .
(无输出)
mcmod.info 里也没有 tileEntities 字段。RecEx 不向游戏注册任何内容物,CraftingManager / FurnaceRecipes 只是被读取。
没有指令
$ grep -rn "ICommand\|addChatCommand\|CommandBase\|getCommandName\|getRequiredPermissionLevel" .
(无输出)
导出不能用指令触发,只能靠热键开 GUI 点按钮。mcmod.info 的 dependencies 为空数组(由 gradle 模板生成),没有任何命令注册。
没有网络消息
$ grep -rn "SimpleNetworkWrapper\|IMessage\|NetworkRegistry\|sendToServer\|FMLEmbeddedChannel" .
(无输出)
唯一用到网络类的地方是 GuiMain 复用原版 S02PacketChat 把提示塞进本地聊天栏,不涉及自建 channel。
没有附魔 / 药水效果 / 群系 / 结构 / 成就 / 维度
$ grep -rn "net.minecraft.enchantment\|PotionEffect\|Achievement\|WorldProvider\|BiomeGen\|dimensionManager\|IBonemealable" .
(无输出)
没有多方块结构
grep -rn "Multiblock\|IMultiblock\|TileMultiblock" . 无输出——本 mod 不放置任何方块,结构概念无从谈起。
没有配置项
$ grep -rn "Configuration\|@Mod.Config\|configuration\.\|loadConfig\|ConfigurationCategory" .
./com/bigbass/recex/RecipeExporterMod.java:33: clientConfigDir = e.getModConfigurationDirectory();
唯一命中是 getModConfigurationDirectory()——只是取路径去拼输出目录,不加载任何 .cfg。src/main/resources/ 下也没有任何 .lang / .properties 配置文件(只有 mcmod.info 与 gson/zip4j 的 LICENSE、NOTICE)。
硬编码的"规则"只有三处,全在代码里不可配置:输出目录名 RecEx-Records、时间戳格式 uuuu-MM-dd_HH-mm-ss 与时区 UTC、zip 的 DEFLATE + FASTEST。
没有 NEI / REI 集成代码
$ grep -rn "codechicken\|notenoughitems\|mezz.jei\|IRecipeHandler\|ICraftingRecipeProvider\|IItemListOverlay" .
(无输出)
dependencies.gradle 里确实有 runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.60-GTNH:dev"),但那是仅供开发环境 runClient 用的 dev 依赖(NonPublishable),不参与发布、也没有任何源码 import。RecEx 与 NEI 的关系是单向的数据消费者关系——README 提到它"developed alongside NotEnoughProduction",导出文件供 NEP 读取,NEP 侧不需要装 RecEx。
没有事件订阅之外的客户端钩子
@SubscribeEvent 全仓库只有 1 处:listeners/KeyInputEventHandler.onKeyInput(InputEvent.KeyInputEvent)。没有 Mixin(gradle.properties 的 usesMixins = false),没有 ASM 字节码修改,没有 coremod(coreModClass 为空)。
第三方集成
| 库 / mod | 关系 | 依据 |
|---|---|---|
| GregTech 5U | 硬依赖,提供 GTRecipe / RecipeMaps |
implementation(...) + 直接 import |
| BartWorks / GT++ / Good Generator / TecTech | 硬依赖,仅为多抓几组 RecipeMap | 顶部直接 import,无 isModLoaded 守卫 |
| Gson 2.7 | 硬依赖,负责序列化 | shadowImplementation,打进 jar |
| zip4j 2.3.1 | 硬依赖,负责压缩 | shadowImplementation,打进 jar |
| jabel(Blowdryer) | 编译期,为 FurnaceRecipe 的 record 语法降级到 Java 8 |
enableModernJavaSyntax = jabel |
| LWJGL | 客户端按键枚举与 OpenGL 绘制 | Keyboard.KEY_K / GL11 |
| NotEnoughItems | 仅 dev 依赖,零源码引用 | runtimeOnlyNonPublishable(...:dev) |
| MineTweaker / CraftTweaker | 无依赖,但导出会包含其脚本改的配方 | README 明确说明 |
Color.java 的类注释写明其代码"directly copied from com.badlogic.gdx.graphics.Color"(Apache 2.0,文件头保留了 LibGDX 版权声明)。