/// <inheritdoc /> public void Register(IDependencyContainer container, IDependencyResolver resolver) { container.RegisterSingletonType <IHost, EcoHost>(null, "eco", "game"); container.RegisterSingletonType <IEcoSettingsProvider, EcoSettingsProvider>(); IEcoSettingsProvider settingsProvider = container.Resolve <IEcoSettingsProvider>(); settingsProvider.Load(); container.RegisterSingletonType <ICommandProvider, EcoCommandProvider>("eco_commands"); container.RegisterSingletonInstance <ICommandProvider>(new EcoNativeCommandProvider(container, settingsProvider), "eco_vanilla_commands"); container.RegisterSingletonType <IPermissionProvider, EcoPermissionProvider>("eco_vanilla_permissions"); container.RegisterSingletonType <ITaskScheduler, EcoTaskScheduler>(null, "eco", "game"); IPlayerManager playerManager = new EcoPlayerManager(container); container.RegisterSingletonInstance(playerManager, null, "eco", "game"); container.RegisterSingletonInstance <IUserManager>(playerManager, "eco", "game"); container.RegisterSingletonType <IUserManager, StdConsoleUserManager>("stdconsole"); #if DEBUG container.RegisterSingletonType <IGovernment, EcoGovernment>(null, "eco", "game"); container.RegisterSingletonType <IEconomyProvider, EcoEconomyProvider>(null, "eco", "game"); #endif }
/// <inheritdoc /> public EcoNativeCommandProvider(IDependencyContainer container, IEcoSettingsProvider settingsProvider) { ILogger logger = container.Resolve <ILogger>(); if (!settingsProvider.Settings.EnableVanillaCommands) { logger.LogInformation("Native commmands are disabled in the settings, none will be loaded."); return; } host = container.Resolve <IHost>(); Dictionary <string, MethodInfo> cmds = (Dictionary <string, MethodInfo>) typeof(ChatManager).GetField("commands", BindingFlags.Instance | BindingFlags.NonPublic)?.GetValue(ChatManager.Obj); if (cmds == null) { throw new Exception("A critical part of the Eco codebase has been changed; please uninstall Rocket until it is updated to support these changes."); } foreach (KeyValuePair <string, MethodInfo> pair in cmds) { commands.Add(new EcoNativeCommand(pair.Value, logger)); } }