MyEssentialsCore

基本信息

属性 值
类名 myessentials.MyEssentialsCore
modid MyEssentials-Core(含连字符)
注解 @Mod(modid="MyEssentials-Core", name="MyEssentials-Core", version="GRADLETOKEN_VERSION", dependencies="required-after:Forge", acceptableRemoteVersions="*")
生命周期 preInit(仅此一个)
启用版本 Minecraft 1.7.10

功能

mod 主类。只做一件事:在 preInit 里初始化配置、本地化与三个管理器单例。

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent ev) {
    LOG = ev.getModLog();
    Constants.CONFIG_FOLDER = ev.getModConfigurationDirectory().getPath() + "/MyEssentials-Core/";
    Constants.DATABASE_FOLDER = ev.getModConfigurationDirectory().getParent() + "/databases/";
    Config.instance.init(Constants.CONFIG_FOLDER + "Core.cfg", "MyEssentials-Core");
    LOCAL = new Local(Constants.CONFIG_FOLDER + "localization/",
                       Config.instance.localization.get(),
                       "/myessentials/localization/",
                       MyEssentialsCore.class);
    LocalManager.register(LOCAL, "myessentials");
    FMLCommonHandler.instance().bus().register(PlayerTracker.instance);
    MinecraftForge.EVENT_BUS.register(PlayerTracker.instance);
    FMLCommonHandler.instance().bus().register(ToolManager.instance);
    MinecraftForge.EVENT_BUS.register(ToolManager.instance);
    FMLCommonHandler.instance().bus().register(SignManager.instance);
    MinecraftForge.EVENT_BUS.register(SignManager.instance);
}

实现要点

  • 没有 init / postInit / serverStarting,全部初始化集中在 preInit。
  • version = "GRADLETOKEN_VERSION" 是不会被替换的占位符: gradle.properties 的 replaceGradleTokenInFile = BetterBarrels.java 指向一个本仓库不存在的文件,generateGradleTokenClass 也为空。 故正式 jar 的版本字面量就是 GRADLETOKEN_VERSION。
  • Constants.DATABASE_FOLDER 用 getModConfigurationDirectory().getParent() + "/databases/" 即 <游戏目录>/databases/(与 config 同级,非 config 的子目录)。
  • LocalManager.register(LOCAL, "myessentials") 的命名空间是 myessentials(小写、无连字符),与 modid MyEssentials-Core 不同。
  • PlayerTracker / ToolManager / SignManager 三个单例 各注册两次(FML 总线 + Forge 总线),源码中无区分说明。
  • 源码注释写「The localization can simply take the whole config instance」, 但实际传的是 Config.instance.localization.get()(已取值的字符串), 与注释不符。

相关条目