From ab54c44434f06a7ce80fc3330dec1d3a35108b72 Mon Sep 17 00:00:00 2001 From: XtraCube <72575280+XtraCube@users.noreply.github.com> Date: Sun, 29 Jun 2025 19:57:58 -0400 Subject: [PATCH 1/2] expose custom roles in CustomRoleManager.cs --- MiraAPI/Patches/Roles/GameStartupPatch.cs | 6 +++++- MiraAPI/Roles/CustomRoleManager.cs | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/MiraAPI/Patches/Roles/GameStartupPatch.cs b/MiraAPI/Patches/Roles/GameStartupPatch.cs index 6ab234d..9f88bdd 100644 --- a/MiraAPI/Patches/Roles/GameStartupPatch.cs +++ b/MiraAPI/Patches/Roles/GameStartupPatch.cs @@ -23,7 +23,11 @@ public static class GameStartupPatch _runOnce = true; - if (MiraPluginManager.Instance.QueuedRoleRegistrations.Count <= 0) return; + if (MiraPluginManager.Instance.QueuedRoleRegistrations.Count <= 0) + { + return; + } + foreach (var queue in MiraPluginManager.Instance.QueuedRoleRegistrations) { CustomRoleManager.RegisterRoleTypes(queue.Value, queue.Key); diff --git a/MiraAPI/Roles/CustomRoleManager.cs b/MiraAPI/Roles/CustomRoleManager.cs index 20d61d0..5e1c3ae 100644 --- a/MiraAPI/Roles/CustomRoleManager.cs +++ b/MiraAPI/Roles/CustomRoleManager.cs @@ -35,6 +35,16 @@ public static class CustomRoleManager public static readonly LoadableAsset ImpostorIntroSound = CustomRoleUtils.GetIntroSound(RoleTypes.Impostor)!; + /// + /// Gets the list of custom roles as RoleBehaviour objects. + /// + public static IReadOnlyList CustomRoleBehaviours { get; private set; } = []; + + /// + /// Gets the list of custom roles as ICustomRole objects. + /// + public static IReadOnlyList CustomMiraRoles { get; private set; } = []; + internal static readonly Dictionary CustomRoles = []; internal static readonly Dictionary RoleIds = []; @@ -53,6 +63,9 @@ public static class CustomRoleManager { RoleManager.GhostRoles.Add(role.Role); } + + CustomRoleBehaviours = CustomRoles.Values.ToList(); + CustomMiraRoles = CustomRoles.Values.OfType().ToList(); } internal static void RegisterRoleTypes(List roles, MiraPluginInfo pluginInfo) From 05f132c506e08ae568410a9691cf2839e3139d35 Mon Sep 17 00:00:00 2001 From: XtraCube <72575280+XtraCube@users.noreply.github.com> Date: Sun, 29 Jun 2025 20:03:20 -0400 Subject: [PATCH 2/2] expose modifiers --- MiraAPI/Modifiers/ModifierManager.cs | 8 ++++++++ MiraAPI/PluginLoading/MiraPluginManager.cs | 2 ++ 2 files changed, 10 insertions(+) diff --git a/MiraAPI/Modifiers/ModifierManager.cs b/MiraAPI/Modifiers/ModifierManager.cs index 1b38efd..6aed1ac 100644 --- a/MiraAPI/Modifiers/ModifierManager.cs +++ b/MiraAPI/Modifiers/ModifierManager.cs @@ -21,6 +21,13 @@ public static class ModifierManager /// public static bool MiraAssignsModifiers { get; set; } = true; + /// + /// Gets the list of all registered modifiers. + /// + public static IReadOnlyList Modifiers { get; internal set; } = []; + + internal static List InternalModifiers { get; } = []; + private static readonly Dictionary IdToTypeModifierMap = []; private static readonly Dictionary TypeToIdModifierMap = []; private static readonly Dictionary> PrioritiesToIdsMap = []; @@ -80,6 +87,7 @@ public static class ModifierManager } info.InternalModifiers.Add(modifier); + InternalModifiers.Add(modifier); if (modifier is not GameModifier gameModifier) { diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs index 9dae0fd..035b87c 100644 --- a/MiraAPI/PluginLoading/MiraPluginManager.cs +++ b/MiraAPI/PluginLoading/MiraPluginManager.cs @@ -130,6 +130,8 @@ public sealed class MiraPluginManager // Cache all the registered plugins into an array for easy access RegisteredPlugins = [.._registeredPlugins.Values]; + + ModifierManager.Modifiers = new ReadOnlyCollection(ModifierManager.InternalModifiers); }; }