private void InitBindings() { _bindings = new Dictionary <string, KeyBinding>(); var settings = Plugin.LoadBindingSettings(); // build all of the commands/actions _commandsByName = new Dictionary <string, Command>(); var commands = _actionController.BuildCommands(); foreach (var command in commands) { var commandName = command.Name; _commandsByName[commandName] = command; // Consider exporting this action to the plugin so it shows up in GetActions elsewhere //_plugin.RegisterAction(new JSONStorableAction(commandName, () => command.Execute())); // fill in bindings from the saved settings if (settings != null) { if (settings[commandName] != null) { try { var chord = settings[commandName]["chord"].Value; var enabled = settings[commandName]["enabled"].AsBool; var binding = KeyBinding.Build(Plugin, commandName, new KeyChord(chord), command); binding.Enabled = enabled; _bindings[commandName] = binding; } catch { SuperController.LogError($"Failed loading action {commandName} from save file"); _bindings[commandName] = null; } } else { _bindings[commandName] = null; } } // ... or use defaults if there isn't anything there yet else { var defaultKeyChord = _actionController.GetDefaultKeyChordByActionName(commandName); if (defaultKeyChord != null) { _bindings[commandName] = KeyBinding.Build(Plugin, commandName, defaultKeyChord, command); } else { _bindings[commandName] = null; } } } }