public static MinecraftAssetManifest Parse(string content) { var jobj = JObject.Parse (content); var mam = new MinecraftAssetManifest(); mam.Virtual = false; if (jobj["virtual"] != null) mam.Virtual = jobj["virtual"].Value<bool>(); mam.Objects = new List<AssetDescription>(); foreach (JProperty item in ((JObject)jobj["objects"]).Properties()) { mam.Objects.Add(new AssetDescription() { FileName = item.Name, Hash = item.Value["hash"].Value<string>(), Size = item.Value["size"].Value<int>() }); } return mam; }
public void Install(MinecraftAssetManifest manifest, string assetsDirectory, IStatusListener listener) { string assetFile = GetAssetFile(assetsDirectory); Directory.CreateDirectory(Path.GetDirectoryName(assetFile)); if (!File.Exists (assetFile)) Download (assetsDirectory, listener); // If this manifest is virtual, then keep the assets/legacy/virtual directly up to date with the correct // version of the file. if (manifest.Virtual) { string virtualAssetFile = Path.Combine (assetsDirectory, "legacy", "virtual", FileName); if (!File.Exists (virtualAssetFile) || FileUtility.Hash (virtualAssetFile) != Hash) { if (File.Exists(virtualAssetFile)) File.Delete (virtualAssetFile); Directory.CreateDirectory(Path.GetDirectoryName(virtualAssetFile)); File.Copy (assetFile, virtualAssetFile); } } }