依赖与集成
基本信息
| 属性 | 值 |
|---|---|
| 依赖声明文件 | dependencies.gradle(唯一的运行时依赖来源)、gradle.properties、addon.gradle |
| 构建插件 | com.gtnewhorizons.gtnhconvention(build.gradle.kts)、com.gtnewhorizons.gtnhsettingsconvention 2.0.26(settings.gradle.kts) |
| 硬运行时依赖数 | 2(GTNHLib、MCGPU) |
| 编译期依赖数 | 3(ASM、JetBrains Annotations、Lombok) |
| 仅开发运行时依赖数 | 1(NotEnoughItems,不随模组发布) |
| 已注释停用的依赖 | 1(CubicChunks,dependencies.gradle 内 // 注释) |
| FML 容器数 | 2(databack + databackcore) |
@Mod 注解类数 |
1 |
硬运行时依赖
以下两条是 dependencies.gradle 中唯一的 implementation 声明,即随 jar 一起发布、运行时必须存在:
| 依赖 | 坐标 | 源码行 | 用途 |
|---|---|---|---|
| GTNHLib | com.github.GTNewHorizons:GTNHLib:99.99.99-dev:dev |
dependencies.gradle:8 |
事件总线(com.gtnewhorizon.gtnhlib.eventbus.EventBusSubscriber,全仓 43 个文件 import com.gtnewhorizon.gtnhlib)、配置系统(com.gtnewhorizon.gtnhlib.config.Config / ConfigurationManager)、IMod / IModList 数据结构 |
| MCGPU | com.github.GTNewHorizons:MCGPU:v0.1.0:dev(显式 exclude GTNHLib,避免与上一行重复) |
dependencies.gradle:9-11 |
密度函数的 GPU 加速执行。源码 import mcgpu.core.hwaccel.buffer.BufferDataType 等,命中 16 个文件,涵盖 worldgen/dag/codegen/VulkanCodeGen、DensityFunctionExecutor、GpuChunkCache 等 |
编译期依赖(不随 jar 发布)
| 依赖 | 坐标 | 配置 | 源码行 |
|---|---|---|---|
| ASM | org.ow2.asm:asm:5.0.3 |
compileOnly |
dependencies.gradle:13 |
| JetBrains Annotations | org.jetbrains:annotations:26.0.2 |
compileOnly |
dependencies.gradle:14 |
| Lombok | org.projectlombok:lombok:1.18.34 |
compileOnly + annotationProcessor |
dependencies.gradle:15-16 |
UniMixins
代码 import com.gtnewhorizon.gtnhmixins.IEarlyMixinLoader(DatabackCore.java:7)、com.gtnewhorizon.gtnhmixins.builders.IMixins(DatabackCore.java:8、Mixins.java:3)、com.gtnewhorizon.gtnhmixins.builders.ITargetMod(DBMods.java:8),即运行时依赖 UniMixins。
dependencies.gradle 中没有 UniMixins 的显式声明 —— 它由 com.gtnewhorizons.gtnhconvention 插件依据 usesMixins = true 注入。gradle.properties:171 与 :185 两处注释亦明写「UniMixins is automatically set as a required dependency if usesMixins = true.」
databackcore:第二个 FML 容器
本 jar 通过 IFMLLoadingPlugin 额外注册了一个容器,它不是 @Mod:
| 属性 | 值 |
|---|---|
| 容器类 | databack.DatapackModContainer(extends DummyModContainer implements WorldAccessContainer) |
| modid | databackcore |
| 显示名 | Databack Core |
| parent | databack |
| 依赖声明 | meta.dependencies.add(new DefaultArtifactVersion("databack", Tags.VERSION)) |
| 注册来源 | DatabackCore.getModContainerClass() 返回该类名 |
其唯一职责是实现 WorldAccessContainer,在存档读写时接管数据包状态(getDataForWriting / readData,DatapackModContainer.java:42-50)。registerBus 直接返回 true(:37-39),即不注册任何事件总线监听。
本 wiki 的全部条目均以 modid databack(Databack.MODID = "databack",Databack.java:17)为准;databackcore 无独立内容面,不单列条目。
未声明却被使用的库:ModularUI 2
DebugOverlayScreen import 了 10 个 com.cleanroommc.modularui.* 类(DebugOverlayScreen.java:9-18),但:
| 检查位置 | cleanroommc / modularui 命中数 |
|---|---|
Databack gradle.properties / dependencies.gradle / addon.gradle / build.gradle.kts / settings.gradle.kts |
0 |
GTNHLib dependencies.gradle |
0 |
GTNHExtLib dependencies.gradle |
0 |
因此 ModularUI 2 不是 Databack 声明的依赖,而是运行时环境提供的。这正是「不能从邻居模组推断依赖」的反例:本 wiki 中许多模组以 ModularUI 2 为 GUI 库,但 Databack 自己的 gradle 文件里没有它。
可选集成:Cubic Chunks
| 项 | 状态 |
|---|---|
| gradle 声明 | 已注释:// runtimeOnlyNonPublishable("com.cardinalstar.cubicchunks:CC2:99.99.99:dev")(dependencies.gradle:20) |
| 目标模组枚举 | DBMods.CUBIC_CHUNKS,modid cubicchunks,coreModClass com.cardinalstar.cubicchunks.CubicChunksCore(DBMods.java:14) |
Mixins 中是否有对应组 |
无 —— 11 个枚举组均未以 DBMods.CUBIC_CHUNKS 为目标 |
| 唯一使用点 | CustomHeightmap.getTop 中 if (!DBMods.CUBIC_CHUNKS.isModLoaded() && baseTop < 0) return 0;(CustomHeightmap.java:26) |
另有 @Optional.Method(modid = "cubicchunks") 的 getTopCC 方法(CustomHeightmap.java:34-35) |
即:这是一个软集成 —— 装了 Cubic Chunks 时高度图向下扫描不再在 y<0 处提前返回;未装时走原版行为。不安装 Cubic Chunks 不影响模组运行。
检测到但未使用的模组:Et Futurum
CommonProxy.preInit 中 isEFRLoaded = Loader.isModLoaded("etfuturum");(CommonProxy.java:75)。全仓 grep -rn 'isEFRLoaded\|etfuturum' src/main/java/ 仅命中声明行(:66)与赋值行(:75)两处,无任何读取方。
因此 Databack 没有 Et Futurum 集成,isEFRLoaded 是无读取方的死字段(详见 配置项)。
NotEnoughItems:仅开发期,代码中 0 引用
dependencies.gradle:18 声明 runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.111-GTNH:dev") —— runtimeOnlyNonPublishable 意味着不写入发布产物的依赖信息。
代码侧按词边界复查:
grep -rnE '\bNEI\b|\bnotenoughitems\b|API_LoadNEIItemNBT' src/main/java/ → 0 命中
即 NEI 集成为 0,该依赖只用于开发运行(REEI 兼容测试等),与运行时功能无关。
同样以词边界复查为 0 命中:
| 检查项 | 命令 | 结果 |
|---|---|---|
| Waila | grep -rnE '\bWaila\b|\bwaila\b' src/main/java/ |
0 |
| JEI | grep -rn '\bJEI\b' src/main/java/ |
0 |
资源包格式
| 资源 | pack_format | 说明 |
|---|---|---|
src/main/resources/pack.mcmeta |
1 | 模组资源包,描述为 Resources used for the Databack mod |
misc/test-packs/minecraft/pack.mcmeta |
48 | 开发用测试包,描述为空字符串 |
| 运行时用户数据包 | 由加载器强制为 48 | LOADER_FORMAT_VERSION = 48(DatapackLoader.java:62) |
mcmod.info 仍是 ExampleMod 模板未修改:description 为 "An example mod for Minecraft 1.7.10 with Forge focused on a stable setup.",url 为 https://github.com/SinTh0r4s/MyMod,authorList 为 ["SinTho0r4s"],requiredMods 与 dependencies 均为空数组。modid / name / version / mcversion 由 Gradle 占位符 ${modId} / ${modName} / ${modVersion} / ${minecraftVersion} 填充。即模组内没有任何真实的依赖声明写在 mcmod.info 里。
一处未完成接线:ModernWorldType
ModernWorldType(databack.common.worldgen.ModernWorldType)是一个 WorldType 子类,名称 modern,getChunkProvider 返回 ModernWorldGenerator(ModernWorldType.java:7-22),由 CommonProxy.preInit 调 ModernWorldType.init() 触发(CommonProxy.java:99)。
但 init() 的方法体只有一行注释 // loads class(ModernWorldType.java:15-17),即只做类加载。全仓核查:
| 检查 | 命令 | 结果 |
|---|---|---|
| 原版注册调用 | grep -rn 'registerWorldType|getWorldType|WorldType\.' src/main/java/ |
仅命中 CommonProxy.java:99 的 ModernWorldType.init() 一行 |
| WorldType 的 Mixin | grep -rln 'Mixin(.*WorldType' src/main/java/ |
0 |
| WorldProvider 接线 | grep -rn 'WorldProvider|getChunkProvider' src/main/java/ |
0 |
DimensionManager.registerDimension |
grep -rn 'DimensionManager\.' src/main/java/ |
仅 getWorld / getWorlds 调用,无 registerDimension |
DimensionList 是否创建生成器 |
grep -n 'ChunkGenerator|createChunkGenerator|ModernWorld|registerDimension' DimensionList.java |
0 —— 它只是 JsonDatapackTypeHandler<Dimension> 的数据容器 |
结论:ModernWorldType 从未注册进 1.7.10 的 WorldType ID 表,也没有任何 WorldProvider 把 ModernWorldGenerator 接到实际世界上。ModernWorldGenerator 全仓只在 ModernWorldType.java:21 被实例化一次。因此 MCGPU 加速的世界生成代码存在且完整,但在当前源码状态下没有进入正常游戏流程的注册路径。此处仅陈述源码事实,未实机运行验证。
相关条目
- 扩展点 - 16 个 Mixin 类与 10 个对外事件
- Databack 配置项 -
isEFRLoaded死字段的证据 - 数据包格式与优先级 - pack.mcmeta 与原版数据包下载