Ejemplo n.º 1
0
        /// <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));
            }
        }