Ejemplo n.º 1
0
    public ServerChunk GetChunk(int x, int y, int z)
    {
        x = x / chunksize;
        y = y / chunksize;
        z = z / chunksize;
        ServerChunk chunk = GetChunkValid(x, y, z);

        if (chunk == null)
        {
            wasChunkGenerated = true;
            byte[] serializedChunk = ChunkDb.GetChunk(d_ChunkDb, x, y, z);
            if (serializedChunk != null)
            {
                SetChunkValid(x, y, z, DeserializeChunk(serializedChunk));
                //todo get heightmap from disk
                UpdateChunkHeight(x, y, z);
                return(GetChunkValid(x, y, z));
            }

            // get chunk
            ushort[] newchunk = new ushort[chunksize * chunksize * chunksize];
            for (int i = 0; i < server.modEventHandlers.getchunk.Count; i++)
            {
                server.modEventHandlers.getchunk[i](x, y, z, newchunk);
            }
            SetChunkValid(x, y, z, new ServerChunk()
            {
                data = newchunk
            });
            GetChunkValid(x, y, z).DirtyForSaving = true;
            UpdateChunkHeight(x, y, z);
            return(GetChunkValid(x, y, z));
        }
        return(chunk);
    }
Ejemplo n.º 2
0
        public byte[] GetChunk(int x, int y, int z)
        {
            x = x / chunksize;
            y = y / chunksize;
            z = z / chunksize;
            Chunk chunk = chunks[x, y, z];

            if (chunk == null)
            {
                byte[] serializedChunk = ChunkDb.GetChunk(d_ChunkDb, x, y, z);
                if (serializedChunk != null)
                {
                    chunks[x, y, z] = DeserializeChunk(serializedChunk);
                    //todo get heightmap from disk
                    UpdateChunkHeight(x, y, z);
                    return(chunks[x, y, z].data);
                }

                // update chunk size and get chunk
                d_Generator.ChunkSize = chunksize;
                byte[, ,] newchunk    = d_Generator.GetChunk(x, y, z);
                if (newchunk != null)
                {
                    chunks[x, y, z] = new Chunk()
                    {
                        data = MapUtil.ToFlatMap(newchunk)
                    };
                }
                else
                {
                    chunks[x, y, z] = new Chunk()
                    {
                        data = new byte[chunksize * chunksize * chunksize]
                    };
                }
                chunks[x, y, z].DirtyForSaving = true;
                UpdateChunkHeight(x, y, z);
                return(chunks[x, y, z].data);
            }
            return(chunk.data);
        }