public void SavePlayer(PlayerEntity entity) { // TODO: Generalize to all mobs NbtFile file = new NbtFile(); var data = new NbtCompound(); data.Add(new NbtByte("OnGround", (byte)(entity.OnGround ? 1 : 0))); data.Add(new NbtShort("Air", entity.Air)); data.Add(new NbtShort("Health", entity.Health)); data.Add(new NbtInt("Dimension", 0)); // TODO data.Add(new NbtInt("foodLevel", entity.Food)); data.Add(new NbtInt("XpLevel", entity.XpLevel)); data.Add(new NbtInt("XpTotal", entity.XpTotal)); data.Add(new NbtFloat("foodExhaustionLevel", entity.FoodExhaustion)); data.Add(new NbtFloat("foodSaturationLevel", entity.FoodSaturation)); data.Add(new NbtFloat("XpP", entity.XpProgress)); data.Add(new NbtList("Equipment")); var inventory = new NbtList("Inventory"); for (int index = 0; index < entity.Inventory.Length; index++) { var slot = entity.Inventory[index]; if (slot.Empty) continue; slot.Index = NetworkSlotToDataSlot(index); inventory.Add(slot.ToNbt()); } data.Add(inventory); var motion = new NbtList("Motion"); motion.Add(new NbtDouble(entity.Velocity.X)); motion.Add(new NbtDouble(entity.Velocity.Y)); motion.Add(new NbtDouble(entity.Velocity.Z)); data.Add(motion); var pos = new NbtList("Pos"); pos.Add(new NbtDouble(entity.Position.X)); pos.Add(new NbtDouble(entity.Position.Y)); pos.Add(new NbtDouble(entity.Position.Z)); data.Add(pos); var rotation = new NbtList("Rotation"); rotation.Add(new NbtFloat(entity.Yaw)); rotation.Add(new NbtFloat(entity.Pitch)); data.Add(rotation); data.Add(new NbtCompound("abilities")); file.RootTag = data; if (!Directory.Exists(Path.Combine(LevelDirectory, "players"))) Directory.CreateDirectory(Path.Combine(LevelDirectory, "players")); using (Stream stream = File.Open(Path.Combine(LevelDirectory, "players", entity.Username + ".dat"), FileMode.OpenOrCreate)) file.SaveToStream(stream, NbtCompression.GZip); }
public void Save() { NbtFile file = new NbtFile(); var serializer = new NbtSerializer(typeof(SavedLevel)); var data = serializer.Serialize(new SavedLevel { IsRaining = Raining, GeneratorVersion = 0, Time = Time, GameMode = (int)GameMode, MapFeatures = MapFeatures, GeneratorName =WorldGenerator.GeneratorName, Initialized = true, Seed = Seed, SpawnPoint = SpawnPoint, SizeOnDisk = 0, ThunderTime = ThunderTime, RainTime = RainTime, Version = 19133, Thundering = Thundering, LevelName = Name, LastPlayed = DateTime.UtcNow.Ticks }); file.RootTag = new NbtCompound(""); file.RootTag.Add(data); using (var stream = File.Open(Path.Combine(LevelDirectory, "level.dat"), FileMode.Create)) file.SaveToStream(stream, NbtCompression.GZip); World.Save(); }