public bool LoadModpack(string modpackPath) { var modpackEntries = _archiveContents.GetArchiveEntries(modpackPath); var isValidateSuccessful = _modpackValidate.ValidateCorrectModpackStructure(modpackEntries); if (!isValidateSuccessful) { _logger.WriteLine("Validate failure"); return(false); } var header = modpackEntries.First(x => x.Key == _modpackStructure.HeaderOffset); if (header is null) { _logger.WriteLine("Header is null"); return(false); } // Load modpack header var headerMemoryStream = new MemoryStream(); header.OpenEntryStream().CopyTo(headerMemoryStream); var headerObject = ConsumeModpackJsonFile <Header>(headerMemoryStream); if (headerObject.ModpackVersion != "1.0b") { _logger.WriteLine("ModpackVersion mismatch"); return(false); } _installBase.ModpackHeader = headerObject; // Load in load order config files LoadLoadOrderFiles(modpackEntries.ToList()); // Load each modpack config file var modDirectory = _installBase.ModpackHeader.ModInstallFolders.First(); var modFileEntries = modpackEntries.Where(x => x.Key.StartsWith(modDirectory) && !x.IsDirectory).ToList(); foreach (var modFile in modFileEntries) { var modFileMemoryStream = new MemoryStream(); modFile.OpenEntryStream().CopyTo(modFileMemoryStream); var mod = ConsumeModpackJsonFile <Mod>(modFileMemoryStream); var extendedMod = _classExtensions.ToDerived <Mod, ExtendedMod>(mod); extendedMod.DisplayName = extendedMod.NexusFileName; if (string.IsNullOrEmpty(extendedMod.NexusFileName)) { extendedMod.DisplayName = extendedMod.ModName; } if (string.IsNullOrEmpty(extendedMod.Version)) { extendedMod.Version = "?"; } _installBase.ModpackMods.Add(extendedMod); } var test = Assembly.GetExecutingAssembly().GetManifestResourceNames(); // Load an extended mod object for the specified mod organizer item var assembly = Assembly.GetExecutingAssembly(); var fileName = assembly.GetName().Name + ".ModOrganizer.ModOrganizer" + headerObject.ModOrganizerVersion.ToString() + ".json"; using (var fileStream = assembly.GetManifestResourceStream(fileName)) { var memoryStream = new MemoryStream(); fileStream.CopyTo(memoryStream); memoryStream.Position = 0; var modOrganizerObject = ConsumeModpackJsonFile <Mod>(memoryStream); var extendedModOrganizerObject = _classExtensions.ToDerived <Mod, ExtendedMod>(modOrganizerObject); extendedModOrganizerObject.IsModOrganizer = true; extendedModOrganizerObject.DisplayName = extendedModOrganizerObject.NexusFileName; _installBase.ModpackMods.Add(extendedModOrganizerObject); } foreach (var entry in modpackEntries.Where(x => !x.IsDirectory)) { if (!entry.IsDirectory && entry.Key.StartsWith("Resources/header.")) { var memoryStream = new MemoryStream(); entry.WriteTo(memoryStream); var bitmapImage = InjectBitmapImages(memoryStream); _installBase.HeaderImage = bitmapImage; } } _logger.WriteLine("Modpack loaded"); return(true); }