Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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));
            }
        }