From 8a71f138743b94ac8f04eab82fe75bce790084f2 Mon Sep 17 00:00:00 2001 From: xChipseq Date: Sun, 31 Aug 2025 20:26:22 +0200 Subject: [PATCH] fix for keybind loading --- MiraAPI/Keybinds/KeybindManager.cs | 31 ++++++++++++++++++++++ MiraAPI/Keybinds/MiraKeybind.cs | 3 +-- MiraAPI/Patches/Keybinds/KeybindsPatch.cs | 30 +-------------------- MiraAPI/PluginLoading/MiraPluginManager.cs | 15 ++++++++--- MiraAPI/Utilities/Extensions.cs | 6 +++-- 5 files changed, 48 insertions(+), 37 deletions(-) diff --git a/MiraAPI/Keybinds/KeybindManager.cs b/MiraAPI/Keybinds/KeybindManager.cs index b7b6c1bb..57c87e7d 100644 --- a/MiraAPI/Keybinds/KeybindManager.cs +++ b/MiraAPI/Keybinds/KeybindManager.cs @@ -1,4 +1,8 @@ +using System; using System.Collections.Generic; +using System.Linq; +using MiraAPI.Utilities; +using Reactor.Utilities; using Rewired; namespace MiraAPI.Keybinds; @@ -13,6 +17,33 @@ public static class KeybindManager /// public static List Keybinds { get; } = new(); + internal static void RewiredInit() + { + try + { + var instance = KeybindUtils.RewiredInputManager!; + foreach (var keybind in KeybindManager.Keybinds) + { + if (instance.userData.actions.ToArray().Any(x => x.name == keybind.Id)) + { + Logger.Warning($"Keybind of id {keybind.Id} already exists. Skipping it"); + continue; + } + + keybind.RewiredInputAction = instance.userData.RegisterModBind( + keybind.Id, + keybind.Name, + keybind.SourcePluginName, + keybind.DefaultKey, + modifiers: keybind.ModifierKeys); + } + } + catch (Exception e) + { + Logger.Error($"Error while registering keybinds in Rewired: {e}"); + } + } + /// /// Returns all conflicts where keybinds use the same key. /// diff --git a/MiraAPI/Keybinds/MiraKeybind.cs b/MiraAPI/Keybinds/MiraKeybind.cs index aa03d898..efdd1e0b 100644 --- a/MiraAPI/Keybinds/MiraKeybind.cs +++ b/MiraAPI/Keybinds/MiraKeybind.cs @@ -1,6 +1,5 @@ using System; using System.Globalization; -using BepInEx.Unity.IL2CPP; using Reactor.Utilities; using Rewired; @@ -52,7 +51,7 @@ public class MiraKeybind /// private Action Handler { get; set; } - internal BasePlugin? SourcePlugin { get; set; } + internal string? SourcePluginName { get; set; } /// /// Initializes a new instance of the class. diff --git a/MiraAPI/Patches/Keybinds/KeybindsPatch.cs b/MiraAPI/Patches/Keybinds/KeybindsPatch.cs index 022aa816..1f60df03 100644 --- a/MiraAPI/Patches/Keybinds/KeybindsPatch.cs +++ b/MiraAPI/Patches/Keybinds/KeybindsPatch.cs @@ -1,11 +1,5 @@ -using System.Linq; -using BepInEx; -using BepInEx.Unity.IL2CPP; using HarmonyLib; using MiraAPI.Keybinds; -using MiraAPI.PluginLoading; -using MiraAPI.Utilities; -using Reactor.Utilities; using Rewired; namespace MiraAPI.Patches.Keybinds; @@ -24,29 +18,7 @@ public static class KeybindMenuPatch } KeybindUtils.RewiredInputManager = __instance; - foreach (var keybind in KeybindManager.Keybinds) - { - if (__instance.userData.actions.ToArray().Any(x => x.name == keybind.Id)) - { - Logger.Warning($"Keybind of id {keybind.Id} already exists. Skipping it"); - continue; - } - - PluginInfo? info = IL2CPPChainloader.Instance.Plugins.Values - .FirstOrDefault(p => p.Instance == keybind.SourcePlugin); - string group = info!.Metadata.Name; - if (keybind.SourcePlugin is IMiraPlugin miraPlugin) - { - group = miraPlugin.OptionsTitleText; - } - - keybind.RewiredInputAction = __instance.userData.RegisterModBind( - keybind.Id, - keybind.Name, - group, - keybind.DefaultKey, - modifiers: keybind.ModifierKeys); - } + KeybindManager.RewiredInit(); _registered = true; } } diff --git a/MiraAPI/PluginLoading/MiraPluginManager.cs b/MiraAPI/PluginLoading/MiraPluginManager.cs index 21f7d3a5..34e20339 100644 --- a/MiraAPI/PluginLoading/MiraPluginManager.cs +++ b/MiraAPI/PluginLoading/MiraPluginManager.cs @@ -108,7 +108,7 @@ public sealed class MiraPluginManager } RegisterColorClasses(type); - RegisterKeybindClasses(type, plugin); + RegisterKeybinds(type, plugin); } info.PluginConfig.Save(); @@ -136,7 +136,7 @@ public sealed class MiraPluginManager ModifierManager.Modifiers = new ReadOnlyCollection(ModifierManager.InternalModifiers); }; - RegisterKeybindClasses(typeof(MiraGlobalKeybinds), PluginSingleton.Instance); + RegisterKeybinds(typeof(MiraGlobalKeybinds), PluginSingleton.Instance); } /// @@ -308,7 +308,7 @@ public sealed class MiraPluginManager return false; } - private static void RegisterKeybindClasses(Type type, BasePlugin source) + private static void RegisterKeybinds(Type type, BasePlugin source) { try { @@ -337,7 +337,14 @@ public sealed class MiraPluginManager } KeybindManager.Keybinds.Add(keybind); - keybind.SourcePlugin = source; + if (source is IMiraPlugin miraPlugin) + { + keybind.SourcePluginName = miraPlugin.OptionsTitleText; + } + else if (source is MiraApiPlugin) + { + keybind.SourcePluginName = "MiraAPI"; + } } foreach (var field in type.GetFields().Where(f => f.FieldType.IsAssignableTo(typeof(MiraKeybind)))) diff --git a/MiraAPI/Utilities/Extensions.cs b/MiraAPI/Utilities/Extensions.cs index 5f4523c6..16cfffd3 100644 --- a/MiraAPI/Utilities/Extensions.cs +++ b/MiraAPI/Utilities/Extensions.cs @@ -563,13 +563,15 @@ public static class Extensions /// The for this action (default is Button). /// Optional modifier keys (e.g., Control, Shift, Alt) that must be held together with the main key. /// The action ID of the newly registered action. - public static InputAction RegisterModBind(this UserData userData, string id, string name, string group, KeyboardKeyCode key, int category = 0, int elementIdentifierId = -1, InputActionType type = InputActionType.Button, ModifierKey[]? modifiers = null) + public static InputAction RegisterModBind(this UserData userData, string id, string name, string? group, KeyboardKeyCode key, int category = 0, int elementIdentifierId = -1, InputActionType type = InputActionType.Button, ModifierKey[]? modifiers = null) { userData.AddAction(category); var action = userData.GetAction(userData.actions.Count - 1)!; action.name = id; - action.descriptiveName = $"{Palette.CrewmateRoleHeaderDarkBlue.ToTextColor()}{group.ReplaceLineEndings(" ")}\n{name}"; + action.descriptiveName = group != null + ? $"{Palette.CrewmateRoleHeaderDarkBlue.ToTextColor()}{group.ReplaceLineEndings(" ")}\n{name}" + : name; action.categoryId = category; action.type = type; action.userAssignable = true;