依赖与集成

基本信息

属性 值
依赖声明文件 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 加速的世界生成代码存在且完整,但在当前源码状态下没有进入正常游戏流程的注册路径。此处仅陈述源码事实,未实机运行验证。

相关条目