static void LoadChunksBlocking(HashSet <Vector3Int> chunksToLoad)
 {
     try {
         currentlyUsedChunksLock.EnterWriteLock();
         currentlyUsedChunks = new HashSet <Vector3Int> (chunksToLoad);
     } finally {
         if (currentlyUsedChunksLock.IsWriteLockHeld)
         {
             currentlyUsedChunksLock.ExitWriteLock();
         }
     }
     foreach (Vector3Int chunkPosition in chunksToLoad)
     {
         ChunkQueue.QueuePlayerSurrounding(chunkPosition);
     }
     ChunkQueue.PokeThread();
     while (chunksToLoad.Count > 0)
     {
         chunksToLoad.RemoveWhere(chunkPosition => {
             Chunk chunk = World.GetChunk(chunkPosition);
             return(chunk != null && chunk.DataState == Chunk.ChunkDataState.DataFull);
         });
         Thread.Sleep(10);
     }
 }