List <ReaderWriterObjectLock <IChunk> > GetChunkLocks(IEnumerable <ChunkPositionDimension> positions) { lock (_chunkAccessLock) { var chunkLocks = new List <ReaderWriterObjectLock <IChunk> >(); foreach (var pos in positions) { ReaderWriterObjectLock <IChunk> chunkLock; if (_chunkAccess.TryGetValue(pos, out chunkLock)) { chunkLocks.Add(chunkLock); continue; } // create a new chunkLock if (_nbtWorld == null) { chunkLocks.Add(_chunkAccess[pos] = new ReaderWriterObjectLock <IChunk>(null)); continue; } var chunk = _nbtWorld.GetChunkManager(pos.Dimension).GetChunk(pos.ChunkX, pos.ChunkZ); chunkLocks.Add(_chunkAccess[pos] = new ReaderWriterObjectLock <IChunk>(chunk)); } return(chunkLocks); } }
ReaderWriterObjectLock <IChunk> GetChunkLock(ChunkPositionDimension pos) { lock (_chunkAccessLock) { ReaderWriterObjectLock <IChunk> chunkLock; if (_chunkAccess.TryGetValue(pos, out chunkLock)) { return(chunkLock); } // create a new chunkLock if (NbtWorld == null) { return(_chunkAccess[pos] = new ReaderWriterObjectLock <IChunk>(null)); } var chunk = NbtWorld.GetChunkManager(pos.Dimension).GetChunk(pos.ChunkX, pos.ChunkZ); return(_chunkAccess[pos] = new ReaderWriterObjectLock <IChunk>(chunk)); } }