模组配置执行器

创作者: Pfhoenix0
已更新:2025-09-03 01:41:41
363KB

关于此 MOD

模组配置执行器是面向模组作者的实用工具模组。它允许模组作者支持服务器设置配置,然后使用他们的模组将这些设置强制执行到连接的客户端上。如果你是一名用户,你只需要安装这个模组即可。
更新:4.0版本改动较大,已完全淘汰旧版本。任何依赖2.X版本的模组将不再获得支持,需自行更新。 MCE现在将与Better Networking模组冲突,因为两个模组都对Valheim的网络子系统进行了修改。你可以通过MCE的新配置文件禁用其网络优化功能。MCE现在取消了Steam用户的缓冲区限制,使得在使用同样依赖MCE的模组时不再需要Better Networking。此变更是必要的,以便以优化的方式支持大型数据包的发送。

更新:3.0 版本因破坏向后兼容性而成为重大版本变更。如果你是用户,除非你正在使用的某个模组使用了 MCE 并提示你更新,否则不要更新 MCE。这次变更比 2.0 版本的破坏要温和得多,最大的好处是模组作者现在可以利用 MCE 同步他们的配置,而不必硬依赖 MCE。这意味着在单人游玩时,MCE 不再是必需的。模组作者现在只需少量代码,就能让自己的模组“兼容 MCE”,无需强制下载或打包。

Mod Config Enforcer 是一款面向模组作者的实用模组。它允许模组作者支持服务器设置配置,并利用其模组将这些设置强制应用到连接的客户端上。该模组允许模组作者定义既可以是仅本地(无服务器强制)也可以由服务器强制执行的配置变量。

安装:如果你没有使用Vortex,你需要从Thunderstore.io下载并配置BepInEx Valheim模组,然后将ModConfigEnforcer.dll下载并复制到你的Valheim\Bepinex\plugins文件夹中。

如果你下载MCE是因为另一个模组依赖它来执行服务器配置,那么你已经完成了!正确设置后,你会在plugins文件夹中看到两个新创建的DLL文件:ZstdNet.dll和libzstd.dll。这些文件是MCE压缩和解压ZPackage数据所必需的,以实现最佳性能。

---------

仍然支持硬依赖用法,因为这是在MCE中进行更复杂配置管理的最佳方式,但它不再是唯一的选择。MCE v3+现在支持约定式配置,这种方式设置非常简单,非常适合那些仅使用ConfigEntry对象进行Bepinex配置的较小模组。要让模组通过自动配置发现与MCE兼容,只需遵循以下示例:

公共类 插件 : 基础Unity插件
{
// 此字段必须存在并设置为一个对象,MCE 才能处理你的模组
自动化配置发现;
// 此字段将被 MCE 发现并提取
public ConfigEntry<int> Something;
// 此字段将被 MCE 发现并获取,其值应为希望服务器同步到客户端的文件的完整路径
public string File_TestFile = "C:\Steam\steamapps\common\Valheim\BepInEx\plugins\testfile.txt";
// 该字段将被 MCE 忽略,因此不会从服务器同步到客户端
[不可序列化]
public ConfigEntry<bool> OtherVar;

public Awake()
{
// 必须在 Awake 中设置此项,以确保 MCE 的自动配置发现能正确找到你的模组
AutomatedConfigDiscovery = this;
// 所有你希望MCE发现的ConfigEntry字段,必须在你模组的Awake结束前完成绑定
Something = Config.Bind(“Section”, “Something”, 0, “Description”);
OtherVar = Config.Bind("Section", "Other Var", true, "由于其上带有 [NonSerialized] 特性,MCE 将忽略此配置设置");
}

// 这些完全是可选的。如果你没有它们,你的模组就不会在这些事件发生时收到回调
服务器配置已接收
配置已重载

// 如果需要文件同步,则必须存在此方法
void FileChanged() {}
}

