
Mod 配置强制器
Mod Config Enforcer 是一个面向模组作者的实用模组。它允许作者支持服务器设置配置,然后使用他们的模组将这些设置强制应用到连接的客户端上。如果你是用户,你只需要安装这个模组。
查看大图更新:4.0 版引入的改动足以完全废弃之前的版本。任何依赖 2.X 版的模组将不再受支持,必须自行更新。[b]MCE 现在将与 Better Networking 模组冲突,因为这两个模组都修改了 Valheim 的网络子系统。你可以通过 MCE 的新配置文件禁用其网络优化。MCE 现取消了对 Steam 用户的缓冲区限制,因此在使用同样采用 MCE 的模组时,Better Networking 不再是必须的。此变更对于以优化方式支持发送大数据包是必要的。[/b]
更新:3.0 版是一个主版本更新,因为它破坏了向后兼容性。如果你是用户,除非你正在使用的某个依赖 MCE 的模组要求你更新,否则不要更新 MCE。此次更新比 2.0 版带来的破坏性要小得多,最大的好处是模组作者现在可以利用 MCE 同步其配置,而无需对 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 兼容,只需遵循以下示例:
[code]public class Plugin : BaseUnityPlugin { // MCE 处理你的模组需要此字段存在并设置为一个对象 object AutomatedConfigDiscovery; // 此字段将被 MCE 发现并拾取 public ConfigEntry<int> Something; // 此字段将被 MCE 发现并拾取,其值应为你希望服务器同步到客户端的文件的完整路径 public string File_TestFile = "C:\Steam\steamapps\common\Valheim\BepInEx\plugins\testfile.txt"; // 此字段将被 MCE 忽略,因此不会从服务器同步到客户端 [NonSerialized] 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, "A config setting that will be ignored by MCE due to the [NonSerialized] attribute on it"); }
// 这些方法完全是可选的。如果你的模组没有这些方法,它只是在事件发生时不会收到回调 void ServerConfigReceived() {} void ConfigReloaded() {}
// 如果需要文件同步,则需要存在此方法 void FileChanged() {} } [/code] 如果你的 Plugin 类(名称不一定要是“Plugin”,只需继承 BaseUnityPlugin 即可,这也是你的模组能与 Valheim 正常工作的必要条件)不包含名为“AutomatedConfigDiscovery”的字段(拼写必须一致,字母大小写不限),MCE 将不会处理你的模组进行自动配置发现。你可以将此变量设置为你想要的任何对象实例。该变量引用的对象将是 MCE 扫描 ConfigEntry 和模组的回调方法的依据。任何带有 NonSerialized 属性(如上所示)的 ConfigEntry 字段将被 MCE 的自动配置发现忽略。
一个示例如下所示:
[code]public class Plugin : BaseUnityPlugin { // MCE 处理你的模组需要此字段存在并设置为一个对象 public object AutomatedConfigDiscovery; public WhateverYouWantToCallThis ConfigStuff = new WhateverYouWantToCallThis();
public Awake() { // 在 Awake 中设置此变量是为了确保 MCE 的自动配置发现能正确找到你的模组 AutomatedConfigDiscovery = ConfigStuff; // 所有你希望 MCE 发现的 ConfigEntry 字段必须在你的模组的 Awake 结束前绑定 Something = Config.Bind("Section", "Something", 0, "Description"); OtherVar = Config.Bind("Section", "Other Var", true, "A config setting that will be ignored by MCE due to the [NonSerialized] attribute on it"); } }
public class WhateverYouWantToCallThis { // 此字段将被 MCE 发现并拾取 public ConfigEntry<int> Something; // 此字段将被 MCE 忽略,因此不会从服务器同步到客户端 [NonSerialized] public ConfigEntry<bool> OtherVar;
// 这些方法完全是可选的。如果你的模组没有这些方法,它只是在事件发生时不会收到回调。 void ServerConfigReceived() {} void ConfigReloaded() {} } [/code]
对于手动模组注册和使用,以下内容仍然适用:
在你的模组项目中,添加对 ModConfigEnforcer.dll 文件的引用。你的 C# 插件类文件至少应如下所示:
[code]using System.Reflection; using BepInEx; using BepInEx.Logging; using HarmonyLib; using ModConfigEnforcer;
namespace YourMod { [BepInPlugin("you.yourmod", ModName, Plugin.Version)] public class Plugin : BaseUnityPlugin { public const string Version = "1.0"; public const string ModName = "Your Mod"; Harmony _Harmony;
public static ConfigVariable<bool> TestVariable;
public static FileWatcherVariable FileVariable;
private void Awake()
{
ConfigManager.RegisterMod(ModName, Config, ServerConfigReceived, ConfigReloaded);
TestVariable = ConfigManager.RegisterModConfigVariable<bool>(ModName, "Test Variable", true, "General", "Just a test variable, doesn't do anything.", false);
FileVariable = ConfigManager.RegisterModFileWatcher(ModName, Path.Combine(Path.GetDirectoryName(Info.Location), "test.png"), false, FileChanged); _Harmony = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), null); }
private void OnDestroy()
{
if (_Harmony != null) _Harmony.UnpatchSelf();
}
private void ServerConfigReceived() { }
private void ConfigReloaded() { }
private void FileChanged() { } } }
[/code] ConfigVariable<bool> 类型来自 MCE。它管理模组的配置值,根据该值是否应由服务器设置来决定。它使用 C# 泛型类型 - 当前支持以下所有类型(限制是由于 ZPackage 类从数据流中读写的数据类型所导致的): [list] []int []uint []bool []byte []byte[] []char []sbyte []long []ulong []float []double []string []ZPackage []List<string> []Vector3 []Quaternion []ZDOID []HitData [/list] 要在代码中使用你的配置变量,只需调用(使用上面的示例)Plugin.TestVariable.Value
如果你想使用自定义配置方法,这也是支持的。
如果你有任何问题或需要帮助,请在 [url=https://discord.gg/89bBsvK5KC]Valheim 模组开发 Discord 服务器[/url]上找到我。
如果你想查看代码以了解 ModConfigEnforcer 的工作原理,我已经将 [url=https://github.com/Pfhoenix/ModConfigEnforcer]GitHub 仓库设为公开。[/url] 如果你想支持我的工作,请前往 [url=https://www.patreon.com/pfhoenix]我的 Patreon 页面[/url]。
显示 1-12 条,共 12 条
以上为资源接口提供的文件记录。安装时请在客户端确认文件、游戏版本及依赖。
还没有人评论,去客户端里说两句吧。
评论在新手盒子客户端中发表,这里同步展示。