Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void LoadColumnOnClient(RemoteClient Client, Vector3 ChunkLocation, MultiplayerServer Server)
- {
- Client.PacketQueue.Enqueue(new PreChunkPacket(ChunkLocation.X, ChunkLocation.Z));
- MapChunkPacket mcp = new MapChunkPacket();
- mcp.GroundUpContinuous = true;
- mcp.BiomeData = new byte[256];
- mcp.Location = ChunkLocation;
- byte[] blockData = new byte[0];
- byte[] metadata = new byte[0];
- byte[] blockLight = new byte[0];
- byte[] skyLight = new byte[0];
- Vector3 location = ChunkLocation.Clone();
- location.Y = 240;
- ushort mask = 1;
- bool nonAir = true;
- for (int i = 15; i >= 0; i--)
- {
- Chunk c = Server.GetWorld(Client).GetChunk(location - new Vector3(0, i * 16, 0));
- if (c.IsAir)
- nonAir = false;
- if (nonAir)
- {
- blockData = blockData.Concat(c.Blocks).ToArray();
- metadata = metadata.Concat(c.GetMetadata()).ToArray();
- blockLight = blockLight.Concat(c.GetBlockLight()).ToArray();
- skyLight = skyLight.Concat(c.GetSkyLight()).ToArray();
- mcp.PrimaryBitMap |= mask;
- }
- mask <<= 1;
- }
- byte[] columnData = blockData.Concat(metadata).Concat(blockLight).Concat(skyLight).ToArray();
- zLibDeflater.SetInput(columnData);
- zLibDeflater.Finish();
- byte[] compressed = new byte[columnData.Length];
- int l = zLibDeflater.Deflate(compressed);
- zLibDeflater.Reset();
- mcp.Data = new byte[l];
- Array.Copy(compressed, mcp.Data, l);
- Client.PacketQueue.Enqueue(mcp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement