internal void SetChunkData(ChunkCoordinates coords, AnvilRegionHeaderChunkData data) { //if (_chunkLocations.ContainsKey(coords)) //{ _chunkLocations[coords] = data; //} //else //{ // _chunkLocations.Add(coords, data); //} }
private AnvilRegionHeader LoadRegionHeader(FileStream regionFile) { var header = new AnvilRegionHeader(); var completeUpdatedTimeBuffer = new byte[4096]; regionFile.Seek(4096, SeekOrigin.Begin); regionFile.Read(completeUpdatedTimeBuffer, 0, 4096); regionFile.Seek(0, SeekOrigin.Begin); //int read = 0; int baseX = X * Width; int baseZ = Z * Width; // Load Chunk Locations for (var zi = 0; zi < Width; zi++) { for (var xi = 0; xi < Width; xi++) { int x = baseX + xi; int z = baseZ + zi; int index = (xi + zi * Width) * 4; var coords = new ChunkCoordinates(x, z); var chunkLocationBuffer = new byte[4]; regionFile.Read(chunkLocationBuffer, 0, 3); Array.Reverse(chunkLocationBuffer); int offset = BitConverter.ToInt32(chunkLocationBuffer, 0) << 4; int length = regionFile.ReadByte() << 12; var updatedTimeBuffer = new byte[4]; Array.Copy(completeUpdatedTimeBuffer, index, updatedTimeBuffer, 0, 4); Array.Reverse(updatedTimeBuffer); int updatedTime = BitConverter.ToInt32(updatedTimeBuffer, 0); //Debug.WriteLine($"Header ({x},{z}) Offset: {offset} Length: {length} UpdatedTime: {updatedTime}"); var chunkHeader = new AnvilRegionHeaderChunkData(coords, offset, length, updatedTime); header.SetChunkData(coords, chunkHeader); } } return(header); }