mod 元信息与打包数据

[!INFO] Git Commit: d3dbd5f | Updated: 2026-10-01

基本信息

属性 值
modid croploadcore
mod 名称 CropLoadCore
@Mod 类 com.github.bartimaeusnek.croploadcore.CropLoadCore
作者 bartimaeusnek(LOKKO12)
接受版本 Minecraft 1.7.10 / Forge 10.13.4.1614(无 acceptedMinecraftVersions 限定)
core mod 类 ASM.CropStickTransformer_plugin(coreModClass)
源码文件总数 20 个 .java
自有方块 / 物品 / 实体 / 指令 0 / 0 / 0 / 0
配置文件 无(本 mod 不创建任何配置文件)

mcmod.info 的描述是 Core Mod for LOKKO12's Mods.——本 mod 是作者其它作物 mod (BerriesPP,仓库中以 berriespp 形式出现在 core mod 元信息里)共用的底层库, 自身不注册任何游戏内容。

modid 的来源

modid 在两处一致,没有使用已废弃的 gradleTokenModId 占位符:

  • CropLoadCore.java:32 — public static final String MODID = "croploadcore";
  • gradle.properties — modId = croploadcore

gradle.properties 里 gradleTokenModId =(空值)且 generateGradleTokenClass =(空值), 而 replaceGradleTokenInFile = CropLoadCore.java——只替换 VERSION 一个字段:

public static final String VERSION = "GRADLETOKEN_VERSION";   // CropLoadCore.java:34

运行时可读的 modid 只有 croploadcore。注意大小写:modid 与 mod 名称都是小写 croploadcore / CropLoadCore,但 ASM 容器另有一个 modid 为 CropLoadCoreASM(首字母大写)的虚拟容器, 两者不要混淆,详见 core mod 与 ASM 容器。

@Mod 依赖声明

CropLoadCore.java:16-28 声明了 14 条软依赖(全部是 after:,注意每个字符串都带一个前导空格, FML 会自行 trim,不影响解析):

after:witchery   after:Ztones        after:GalacticraftCore  after:GalacticraftPlanets
after:IC2        after:Mantle         after:Natura            after:TConstruct
after:BiomesOPlenty  after:Thaumcraft after:ExtraTrees        after:gregtech
after:dreamcraft after:thaumicbases

全部是 after: 而没有一条 required-after:,因此本 mod 可以在只装原版 + IC2 的环境里加载。 这些软依赖的实际用途是保证 mod 加载顺序,好让 OreDict.register() 运行在本 mod 加载的 其它作物/土壤 mod 之后。

声明与实现的三处不一致

ModsLoaded 实际探测的 modid 与 @Mod 依赖列表并不一致:

ModsLoaded 字段 探测的 modid 是否在 @Mod 依赖列表中
GT5uNH gregtech_nh ❌ 列表里是 gregtech
PHC harvestcraft ❌ 未声明
GTpp miscutils ❌ 未声明

ModsLoaded.java:25-28。其中 GTpp(GT++)探测到后会完全跳过其余 7 项逐条日志 (ModsLoaded.java:30、55),改输出一行 GT++ installed, the logs will show you the installed Mods.。 harvestcraft 与 miscutils 未出现在依赖声明中,意味着它们的加载顺序不受本 mod 保证—— OreDict 中也确实没有对应的 Register 类,二者仅用于日志。

事件处理

只有两个 @EventHandler(CropLoadCore.java:40-48):

阶段 方法 动作
preInit preInit ModsLoaded.check_init("bartimaeusnek's mods") — 仅打印日志
init Init OreDict.register() — 全部实际功能

没有 postInit,也没有 FMLServerStartingEvent 之类的服务器事件。本 mod 不注册指令、 不注册 GUI、不处理配方。mc_server 侧完全无感。

@Instance 的取值与 modid 不一致

@Mod(modid = CropLoadCore.MODID, ...)   // modid = "croploadcore"
public class CropLoadCore {
    @Instance(value = "CropLoadCore")   // ← 用的是 mod 名称,不是 modid
    public static CropLoadCore instance;
}

CropLoadCore.java:13 与 :37。@Instance 的 value 填的是 "CropLoadCore"(首字母大写的 mod 名称), 而 @Mod 声明的 modid 是 "croploadcore"。FML 1.7.10 通过 mod 列表按 id 查找实例,两个字符串不一致。

该字段的唯一用途是供下游 mod 访问本 mod 实例(作为库),本仓库内 20 个源文件中 没有任何一处读取 CropLoadCore.instance(已 grep 确认,全仓库仅 :38 的声明本身)。 因此即使注入失败也不影响本 mod 自身功能,但下游若依赖 instance 会拿到 null。

dependencies.gradle

全部 7 条依赖都是 compileOnly,没有任何一条是 api 或 implementation:

compileOnly('com.github.GTNewHorizons:Natura:2.8.9:dev') {transitive=false}
compileOnly('com.github.GTNewHorizons:TinkersConstruct:1.14.6-GTNH:dev') {transitive=false}
compileOnly('com.github.GTNewHorizons:ThaumicBases:1.9.2:dev') {transitive=false}
compileOnly('thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev') {transitive=false}
compileOnly("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev")
compileOnly(deobfCurse('witchery-69673:2234410'))
compileOnly(rfg.deobf("curse.maven:biomes-o-plenty-220318:2499612"))

Natura / TConstruct / ThaumicBases / Thaumcraft / Witchery / Biomes O’ Plenty 的对应 Register 类 都直接 import 它们的类(如 mods.natura.common.NContent、tconstruct.world.TinkerWorld), 因此运行期若这些 mod 缺失,只要相应 Register 未被触发就不会触发类加载错误—— OreDictRegistrator.register() 用 Loader.isModLoaded 做了前置检查(见 矿辞典注册)。

IC2 是唯一在源码中被硬依赖的 mod(ic2.core.crop.BlockCrop 等),但它没有出现在 @Mod 的依赖列表中,只作为 compileOnly 出现在依赖表,且通过 CropLoadCoreASM 的 getDependencies() 声明为必需(见 core mod 与 ASM 容器)。

打包数据

资源目录仅 3 个文件:mcmod.info、mixins.croploadcore.json、mixins.croploadcore.late.json。 没有语言文件、没有 access transformer、没有 assets 目录——本 mod 不向玩家显示任何本地化文本 (唯一的报错字符串 POWAOFCAPLSLOCK 是日志,不进游戏)。详见 IC2 作物 Mixin。