public override void Entry(IModHelper helper)
        {
            Logger.Init(this.Monitor);
            EffectHelper.Init(helper, helper.ReadConfig <SkillfulClothesConfig>());

            if (EffectHelper.Config.LoadCustomEffectDefinitions)
            {
                CustomEffectDefinitions.LoadCustomEffectDefinitions();
            }

            HarmonyPatches.Apply(this.ModManifest.UniqueID);
            ShopPatches.Apply(helper);
            TailoringPatches.Apply(helper);

            clothingObserver = EffectHelper.ClothingObserver;

            helper.Events.GameLoop.GameLaunched += GameLoop_GameLaunched;

            helper.Events.GameLoop.UpdateTicked += GameLoop_UpdateTicked;

            helper.Events.GameLoop.DayStarted += GameLoop_DayStarted;
            helper.Events.GameLoop.DayEnding  += GameLoop_DayEnding;

            helper.Events.GameLoop.ReturnedToTitle += GameLoop_ReturnedToTitle;
        }
        public static Task <ILanguageServer> From(Action <LanguageServerOptions, PapyrusLanguageServerOptions> optionsAction)
        {
            var papyrusOptions = new PapyrusLanguageServerOptions();

            return(LanguageServer.From((options) =>
            {
                optionsAction(options, papyrusOptions);

                options.WithServices((collection) => collection
                                     .AddSingleton <IFileSystem, LocalFileSystem>()
                                     .AddSingleton <IXmlProjectLocator, FileSystemXmlProjectLocator>()
                                     .AddSingleton <IXmlProjectDeserializer, XmlProjectDeserializer>()
                                     .AddSingleton <IXmlProjectLoader, FileSystemXmlProjectLoader>()
                                     .AddSingleton <IScriptTextProvider, TextDocumentScriptTextProvider>((provider) =>
                {
                    var textProvider = provider.CreateInstance <TextDocumentScriptTextProvider>(
                        provider.CreateInstance <FileSystemScriptTextProvider>());

                    AntlrPatch.SetTextProvider(textProvider);

                    return textProvider;
                })
                                     .AddSingleton <ICreationKitInisLocator>(new CreationKitInisLocator(papyrusOptions.IniLocations))
                                     .AddSingleton <ICreationKitConfigLoader, CreationKitInisConfigLoader>()
                                     .AddSingleton((provider) =>
                                                   provider.CreateInstance <CreationKitProgramOptionsProvider>(
                                                       papyrusOptions.AmbientProjectName,
                                                       papyrusOptions.FlagsFileName,
                                                       papyrusOptions.DefaultCreationKitConfig))
                                     .AddSingleton <IProgramOptionsProvider>((provider) =>
                                                                             provider.CreateInstance <ProjectProgramOptionsProvider>(papyrusOptions.FlagsFileName))
                                     .AddSingleton <ProjectManager>())
                .WithHandler <WorkspaceManager>()
                .WithHandler <DefinitionHandler>()
                .WithHandler <DocumentSymbolHandler>()
                .WithHandler <DocumentSyntaxTreeHandler>()
                .WithHandler <HoverHandler>()
                .WithHandler <CompletionHandler>()
                .WithHandler <SignatureHelpHandler>()
                .WithHandler <ReferencesHandler>()
                .WithHandler <RenameHandler>()
                .WithHandler <DocumentScriptInfoHandler>()
                .WithHandler <DocumentAssemblyHandler>()
                .WithHandler <ProjectInfosHandler>();

                HarmonyPatches.Apply();
            }));
        }