diff --git a/MiraAPI/MiraApiPlugin.cs b/MiraAPI/MiraApiPlugin.cs
index f6364d9..88af5e7 100644
--- a/MiraAPI/MiraApiPlugin.cs
+++ b/MiraAPI/MiraApiPlugin.cs
@@ -32,6 +32,9 @@ public partial class MiraApiPlugin : BasePlugin, IMiraPlugin
///
public string OptionsTitleText => "MiraAPI";
+ ///
+ public bool ShowInSettings => false;
+
///
/// Gets a value indicating whether the current device is running Starlight (on mobile).
///
diff --git a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs
index 89e6f57..c9a6379 100644
--- a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs
+++ b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs
@@ -199,7 +199,7 @@ internal static class GameSettingMenuPatches
{
SaveScrollPositions(__instance);
SelectedModIdx += 1;
- if (SelectedModIdx > MiraPluginManager.Instance.RegisteredPlugins.Length)
+ if (SelectedModIdx > MiraPluginManager.Instance.ConfigurablePlugins.Length)
{
SelectedModIdx = 0;
}
@@ -220,7 +220,7 @@ internal static class GameSettingMenuPatches
SelectedModIdx -= 1;
if (SelectedModIdx < 0)
{
- SelectedModIdx = MiraPluginManager.Instance.RegisteredPlugins.Length;
+ SelectedModIdx = MiraPluginManager.Instance.ConfigurablePlugins.Length;
}
UpdateText(__instance, __instance.GameSettingsTab, __instance.RoleSettingsTab);
@@ -352,7 +352,7 @@ internal static class GameSettingMenuPatches
_modifierBtnOgPos = _modifiersButton.transform.localPosition;
- foreach (var plugin in MiraPluginManager.Instance.RegisteredPlugins)
+ foreach (var plugin in MiraPluginManager.Instance.ConfigurablePlugins)
{
PresetManager.LoadPresets(plugin);
}
@@ -399,17 +399,17 @@ internal static class GameSettingMenuPatches
{
if (_text is not null && SelectedModIdx == 0)
{
- _text.text = $"(Page 0/{MiraPluginManager.Instance.RegisteredPlugins.Length})\nDefault";
+ _text.text = $"(Page 0/{MiraPluginManager.Instance.ConfigurablePlugins.Length})\nDefault";
_text.fontSizeMax = 3.2f;
SelectedMod = null;
}
else if (_text is not null)
{
_text.fontSizeMax = 2.3f;
- SelectedMod = MiraPluginManager.Instance.RegisteredPlugins[SelectedModIdx - 1];
+ SelectedMod = MiraPluginManager.Instance.ConfigurablePlugins[SelectedModIdx - 1];
var name = SelectedMod.MiraPlugin.OptionsTitleText;
- _text.text = $"(Page {SelectedModIdx}/{MiraPluginManager.Instance.RegisteredPlugins.Length})\n" + name[..Math.Min(name.Length, 25)];
+ _text.text = $"(Page {SelectedModIdx}/{MiraPluginManager.Instance.ConfigurablePlugins.Length})\n" + name[..Math.Min(name.Length, 25)];
}
bool replaceWithModifiers = true;
diff --git a/MiraAPI/Patches/Options/LobbyViewPanePatches.cs b/MiraAPI/Patches/Options/LobbyViewPanePatches.cs
index 94f510a..65d34d7 100644
--- a/MiraAPI/Patches/Options/LobbyViewPanePatches.cs
+++ b/MiraAPI/Patches/Options/LobbyViewPanePatches.cs
@@ -26,7 +26,7 @@ public static class LobbyViewPanePatches
private static MiraPluginInfo? SelectedMod => SelectedModIdx == 0
? null
- : MiraPluginManager.Instance.RegisteredPlugins[SelectedModIdx - 1];
+ : MiraPluginManager.Instance.ConfigurablePlugins[SelectedModIdx - 1];
private static PassiveButton? ModifiersTabButton { get; set; }
@@ -76,7 +76,7 @@ public static class LobbyViewPanePatches
(UnityAction)(() =>
{
SelectedModIdx += 1;
- if (SelectedModIdx > MiraPluginManager.Instance.RegisteredPlugins.Length)
+ if (SelectedModIdx > MiraPluginManager.Instance.ConfigurablePlugins.Length)
{
SelectedModIdx = 0;
}
diff --git a/MiraAPI/PluginLoading/IMiraPlugin.cs b/MiraAPI/PluginLoading/IMiraPlugin.cs
index e6b2dbb..e1a7ef3 100644
--- a/MiraAPI/PluginLoading/IMiraPlugin.cs
+++ b/MiraAPI/PluginLoading/IMiraPlugin.cs
@@ -12,6 +12,11 @@ public interface IMiraPlugin
///
string OptionsTitleText { get; }
+ ///
+ /// Gets the value indicating if the mod appears in the settings menu.
+ ///
+ public virtual bool ShowInSettings => true;
+
///
/// Gets the name for the first custom category in the game options menu, if any.
///
diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs
index 5d16945..91a660c 100644
--- a/MiraAPI/PluginLoading/MiraPluginManager.cs
+++ b/MiraAPI/PluginLoading/MiraPluginManager.cs
@@ -34,8 +34,10 @@ namespace MiraAPI.PluginLoading;
public sealed class MiraPluginManager
{
private readonly Dictionary _registeredPlugins = [];
+ private readonly Dictionary _configurablePlugins = [];
internal MiraPluginInfo[] RegisteredPlugins { get; private set; } = null!;
+ internal MiraPluginInfo[] ConfigurablePlugins { get; private set; } = null!;
internal Dictionary> QueuedRoleRegistrations { get; } = [];
internal static MiraPluginManager Instance { get; private set; } = new();
@@ -236,6 +238,10 @@ public sealed class MiraPluginManager
QueuedRoleRegistrations.Add(info, roles);
_registeredPlugins.Add(assembly, info);
+ if (miraPlugin.ShowInSettings)
+ {
+ _configurablePlugins.Add(assembly, info);
+ }
info.SavePublicCollections();
PresetManager.CreateDefaultPreset(info);
@@ -250,6 +256,7 @@ public sealed class MiraPluginManager
// Cache all the registered plugins into an array for easy access
RegisteredPlugins = [.. _registeredPlugins.Values];
+ ConfigurablePlugins = [.. _configurablePlugins.Values];
ModifierManager.Modifiers = new ReadOnlyCollection(ModifierManager.InternalModifiers);