diff --git a/BepisModSettings/BepisModSettings.csproj b/BepisModSettings/BepisModSettings.csproj index d45ee03..b10dd63 100644 --- a/BepisModSettings/BepisModSettings.csproj +++ b/BepisModSettings/BepisModSettings.csproj @@ -1,7 +1,7 @@  - 1.1.1 + 1.2.0 ResoniteModding net9.0 Bepis Mod Settings diff --git a/BepisModSettings/ConfigAttributes/CustomDataFeed.cs b/BepisModSettings/ConfigAttributes/CustomDataFeed.cs index 978ddb1..4586130 100644 --- a/BepisModSettings/ConfigAttributes/CustomDataFeed.cs +++ b/BepisModSettings/ConfigAttributes/CustomDataFeed.cs @@ -14,17 +14,19 @@ public sealed class CustomDataFeed(DataFeedMethod action) public static DataFeedMethod GetCustomFeedMethod(ConfigEntryBase config) { if (config?.Description?.Tags == null) return null; - foreach (var tag in config.Description.Tags) + foreach (object tag in config.Description.Tags) { - if(tag is CustomDataFeed customDataFeed) + if (tag is CustomDataFeed customDataFeed) { return customDataFeed._action; } - if(tag is Func, IReadOnlyList, IAsyncEnumerable> func) + + if (tag is Func, IReadOnlyList, IAsyncEnumerable> func) { - return (DataFeedMethod) Delegate.CreateDelegate(typeof(DataFeedMethod), func.Target, func.Method); + return (DataFeedMethod)Delegate.CreateDelegate(typeof(DataFeedMethod), func.Target, func.Method); } } + return null; } } \ No newline at end of file diff --git a/BepisModSettings/ConfigAttributes/HiddenConfig.cs b/BepisModSettings/ConfigAttributes/HiddenConfig.cs index 2d71914..2bc424d 100644 --- a/BepisModSettings/ConfigAttributes/HiddenConfig.cs +++ b/BepisModSettings/ConfigAttributes/HiddenConfig.cs @@ -3,7 +3,7 @@ namespace BepisModSettings.ConfigAttributes; -public class HiddenConfig +public class HiddenConfig { public static bool IsHidden(ConfigEntryBase config) { diff --git a/BepisModSettings/ConfigAttributes/ProtectedConfig.cs b/BepisModSettings/ConfigAttributes/ProtectedConfig.cs index d039f90..4cddd17 100644 --- a/BepisModSettings/ConfigAttributes/ProtectedConfig.cs +++ b/BepisModSettings/ConfigAttributes/ProtectedConfig.cs @@ -12,17 +12,19 @@ public ProtectedConfig() : this("*") { } public static string GetMask(ConfigEntryBase config) { if (config?.Description?.Tags == null) return null; - foreach (var tag in config.Description.Tags) + foreach (object tag in config.Description.Tags) { - if(tag is ProtectedConfig protectedConfig) + if (tag is ProtectedConfig protectedConfig) { return protectedConfig.MaskString; } - else if(tag as string == "Protected") + + if (tag as string == "Protected") { return "*"; } } + return null; } } \ No newline at end of file diff --git a/BepisModSettings/DataFeeds/BepisPluginPage.cs b/BepisModSettings/DataFeeds/BepisPluginPage.cs index ec83421..95dd328 100644 --- a/BepisModSettings/DataFeeds/BepisPluginPage.cs +++ b/BepisModSettings/DataFeeds/BepisPluginPage.cs @@ -21,12 +21,32 @@ public static class BepisPluginPage { internal static readonly Dictionary, IAsyncEnumerable>> CategoryHandlers = new Dictionary, IAsyncEnumerable>>(); + public static event Func, IAsyncEnumerable> CustomPluginConfigsPages; + internal static async IAsyncEnumerable Enumerate(IReadOnlyList path) { await Task.CompletedTask; string pluginId = path[1]; + if (NetChainloader.Instance.Plugins.Values.All(x => x.Metadata.GUID != pluginId) && pluginId != "BepInEx.Core.Config") + { + if (CustomPluginConfigsPages != null) + { + foreach (Delegate del in CustomPluginConfigsPages.GetInvocationList()) + { + if (del is not Func, IAsyncEnumerable> handler) continue; + + await foreach (DataFeedItem item in handler(path)) + { + yield return item; + } + } + } + + yield break; + } + ConfigFile configFile; ModMeta metadata; @@ -43,10 +63,8 @@ internal static async IAsyncEnumerable Enumerate(IReadOnlyList()?.Company; - var assUrl = resonitePlugin?.Link ?? - plugin.GetType().Assembly.GetCustomAttributes()?.FirstOrDefault(a => a.Key.ToLower().Contains("url"))?.Value; + string assCo = resonitePlugin?.Author ?? plugin.GetType().Assembly.GetCustomAttribute()?.Company; + string assUrl = resonitePlugin?.Link ?? plugin.GetType().Assembly.GetCustomAttributes().FirstOrDefault(a => a.Key.Contains("url", StringComparison.CurrentCultureIgnoreCase))?.Value; configFile = plugin.Config; metadata = new ModMeta(pMetadata.Name, pMetadata.Version.ToString(), pluginId, assCo, assUrl); @@ -102,7 +120,7 @@ internal static async IAsyncEnumerable Enumerate(IReadOnlyList { var slot = syncDelegate?.Slot; @@ -119,191 +137,189 @@ private static async IAsyncEnumerable EnumerateConfigs(ConfigFile // Used for enum config keys. basically you can define a function which will display a subcategory of this category. CategoryHandlers.Clear(); - if (configFile.Count > 0) + HashSet sections = new HashSet(); + List added = new List(); + foreach (ConfigEntryBase config in configFile.Values) { - HashSet sections = new HashSet(); - List added = new List(); - foreach (ConfigEntryBase config in configFile.Values) - { - if (!Plugin.ShowHidden.Value && HiddenConfig.IsHidden(config)) continue; + if (!Plugin.ShowHidden.Value && HiddenConfig.IsHidden(config)) continue; - Type valueType = config.SettingType; + Type valueType = config.SettingType; - string section = config.Definition.Section; - if (sections.Add(section)) + string section = config.Definition.Section; + if (sections.Add(section)) + { + DataFeedResettableGroup configs = new DataFeedResettableGroup(); + configs.InitBase(section, path, null, section); + configs.InitResetAction(a => { - DataFeedResettableGroup configs = new DataFeedResettableGroup(); - configs.InitBase(section, path, null, section); - configs.InitResetAction(a => + Button but = a.Slot.GetComponentInChildren