예제 #1
0
        ///<summary>
        /// loads or generates the chunk at the chunk location specified
        ///</summary>
        public Chunk LoadChunk(int par1, int par2)
        {
            long l = ChunkCoordIntPair.ChunkXZ2Int(par1, par2);

            droppedChunksSet.Remove(l);
            Chunk chunk = (Chunk)chunkMap.GetValueByKey(l);

            if (chunk == null)
            {
                int i = 0x1c9c3c;

                if (par1 < -i || par2 < -i || par1 >= i || par2 >= i)
                {
                    return(emptyChunk);
                }

                chunk = LoadChunkFromFile(par1, par2);

                if (chunk == null)
                {
                    if (chunkProvider == null)
                    {
                        chunk = emptyChunk;
                    }
                    else
                    {
                        chunk = chunkProvider.ProvideChunk(par1, par2);
                    }
                }

                chunkMap.Add(l, chunk);
                chunkList.Add(chunk);

                if (chunk != null)
                {
                    chunk.Func_4143_d();
                    chunk.OnChunkLoad();
                }

                chunk.PopulateChunk(this, this, par1, par2);
            }

            return(chunk);
        }
        /// <summary>
        /// Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
        /// specified chunk from the map seed and chunk seed
        /// </summary>
        public virtual Chunk ProvideChunk(int par1, int par2)
        {
            Chunk chunk = (Chunk)ChunkMapping.GetValueByKey(ChunkCoordIntPair.ChunkXZ2Int(par1, par2));

            if (chunk == null)
            {
                return(BlankChunk);
            }
            else
            {
                return(chunk);
            }
        }
        /// <summary>
        /// Returns a biome cache block at location specified.
        /// </summary>
        public virtual BiomeCacheBlock GetBiomeCacheBlock(int par1, int par2)
        {
            par1 >>= 4;
            par2 >>= 4;
            long            l = (long)par1 & 0xffffffffL | ((long)par2 & 0xffffffffL) << 32;
            BiomeCacheBlock biomecacheblock = (BiomeCacheBlock)CacheMap.GetValueByKey(l);

            if (biomecacheblock == null)
            {
                biomecacheblock = new BiomeCacheBlock(this, par1, par2);
                CacheMap.Add(l, biomecacheblock);
                Cache.Add(biomecacheblock);
            }

            biomecacheblock.LastAccessTime = JavaHelper.CurrentTimeMillis();
            return(biomecacheblock);
        }