SHOW:
|
|
- or go back to the newest paste.
1 | public static void LoadColumnOnClient(RemoteClient Client, Vector3 ChunkLocation, MultiplayerServer Server) | |
2 | { | |
3 | Client.PacketQueue.Enqueue(new PreChunkPacket(ChunkLocation.X, ChunkLocation.Z)); | |
4 | ||
5 | MapChunkPacket mcp = new MapChunkPacket(); | |
6 | mcp.GroundUpContinuous = true; | |
7 | mcp.BiomeData = new byte[256]; | |
8 | mcp.Location = ChunkLocation; | |
9 | ||
10 | byte[] blockData = new byte[0]; | |
11 | byte[] metadata = new byte[0]; | |
12 | byte[] blockLight = new byte[0]; | |
13 | byte[] skyLight = new byte[0]; | |
14 | ||
15 | Vector3 location = ChunkLocation.Clone(); | |
16 | location.Y = 240; | |
17 | ||
18 | ushort mask = 1; | |
19 | bool nonAir = true; | |
20 | for (int i = 15; i >= 0; i--) | |
21 | { | |
22 | Chunk c = Server.GetWorld(Client).GetChunk(location - new Vector3(0, i * 16, 0)); | |
23 | ||
24 | if (c.IsAir) | |
25 | nonAir = false; | |
26 | if (nonAir) | |
27 | { | |
28 | blockData = blockData.Concat(c.Blocks).ToArray(); | |
29 | metadata = metadata.Concat(c.GetMetadata()).ToArray(); | |
30 | blockLight = blockLight.Concat(c.GetBlockLight()).ToArray(); | |
31 | skyLight = skyLight.Concat(c.GetSkyLight()).ToArray(); | |
32 | ||
33 | mcp.PrimaryBitMap |= mask; | |
34 | } | |
35 | ||
36 | mask <<= 1; | |
37 | } | |
38 | ||
39 | byte[] columnData = blockData.Concat(metadata).Concat(blockLight).Concat(skyLight).ToArray(); | |
40 | ||
41 | zLibDeflater.SetInput(columnData); | |
42 | zLibDeflater.Finish(); | |
43 | byte[] compressed = new byte[columnData.Length]; | |
44 | int l = zLibDeflater.Deflate(compressed); | |
45 | zLibDeflater.Reset(); | |
46 | ||
47 | mcp.Data = new byte[l]; | |
48 | Array.Copy(compressed, mcp.Data, l); | |
49 | ||
50 | Client.PacketQueue.Enqueue(mcp); | |
51 | - | Client.PlayerEntity.LoadedChunks.Add(ChunkLocation); |
51 | + |