Esempio n. 1
0
 internal void SetChunkData(ChunkCoordinates coords, AnvilRegionHeaderChunkData data)
 {
     //if (_chunkLocations.ContainsKey(coords))
     //{
     _chunkLocations[coords] = data;
     //}
     //else
     //{
     //	_chunkLocations.Add(coords, data);
     //}
 }
Esempio n. 2
0
        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);
        }