public Chunk LoadChunk(Vector2I chunkPos)
        {
            Vector2I regionPos     = this.ChunkPosToRegionPos(chunkPos);
            Vector2I localChunkPos = this.WorldChunkPosToRegionChunkPos(chunkPos);

            Region Region = this.GetRegion(regionPos);
            Chunk  Chunk  = Region.GetChunk(localChunkPos);

            if (!Region.IsChunkLoaded(localChunkPos))
            {
                Chunk.AddRef();
                Chunk.Decompress();

                if (!this.LoadedChunkMap.ContainsKey(Chunk.WorldChunkPos))
                {
                    this.LoadedChunkMap.Add(Chunk.WorldChunkPos, Chunk);
                }
            }
            else
            {
                Chunk.AddRef();
            }

            return(Chunk);
        }