diff --git a/MiraAPI/Patches/Options/GameSettingMenuPatches.cs b/MiraAPI/Patches/Options/GameSettingMenuPatches.cs
index 995da8e..d9cc5fb 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.RegisteredOptionablePlugins.Length)
{
SelectedModIdx = 0;
}
@@ -220,7 +220,7 @@ internal static class GameSettingMenuPatches
SelectedModIdx -= 1;
if (SelectedModIdx < 0)
{
- SelectedModIdx = MiraPluginManager.Instance.RegisteredPlugins.Length;
+ SelectedModIdx = MiraPluginManager.Instance.RegisteredOptionablePlugins.Length;
}
UpdateText(__instance, __instance.GameSettingsTab, __instance.RoleSettingsTab);
@@ -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.RegisteredOptionablePlugins.Length})\nMain";
_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.RegisteredOptionablePlugins[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.RegisteredOptionablePlugins.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 c543447..5a4460d 100644
--- a/MiraAPI/Patches/Options/LobbyViewPanePatches.cs
+++ b/MiraAPI/Patches/Options/LobbyViewPanePatches.cs
@@ -25,7 +25,7 @@ public static class LobbyViewPanePatches
private static MiraPluginInfo? SelectedMod => SelectedModIdx == 0
? null
- : MiraPluginManager.Instance.RegisteredPlugins[SelectedModIdx - 1];
+ : MiraPluginManager.Instance.RegisteredOptionablePlugins[SelectedModIdx - 1];
private static PassiveButton? ModifiersTabButton { get; set; }
@@ -75,7 +75,7 @@ public static class LobbyViewPanePatches
(UnityAction)(() =>
{
SelectedModIdx += 1;
- if (SelectedModIdx > MiraPluginManager.Instance.RegisteredPlugins.Length)
+ if (SelectedModIdx > MiraPluginManager.Instance.RegisteredOptionablePlugins.Length)
{
SelectedModIdx = 0;
}
@@ -99,7 +99,7 @@ public static class LobbyViewPanePatches
SelectedModIdx -= 1;
if (SelectedModIdx < 0)
{
- SelectedModIdx = MiraPluginManager.Instance.RegisteredPlugins.Length;
+ SelectedModIdx = MiraPluginManager.Instance.RegisteredOptionablePlugins.Length;
}
Refresh(__instance);
diff --git a/MiraAPI/PluginLoading/IMiraPlugin.cs b/MiraAPI/PluginLoading/IMiraPlugin.cs
index 05470cc..a29dd4c 100644
--- a/MiraAPI/PluginLoading/IMiraPlugin.cs
+++ b/MiraAPI/PluginLoading/IMiraPlugin.cs
@@ -8,6 +8,11 @@ namespace MiraAPI.PluginLoading;
///
public interface IMiraPlugin
{
+ ///
+ /// Gets or sets a value indicating whether to display the plugin in the options menu.
+ ///
+ public virtual bool DisplayOnOptionsMenu => true;
+
///
/// Gets the name to display on the options menu.
///
diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs
index 4639b4f..171ab90 100644
--- a/MiraAPI/PluginLoading/MiraPluginManager.cs
+++ b/MiraAPI/PluginLoading/MiraPluginManager.cs
@@ -34,6 +34,10 @@ public sealed class MiraPluginManager
internal MiraPluginInfo[] RegisteredPlugins { get; private set; } = null!;
+ private readonly Dictionary _registeredOptionablePlugins = [];
+
+ internal MiraPluginInfo[] RegisteredOptionablePlugins { get; private set; } = null!;
+
internal Dictionary> QueuedRoleRegistrations { get; } = [];
internal static MiraPluginManager Instance { get; private set; } = new();
@@ -127,6 +131,10 @@ public sealed class MiraPluginManager
QueuedRoleRegistrations.Add(info, roles);
_registeredPlugins.Add(assembly, info);
+ if (miraPlugin.DisplayOnOptionsMenu)
+ {
+ _registeredOptionablePlugins.Add(assembly, info);
+ }
info.SavePublicCollections();
PresetManager.CreateDefaultPreset(info);
@@ -141,6 +149,7 @@ public sealed class MiraPluginManager
// Cache all the registered plugins into an array for easy access
RegisteredPlugins = [.. _registeredPlugins.Values];
+ RegisteredOptionablePlugins = [.. _registeredOptionablePlugins.Values];
ModifierManager.Modifiers = new ReadOnlyCollection(ModifierManager.InternalModifiers);
};