public void AddOption(Mod mod, int groupIdx, ISubMod option, int priority = 0) { if (option is not SubMod o) { return; } if (mod._groups[groupIdx].Count > 63) { PluginLog.Error( $"Could not add option {option.Name} to {mod._groups[ groupIdx ].Name} for mod {mod.Name}, " + "since only up to 64 options are supported in one group."); return; } switch (mod._groups[groupIdx]) { case SingleModGroup s: s.OptionData.Add(o); break; case MultiModGroup m: m.PrioritizedOptions.Add((o, priority)); break; } ModOptionChanged.Invoke(ModOptionChangeType.OptionAdded, mod, groupIdx, mod._groups[groupIdx].Count - 1, -1); }
// The default mod contains setting-independent sets of file replacements, file swaps and meta changes. // Every mod has an default mod, though it may be empty. private void SaveDefaultMod() { var defaultFile = DefaultFile; using var stream = File.Exists(defaultFile) ? File.Open(defaultFile, FileMode.Truncate) : File.Open(defaultFile, FileMode.CreateNew); using var w = new StreamWriter(stream); using var j = new JsonTextWriter(w); j.Formatting = Formatting.Indented; var serializer = new JsonSerializer { Formatting = Formatting.Indented, }; ISubMod.WriteSubMod(j, serializer, _default, ModPath, 0); }