public MultiplayerConfig LoadMultiplayer(byte[] data) { MemoryStream memoryStream = new MemoryStream(data); BinaryReader br = new BinaryReader(memoryStream); //Read compressed bytes int uncompressedSize = br.ReadInt32(); //Uncompress bytes byte[] uncompressedBytes = new byte[uncompressedSize]; GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress); int bytesRead = 0; while (true) { int read = gzipStream.Read(uncompressedBytes, bytesRead, uncompressedSize - bytesRead); if (read == 0) { break; } bytesRead += read; } br = new BinaryReader(new MemoryStream(uncompressedBytes)); //Load world from uncompressed bytes MultiplayerConfig config = LoadMultiplayer(br); tileManager.Create(config.tileDefinitions, sizeXbits, sizeYbits, sizeZbits); itemManager.Create(config.itemDefinitions); avatarManager.Create(config.avatarDefinitions); sectorManager.Create(); dayCycleManager.Create(null); tileManager.Load(br); itemManager.Load(br); sectorManager.Load(br); dayCycleManager.Load(br); //Player avatar int playerObjectId = br.ReadInt32(); Player player = (Player)avatarManager.CreateAvatar(avatarManager.GetAvatarDefinitionById("player"), playerObjectId, new Vector3(), false); player.Load(br); cwListener.CreateObject(player); gameplay.WorldLoaded(); return(config); }