private static Task <PakIndex?> loadPakIndex(string paksFolderPath) { var tcs = new TaskCompletionSource <PakIndex?>(); Task.Run(() => { try { var filter = new PakFilter(new[] { Constants.PAKS_FILTER_STRING }, false); var pakIndex = new PakIndex(path: paksFolderPath, cacheFiles: true, caseSensitive: true, filter: filter); if (pakIndex.PakFileCount == 0) { throw new FileNotFoundException($"No files were found at {paksFolderPath}"); } if (!unlockPakIndex(pakIndex)) { throw new InvalidOperationException($"Could not decrypt pak files at {paksFolderPath}"); } tcs.SetResult(pakIndex); } catch (Exception e) { Console.WriteLine($"Could not load Minecraft Dungeons Paks: {e}"); tcs.SetException(e); } }); return(tcs.Task); }
public void TestExtractGameFiles() { string?paksFolderPath = _model.usableGameContentIfExists(); if (string.IsNullOrWhiteSpace(paksFolderPath)) { Assert.Fail("No usable Game Content Files found"); return; } PakFilter?filter = new PakFilter(new[] { Constants.PAKS_FILTER_STRING }, false); PakIndex? pakIndex = new PakIndex(path: paksFolderPath !, cacheFiles: true, caseSensitive: true, filter: filter); pakIndex.UseKey(FGuid.Zero, Secrets.PAKS_AES_KEY_STRINGS[0].Substring(2).ToBytesKey()); Assert.AreEqual(64969, pakIndex.Count()); var pakImageResolver = new PakImageResolver(pakIndex, null); pakImageResolver.loadPakFiles(); Assert.AreEqual(242, ItemExtensions.all.Count); Assert.AreEqual(108, EnchantmentExtensions.allEnchantments.Count); //Find all the missing and mismatched strings foreach (var item in ItemExtensions.all) { R.itemName(item); R.itemDesc(item); } foreach (var enchantment in EnchantmentExtensions.allEnchantments) { R.enchantmentName(enchantment); //R.enchantmentEffect(enchantment); //missing many of these strings R.enchantmentDescription(enchantment); } foreach (var armorProperty in ItemExtensions.armorProperties) { R.armorProperty(armorProperty); R.armorPropertyDescription(armorProperty); } }
private static Task <PakIndex?> loadPakIndex() { var tcs = new TaskCompletionSource <PakIndex?>(); Task.Run(() => { try { var filter = new PakFilter(new[] { "/dungeons/content" }); var pakIndex = new PakIndex(path: Constants.PAKS_FOLDER, cacheFiles: true, caseSensitive: false, filter: filter); pakIndex.UseKey(BinaryHelper.ToBytesKey(Constants.PAKS_AES_KEY_STRING)); tcs.SetResult(pakIndex); } catch (Exception e) { Console.WriteLine($"Could not load Minecraft Dungeons Paks: {e}"); tcs.SetResult(null); } }); return(tcs.Task); }