Not Enough SQL Exporter
[!INFO] Git Commit:
dba624e| Updated: 2026-10-02
Not Enough SQL Exporter(mod id nesql-exporter)是一个 纯客户端的数据库导出工具模组。
它扫描当前整合包里所有已加载模组的物品、流体、配方、生物与任务数据,
转成 SQL 脚本并导入本地仓库或 PostgreSQL,用来搭建一个可查询的「整合包配方/物品数据库」网站。
⚠️ 本 mod 注册内容为 0
这是本 wiki 中少数几个 有 @Mod 注解、会被 FML 正常加载,但不注册任何游戏内容的模组。
全仓库检索注册调用点的结果:
| 注册表 | 数量 |
|---|---|
| 方块 | 0 |
| 物品 | 0 |
| TileEntity | 0 |
| 实体 | 0 |
| 附魔 / 配方 / 维度 | 0 |
| 服务端命令 | 1(/nesql) |
| 配置 GUI | 1(ConfigGuiFactory) |
源码里唯一出现的 GameRegistry 调用是 GameRegistry.findUniqueIdentifierFor(item)
(util/IdUtil.java:37、plugin/base/factory/ItemFactory.java:41-42)——
这是只读查询「某个 ItemStack 属于哪个 mod」,不是注册。
因此本 wiki 不为它建立方块 / 物品 / 实体条目——那会是凭空捏造的内容。
工作方式
- 执行
/nesql(可选带文件名后缀) - 导出在独立线程中跑,不阻塞客户端
PluginRegistry按启用状态遍历 9 个插件- 每个插件把扫到的数据交给
com.github.dcysteine.nesql.sql.*下的 SQL 生成器 - 结果写入本地仓库(默认目录名
nesql-repository)或推送到 PostgreSQL
命令用
new Thread(exporter::exportReportException).start()启动, 异常通过exportReportException捕获而不会打断游戏。
插件(9 个)
| 插件 | 内部名 | 门控依赖 | 收录情况 |
|---|---|---|---|
| BASE | base |
无(强制启用) | — |
| MINECRAFT | minecraft |
无 | 原版数据 |
| NEI | nei |
无 | — |
| FORGE | forge |
无 | — |
| MOBS_INFO | mobsinfo |
mobsinfo |
不在本 wiki 收录范围 |
| AVARITIA | avaritia |
Avaritia |
已登记,尚未成文(前向引用 avaritia) |
| GREGTECH | gregtech |
gregtech(版本不以 GT6 开头) |
本 wiki 已收录 |
| THAUMCRAFT | thaumcraft |
Thaumcraft + thaumcraftneiplugin |
本 wiki 已收录 |
| QUEST | quest |
betterquesting |
已登记,尚未成文(前向引用 betterquesting) |
GREGTECH的门控特别处理过:GT5 与 GT6 共用 modidgregtech,ModDependency.GREGTECH_5.isLoaded()会额外检查版本串是否以GT6开头。
依赖范围说明
- NotEnoughItems(
required-after:NotEnoughItems)— 硬依赖,不在本 wiki 收录范围 acceptableRemoteVersions = "*",且所有逻辑都提前 return 掉服务端分支, 实际是纯客户端模组,装在客户端即可- 上述各插件的依赖均为运行期软依赖(
ModDependency枚举逐个isModLoaded)
设置列表
- 数据库与存储配置 - 5 项:PostgreSQL 开关、端口、用户名、密码、仓库名
- 导出触发与插件配置 - 3 项:配置文件开关、插件白名单、进场自动导出
- 图标与生物渲染配置 - 4 项:图标/生物渲染开关与尺寸、每 tick 限流
源码缺陷
Main.MOD_DEPENDENCIES声明required-after:NotEnoughItems;, 但全部实际逻辑都只跑在客户端——服务器端被强制要求装 NEI 毫无必要。ModDependency枚举里定义了FORESTRY("Forestry"), 但PluginRegistry的 9 个插件没有任何一个门控它——死枚举项。database_password默认空串,且配置 GUI 明文回写配置文件,无脱敏处理。- 实体/物品的 mod 归属依赖
GameRegistry.findUniqueIdentifierFor, 对未注册进 Forge 物品注册表的对象会返回null,IdUtil直接.getModId()/.getName()而没有 null 检查—— 对第三方未规范注册的物品可能 NPE。