如果你的插件类(名称不要求叫“Plugin”,只是它必须继承 BaseUnityPlugin,而这对你的模组与 Valheim 兼容来说本来就是必需的)不包含名为“AutomatedConfigDiscovery”的字段(拼写必须一致,但大小写不限),MCE 就不会对你的模组执行自动配置发现。你可以将该变量设置为任意对象实例。该变量引用的对象将是 MCE 为你的模组扫描 ConfigEntry 和回调方法的目标。任何带有 NonSerialized 特性的 ConfigEntry 字段(如上所示)都会被 MCE 的自动配置发现忽略。

另一个示例如下:

公共类 插件 : 基础Unity插件
{
// 此字段必须存在并设置为对象,MCE 才能处理你的模组
公共对象 自动配置发现;
public WhateverYouWantToCallThis ConfigStuff = new WhateverYouWantToCallThis();

public Awake()
{
// 在Awake中设置此项是必需的,以确保MCE的自动配置发现能正确找到你的模组
自动配置发现 = ConfigStuff;
// 你希望MCE发现的所有ConfigEntry字段都必须在你模组的Awake结束前绑定
Something = Config.Bind(“Section”, “Something”, 0, “Description”);
OtherVar = Config.Bind("Section", "Other Var", true, "此配置设置将因 [NonSerialized] 属性而被 MCE 忽略");
}
}

public class 你想叫它什么都行
{
// 此字段将被 MCE 发现并拾取
public ConfigEntry<int> Something;
// 此字段将被 MCE 忽略,因此不会从服务器同步到客户端
[不可序列化]
public ConfigEntry<bool> OtherVar;

// 这些完全是可选的。如果你没有它们,你的模组只是不会在这些事件发生时收到回调。
服务器配置已接收
配置已重载() {}
}



对于手动注册和使用模组,以下内容仍然适用:

在你的模组项目中,添加对ModConfigEnforcer.dll文件的引用。你的C#插件类文件至少应如下所示:

使用 System.Reflection;
使用BepInEx;
使用BepInEx.Logging;
使用HarmonyLib;
使用 ModConfigEnforcer。

命名空间 YourMod
{
    [BepInPlugin("you.yourmod", ModName, Plugin.Version)]
    public class Plugin : BaseUnityPlugin
    {
        public const string Version = "1.0";
        public const string ModName = "你的模组";
        和谐 _Harmony;

        public static ConfigVariable<bool> TestVariable;
public static FileWatcherVariable FileVariable;

        private void Awake()
        {
            ConfigManager.RegisterMod(ModName, Config, ServerConfigReceived, ConfigReloaded);
            TestVariable = ConfigManager.RegisterModConfigVariable<bool>(ModName, "测试变量", true, "通用", "只是一个测试变量,没有任何作用。", false);
FileVariable = ConfigManager.RegisterModFileWatcher(ModName, Path.Combine(Path.GetDirectoryName(Info.Location), "test.png"), false, FileChanged);
            _Harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), null);
        }

        私有 void OnDestroy()
        {
            如果 (_Harmony != null) _Harmony.UnpatchSelf();
        }

private void ServerConfigReceived()
{
}

私有方法 配置已重新加载
{
}

私有方法 文件已更改
{
}
    }
}

ConfigVariable<bool> 类型来自 MCE。它负责管理你的模组的配置值,具体取决于该值是否应由服务器设置。它使用 C# 泛型类型——目前支持以下任意类型(限制取决于 ZPackage 类能从其数据流中读写哪些数据类型):
  • 整数
  • 无符号整数
  • 布尔值
  • 字节
  • 字节数组
  • 字符
  • 有符号字节
  • 长
  • 无符号长整型
  • 浮点数
  • 双倍
  • 字符串
  • ZPackage
  • 列表<字符串>
  • 三维向量
  • 四元数
  • ZDOID
  • 命中数据

要在代码中使用你的配置变量,只需调用(使用上面的示例)Plugin.TestVariable.Value

如果你也想使用自定义配置方式,同样支持。

如有任何疑问或需要帮助,请在以下平台找到我 英灵神殿模组Discord服务器.

如果你想查看代码以了解ModConfigEnforcer的工作原理,我已经把 GitHub 仓库已公开。

如果你想支持我的作品,请前往 我的Patreon页面.

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!