public uint GetChunkCount(string packageId, uint maxChunKSize, out ResourcePackManifest manifest, out ulong size, out byte[] hash) { var m = Manifests.FirstOrDefault(x => x.Key.Header.Uuid.Equals(packageId)); if (m.Value != default) { manifest = m.Key; size = (ulong)m.Value.Length; SHA256 sha = SHA256.Create(); sha.Initialize(); hash = sha.ComputeHash(m.Value); sha.Dispose(); return((uint)Math.Ceiling((double)((double)m.Value.Length / (double)maxChunKSize))); } size = 0; manifest = null; hash = null; return(0); }
public void UseResourcePack(string file, bool required) { if (File.Exists(file)) { ResourcePackManifest packManifest = null; using (var fs = File.OpenRead(file)) { using (ZipArchive zipArchive = new ZipArchive(fs, ZipArchiveMode.Read, true)) { try { var manifest = zipArchive.GetEntry("manifest.json"); if (manifest != null) { string manifestData; using (MemoryStream ms = new MemoryStream()) { using (var manifestStream = manifest.Open()) { int read; do { byte[] buffer = new byte[128]; read = manifestStream.Read(buffer, 0, buffer.Length); if (read > 0) { ms.Write(buffer, 0, read); } } while (read > 0); } manifestData = Encoding.UTF8.GetString(ms.ToArray()); } packManifest = JsonConvert.DeserializeObject <ResourcePackManifest>(manifestData); } } catch (Exception ex) { //Could not load resourcepack Log.Warn($"Failed to load resource pack: {ex.ToString()}"); } } if (packManifest != null) { fs.Position = 0; using (MemoryStream ms = new MemoryStream()) { int read; do { byte[] buffer = new byte[128]; read = fs.Read(buffer, 0, buffer.Length); if (read > 0) { ms.Write(buffer, 0, read); } } while (read > 0); Manifests.Add(packManifest, ms.ToArray()); Log.Info($"Resourcepack added: {packManifest.Header.Name} - {packManifest.Header.Version}"); } } else { Log.Warn($"PackManifest was null."); } } MustAccept = required; HasData = Manifests.Count > 0; } else { Log.Warn($"Resourcepack file does not exist: {file}"); } }