public void SavePlayer() { byte[] health = HealthManager.Export(); byte[] inv = Inventory.GetBytes(); DataBuffer buffer = new DataBuffer(new byte[0]); buffer.WriteDouble(KnownPosition.X); buffer.WriteDouble(KnownPosition.Y); buffer.WriteDouble(KnownPosition.Z); buffer.WriteFloat(KnownPosition.Yaw); buffer.WriteFloat(KnownPosition.Pitch); buffer.WriteBool(KnownPosition.OnGround); buffer.WriteVarInt((int)Gamemode); buffer.WriteVarInt(health.Length); foreach (byte b in health) { buffer.WriteByte(b); } buffer.WriteVarInt(inv.Length); foreach (byte b in inv) { buffer.WriteByte(b); } byte[] data = buffer.ExportWriter; data = Globals.Compress(data); string savename = ServerSettings.OnlineMode ? Uuid : Username; File.WriteAllBytes("Players/" + savename + ".pdata", data); }
public byte[] GetBytes(bool unloader = false) { var writer = new DataBuffer(new byte[0]); if (!unloader) { writer.WriteInt(X); writer.WriteInt(Z); writer.WriteBool(true); writer.WriteUShort(0xffff); // bitmap writer.WriteVarInt((Blocks.Length*2) + Skylight.Data.Length + Blocklight.Data.Length + BiomeId.Length); for (var i = 0; i < Blocks.Length; i++) { writer.WriteUShort((ushort) ((Blocks[i] << 4) | Metadata[i])); } writer.Write(Blocklight.Data); writer.Write(Skylight.Data); writer.Write(BiomeId); } else { writer.WriteInt(X); writer.WriteInt(Z); writer.WriteBool(true); writer.WriteUShort(0); writer.WriteVarInt(0); } return writer.ExportWriter; }