private void SendMap()
{
if (OldLevel != null)
{
OldLevel.Players.Remove(this);
SendAllDeSpawns();
}
SendMotd();
_isLoading = true;
SendRaw(2);
var mapSize = new byte[4];
BitConverter.GetBytes(IPAddress.HostToNetworkOrder(Level.BlockData.Length)).CopyTo(mapSize, 0);
//level.blocks.CopyTo(buffer, 4);
//int bufferLength = level.blocks.Length + 4;
byte[] buffer = GZip(mapSize, Level.BlockData);
var number = (int) Math.Ceiling(((double) buffer.Length)/1024);
for (int i = 1; buffer.Length > 0; ++i)
{
var length = (short) Math.Min(buffer.Length, 1024);
var send = new byte[1027];
HTNO(length).CopyTo(send, 0);
Buffer.BlockCopy(buffer, 0, send, 2, length);
var tempbuffer = new byte[buffer.Length - length];
Buffer.BlockCopy(buffer, length, tempbuffer, 0, buffer.Length - length);
buffer = tempbuffer;
send[1026] = (byte) (i*100/number);
//Server.Log("Sending map part " + i, LogTypesEnum.Debug);
SendRaw(3, send);
Thread.Sleep(10);
}
//Server.Log("Map sent, initializing", LogTypesEnum.Debug);
buffer = new byte[6];
HTNO((short) Level.SizeX).CopyTo(buffer, 0);
HTNO((short) Level.SizeY).CopyTo(buffer, 2);
HTNO((short) Level.SizeZ).CopyTo(buffer, 4);
SendRaw(4, buffer);
_isLoading = false;
Level.Players.Add(this);
SendAllSpawns();
SendTeleportThisPlayer(Level.SpawnPos);
//Server.Log("map done", LogTypesEnum.Debug);
}