/*********
        ** Public methods
        *********/
        /// <summary>The mod entry point, called after the mod is first loaded.</summary>
        /// <param name="helper">Provides simplified APIs for writing mods.</param>
        public override void Entry(IModHelper helper)
        {
            ModHelper  = helper;
            ModMonitor = this.Monitor;
            Config     = helper.ReadConfig <Config>();
            helper.Events.GameLoop.SaveLoaded += this.OnSaveLoaded;

            helper.Events.Player.Warped         += this.OnPlayerWarped;
            helper.Events.GameLoop.UpdateTicked += this.OnUpdateTicked;
            helper.Events.Input.ButtonPressed   += this.OnButtonPressed;
            helper.Events.GameLoop.Saving       += this.OnSaving;

            helper.Events.Display.MenuChanged += this.OnMenuChanged;

            helper.Events.GameLoop.GameLaunched += this.OnGameLaunched;


            musicManager   = new MusicManager();
            textureManager = new TextureManager();
            this.LoadTextures();

            menuChangedMusic = false;


            //Initialize all of the lists upon creation during entry.
            SongSpecifics.initializeMenuList();
            SongSpecifics.initializeFestivalsList();

            this.LoadMusicPacks();
        }
        /// <summary>
        /// Entry point for the mod.
        /// </summary>
        /// <param name="helper"></param>
        public override void Entry(IModHelper helper)
        {
            DefaultSoundBank = Game1.soundBank;
            DefaultWaveBank  = Game1.waveBank;
            ModHelper        = helper;
            ModMonitor       = Monitor;
            Manifest         = ModManifest;
            Config           = helper.ReadConfig <Config>();
            StardewModdingAPI.Events.SaveEvents.AfterLoad += SaveEvents_AfterLoad;
            // StardewModdingAPI.Events.EventArgsLocationsChanged += LocationEvents_CurrentLocationChanged;

            StardewModdingAPI.Events.PlayerEvents.Warped      += PlayerEvents_Warped;
            StardewModdingAPI.Events.GameEvents.UpdateTick    += GameEvents_UpdateTick;
            StardewModdingAPI.Events.ControlEvents.KeyPressed += ControlEvents_KeyPressed;
            StardewModdingAPI.Events.SaveEvents.BeforeSave    += SaveEvents_BeforeSave;

            StardewModdingAPI.Events.MenuEvents.MenuChanged += MenuEvents_MenuChanged;
            StardewModdingAPI.Events.MenuEvents.MenuClosed  += MenuEvents_MenuClosed;

            StardewModdingAPI.Events.GameEvents.FirstUpdateTick += GameEvents_FirstUpdateTick;
            StardewModdingAPI.Events.GameEvents.OneSecondTick   += GameEvents_OneSecondTick;


            musicManager = new MusicManager();

            MusicPath              = Path.Combine(ModHelper.DirectoryPath, "Content", "Music");
            WavMusicDirectory      = Path.Combine(MusicPath, "Wav");
            XACTMusicDirectory     = Path.Combine(MusicPath, "XACT");
            TemplateMusicDirectory = Path.Combine(MusicPath, "Templates");


            textureManager = new TextureManager();
            this.createDirectories();
            this.createBlankXACTTemplate();
            this.createBlankWAVTemplate();

            musicPacksInitialized = false;
            menuChangedMusic      = false;


            //Initialize all of the lists upon creation during entry.
            SongSpecifics.initializeMenuList();
            SongSpecifics.initializeEventsList();
            SongSpecifics.initializeFestivalsList();

            initializeMusicPacks();
        }