public void Save()
{
string path = "levels/" + name + ".lvl";
try
{
//McLevel mclevel = new McLevel();
//mclevel.Map.Width = (short)width;
//mclevel.Map.Height = (short)depth;
//mclevel.Map.Length = (short)height;
//for (ushort x = 0; x < width; x++)
//{
// for (ushort z = 0; z < height; z++)
// {
// for (ushort y = 0; y < depth; y++)
// {
// mclevel.Map.Blocks[x, y, z] = blocks[PosToInt(x, y, z)].type;
// }
// }
//}
//mclevel.SaveFile("mclevels/" + name + ".mclevel");
if (!Directory.Exists("levels")) { Directory.CreateDirectory("levels"); }
FileStream fs = File.Create(path);
GZipStream gs = new GZipStream(fs, CompressionMode.Compress);
byte[] header = new byte[16];
BitConverter.GetBytes(1874).CopyTo(header, 0);
gs.Write(header, 0, 2);
BitConverter.GetBytes(width).CopyTo(header, 0);
BitConverter.GetBytes(height).CopyTo(header, 2);
BitConverter.GetBytes(depth).CopyTo(header, 4);
BitConverter.GetBytes(spawnx).CopyTo(header, 6);
BitConverter.GetBytes(spawnz).CopyTo(header, 8);
BitConverter.GetBytes(spawny).CopyTo(header, 10);
header[12] = rotx; header[13] = roty;
header[14] = (byte)permissionvisit;
header[15] = (byte)permissionbuild;
gs.Write(header, 0, header.Length);
byte[] level = new byte[blocks.Length];
for (int i = 0; i < blocks.Length; ++i)
{
if (blocks[i].type < 200)
{
level[i] = blocks[i].type;
}
else
{
level[i] = Blocktype.SaveConvert(blocks[i].type);
}
} gs.Write(level, 0, level.Length); gs.Close();
Server.Log("SAVED: Level \"" + name + "\". " + Player.players.Count + "/" + Properties.players);
changed = false;
try
{
File.Copy(path, path + ".backup", true);
Server.Log("And backed up");
}
catch
{
Server.Log("Failed to make backup");
}
}
catch
{
Server.Log("FAILED TO SAVE :" + name);
Player.GlobalMessage("FAILED TO SAVE :" + name);
return;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}