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}");
            }
        }