👍模组依赖

NML中模组依赖分为硬依赖和软依赖两种

硬依赖

也称必需依赖, 只有当所有硬依赖的模组均加载了才会被加载.

硬依赖在mod.json中声明硬依赖于某些模组, 而后在项目文件中添加对硬依赖的模组的引用即可(让IDE给出正常的代码分析).

软依赖

也称可选依赖, 当软依赖模组不存在时也能被加载. 如果带软依赖模组时编译失败后, 会尝试取消依赖于所有软依赖模组后再次编译.

为了在软依赖的模组缺失时仍能正常编译运行, NML采用宏来控制编译.

当软依赖模组存在时, NML在编译时会加入软依赖模组的ID作为宏, 不存在时则不会添加.

下面的代码是在示例模组(软依赖于"一米_中文名")中, 根据"一米_中文名"模组是否存在来选择添加命名器的方式

// 用宏包裹所有"可选"依赖. "一米_中文名"是这个可选依赖的模组id. Chinese_Name是模组"一米_中文名"提供的命名空间.
using System.IO;
#if 一米_中文名
using Chinese_Name;
#endif

namespace ExampleMod.Content;

internal static class ExampleNameGenerators
{
    public static void init()
    {
        // 如果模组"一米_中文名"被编译, 初始化中文名生成器. 否则, 初始化原版名字生成器.
#if 一米_中文名
        init_chinese_name_generators();
#else
        init_vanilla_name_generators();
#endif
    }
#if 一米_中文名
    private static void init_chinese_name_generators()
    {
        // 因为下面的方法和类是由模组"一米_中文名"提供的, 你应该用宏包裹它们.
        WordLibraryManager.SubmitDirectoryToLoad(Path.Combine(ExampleModMain.Instance.GetDeclaration().FolderPath,
            "additional_resources/word_libraries"));
        CN_NameGeneratorLibrary.SubmitDirectoryToLoad(Path.Combine(ExampleModMain.Instance.GetDeclaration().FolderPath,
            "additional_resources/name_generators"));
    }
#endif
    private static void init_vanilla_name_generators()
    {
        // 暂时没有内容
    }
}

在IDE中, 你也需要添加对依赖模组的引用, 除此之外, 你还需要在项目文件中添加模组ID为预定义常量(这一行都是针对你要使用完整IDE功能的情况)

相关示例代码

mod.json配置示例

预定义常量配置示例

如何添加对依赖模组的引用

相关示例

DLL引用

引用在worldbox_Data/StreamingAssets/mods/NML/CompiledMods中, 名为对应模组ID的.dll文件

项目引用

如果发布的依赖模组中包含了项目文件, 可以直接引用依赖模组的项目文件.

Last updated