static void WriteHeader([NotNull] Map mapToSave, [NotNull] string path, [NotNull] NbtWriter writer) { writer.WriteByte("FormatVersion", 1); // write name and UUID World mapWorld = mapToSave.World; string mapName; if (mapWorld != null) { mapName = mapWorld.Name; } else { mapName = Path.GetFileNameWithoutExtension(path); } writer.WriteString("Name", mapName); writer.WriteByteArray("UUID", mapToSave.Guid.ToByteArray()); // write map dimensions writer.WriteShort("X", (short)mapToSave.Width); writer.WriteShort("Y", (short)mapToSave.Height); writer.WriteShort("Z", (short)mapToSave.Length); // write spawn writer.BeginCompound("Spawn"); { Position spawn = mapToSave.Spawn; writer.WriteShort("X", spawn.X); writer.WriteShort("Y", spawn.Z); writer.WriteShort("Z", spawn.Y); writer.WriteByte("H", spawn.R); writer.WriteByte("P", spawn.L); } writer.EndCompound(); // write timestamps writer.WriteLong("TimeCreated", mapToSave.DateCreated.ToUnixTime()); writer.WriteLong("LastModified", mapToSave.DateCreated.ToUnixTime()); // TODO: TimeAccessed // TODO: write CreatedBy // Write map origin information writer.BeginCompound("MapGenerator"); { writer.WriteString("Software", "fCraft " + Updater.CurrentRelease.VersionString); string genName; if (!mapToSave.Metadata.TryGetValue(MapGenUtil.ParamsMetaGroup, MapGenUtil.GenNameMetaKey, out genName)) { genName = "Unknown"; } writer.WriteString("MapGeneratorName", genName); } writer.EndCompound(); }
public void TransferTags(NbtWriter writer) { writer.WriteBool("piglin_safe", this.Element.PiglinSafe); writer.WriteBool("natural", this.Element.Natural); writer.WriteFloat("ambient_light", this.Element.AmbientLight); if (this.Element.FixedTime.HasValue) { writer.WriteLong("fixed_time", this.Element.FixedTime.Value); } writer.WriteString("infiniburn", this.Element.Infiniburn); writer.WriteBool("respawn_anchor_works", this.Element.RespawnAnchorWorks); writer.WriteBool("has_skylight", this.Element.HasSkylight); writer.WriteBool("bed_works", this.Element.BedWorks); writer.WriteString("effects", this.Element.Effects); writer.WriteBool("has_raids", this.Element.HasRaids); writer.WriteInt("logical_height", this.Element.LogicalHeight); writer.WriteFloat("coordinate_scale", this.Element.CoordinateScale); writer.WriteBool("ultrawarm", this.Element.Ultrawarm); writer.WriteBool("has_ceiling", this.Element.HasCeiling); }
public void ValueTest() { // write one named tag for every value type, and read it back using (var ms = new MemoryStream()) { var writer = new NbtWriter(ms, "root"); Assert.AreEqual(ms, writer.BaseStream); { writer.WriteByte("byte", 1); writer.WriteShort("short", 2); writer.WriteInt("int", 3); writer.WriteLong("long", 4L); writer.WriteFloat("float", 5f); writer.WriteDouble("double", 6d); writer.WriteByteArray("byteArray", new byte[] { 10, 11, 12 }); writer.WriteIntArray("intArray", new[] { 20, 21, 22 }); writer.WriteString("string", "123"); } Assert.IsFalse(writer.IsDone); writer.EndCompound(); Assert.IsTrue(writer.IsDone); writer.Finish(); ms.Position = 0; var file = new NbtFile(); file.LoadFromStream(ms, NbtCompression.None); TestFiles.AssertValueTest(file); } }
public void ValueTest() { // write one named tag for every value type, and read it back using (var ms = new MemoryStream()) { var writer = new NbtWriter(ms, "root"); { writer.WriteByte("byte", 1); writer.WriteShort("short", 2); writer.WriteInt("int", 3); writer.WriteLong("long", 4L); writer.WriteFloat("float", 5f); writer.WriteDouble("double", 6d); writer.WriteByteArray("byteArray", new byte[] { 10, 11, 12 }); writer.WriteIntArray("intArray", new[] { 20, 21, 22 }); writer.WriteString("string", "123"); } writer.EndCompound(); writer.Finish(); ms.Position = 0; var file = new NbtFile(); file.LoadFromStream(ms, NbtCompression.None); TestFiles.AssertValueTest(file); } }
public void ListTest() { // write short (1-element) lists of every possible kind using (var ms = new MemoryStream()) { var writer = new NbtWriter(ms, "Test"); writer.BeginList("LotsOfLists", NbtTagType.List, 11); { writer.BeginList(NbtTagType.Byte, 1); writer.WriteByte(1); writer.EndList(); writer.BeginList(NbtTagType.ByteArray, 1); writer.WriteByteArray(new byte[] { 1 }); writer.EndList(); writer.BeginList(NbtTagType.Compound, 1); writer.BeginCompound(); writer.EndCompound(); writer.EndList(); writer.BeginList(NbtTagType.Double, 1); writer.WriteDouble(1); writer.EndList(); writer.BeginList(NbtTagType.Float, 1); writer.WriteFloat(1); writer.EndList(); writer.BeginList(NbtTagType.Int, 1); writer.WriteInt(1); writer.EndList(); writer.BeginList(NbtTagType.IntArray, 1); writer.WriteIntArray(new[] { 1 }); writer.EndList(); writer.BeginList(NbtTagType.List, 1); writer.BeginList(NbtTagType.List, 0); writer.EndList(); writer.EndList(); writer.BeginList(NbtTagType.Long, 1); writer.WriteLong(1); writer.EndList(); writer.BeginList(NbtTagType.Short, 1); writer.WriteShort(1); writer.EndList(); writer.BeginList(NbtTagType.String, 1); writer.WriteString("ponies"); writer.EndList(); } writer.EndList(); writer.EndCompound(); writer.Finish(); ms.Position = 0; var reader = new NbtReader(ms); Assert.DoesNotThrow(() => reader.ReadAsTag()); } }
public void ListTest() { // write short (1-element) lists of every possible kind using (var ms = new MemoryStream()) { var writer = new NbtWriter(ms, "Test"); writer.BeginList("LotsOfLists", NbtTagType.List, 11); { writer.BeginList(NbtTagType.Byte, 1); writer.WriteByte(1); writer.EndList(); writer.BeginList(NbtTagType.ByteArray, 1); writer.WriteByteArray(new byte[] { 1 }); writer.EndList(); writer.BeginList(NbtTagType.Compound, 1); writer.BeginCompound(); writer.EndCompound(); writer.EndList(); writer.BeginList(NbtTagType.Double, 1); writer.WriteDouble(1); writer.EndList(); writer.BeginList(NbtTagType.Float, 1); writer.WriteFloat(1); writer.EndList(); writer.BeginList(NbtTagType.Int, 1); writer.WriteInt(1); writer.EndList(); writer.BeginList(NbtTagType.IntArray, 1); writer.WriteIntArray(new[] { 1 }); writer.EndList(); writer.BeginList(NbtTagType.List, 1); writer.BeginList(NbtTagType.List, 0); writer.EndList(); writer.EndList(); writer.BeginList(NbtTagType.Long, 1); writer.WriteLong(1); writer.EndList(); writer.BeginList(NbtTagType.Short, 1); writer.WriteShort(1); writer.EndList(); writer.BeginList(NbtTagType.String, 1); writer.WriteString("ponies"); writer.EndList(); } writer.EndList(); Assert.IsFalse(writer.IsDone); writer.EndCompound(); Assert.IsTrue(writer.IsDone); writer.Finish(); ms.Position = 0; var reader = new NbtReader(ms); Assert.DoesNotThrow(() => reader.ReadAsTag()); } }
internal void SaveNBT(NbtWriter writer) { writer.BeginCompound(); // Identity writer.WriteInt("ID", Id); writer.WriteString("N", Name); if (DisplayedName != null) { writer.WriteString("DN", DisplayedName); } if (Email != null) { writer.WriteString("E", Email); } // Network information if (AccountType != AccountType.Unknown) { writer.WriteByte("AT", (byte)AccountType); } if (!Equals(LastIP, IPAddress.None)) { writer.WriteByteArray("IP", LastIP.GetAddressBytes()); } if (LastFailedLoginDate != DateTime.MinValue) { writer.WriteLong("LFD", LastFailedLoginDate.ToUnixTime()); writer.WriteByteArray("LFIP", LastFailedLoginIP.GetAddressBytes()); } if (BandwidthUseMode != BandwidthUseMode.Default) { writer.WriteByte("BUM", (byte)BandwidthUseMode); } // Online status writer.WriteLong("LFD", FirstLoginDate.ToUnixTime()); writer.WriteLong("LLD", LastLoginDate.ToUnixTime()); DateTime lastSeen; if (IsOnline) { lastSeen = DateTime.UtcNow; } else { lastSeen = LastSeen; } writer.WriteLong("LS", lastSeen.ToUnixTime()); writer.WriteByte("IH", (byte)(IsHidden ? 1 : 0)); // Rank information writer.WriteString("R", Rank.FullName); if (PreviousRank != null) { writer.WriteString("PR", PreviousRank.FullName); } if (RankChangeDate != DateTime.MinValue) { writer.WriteLong("RCD", RankChangeDate.ToUnixTime()); } if (RankChangedBy != null) { writer.WriteString("RCB", RankChangedBy); } if (RankChangeReason != null) { writer.WriteString("RCR", RankChangeReason); } writer.WriteByte("RCT", (byte)RankChangeType); // Kicks if (TimesKicked > 0) { writer.WriteInt("TK", TimesKicked); writer.WriteLong("LKD", LastKickDate.ToUnixTime()); if (LastKickBy != null) { writer.WriteString("LKB", LastKickBy); } if (LastKickReason != null) { writer.WriteString("LKR", LastKickReason); } } // Bans if (BanStatus != BanStatus.NotBanned) { writer.WriteByte("BS", (byte)BanStatus); } if (BanDate != DateTime.MinValue) { writer.WriteLong("BD", BanDate.ToUnixTime()); } if (BannedBy != null) { writer.WriteString("BB", BannedBy); } if (BanReason != null) { writer.WriteString("BR", BanReason); } if (UnbanDate != DateTime.MinValue) { writer.WriteLong("UD", UnbanDate.ToUnixTime()); } if (UnbannedBy != null) { writer.WriteString("UB", UnbannedBy); } if (UnbanReason != null) { writer.WriteString("UR", UnbanReason); } // Freeze if (IsFrozen) { writer.WriteByte("IF", 1); if (FrozenBy != null) { writer.WriteString("FB", FrozenBy); } writer.WriteLong("FD", FrozenOn.ToUnixTime()); } // Mute if (IsMuted) { writer.WriteLong("MU", MutedUntil.ToUnixTime()); if (MutedBy != null) { writer.WriteString("MB", MutedBy); } } // Stats writer.WriteInt("BBC", BlocksBuilt); writer.WriteInt("BDC", BlocksDeleted); writer.WriteLong("BRC", BlocksDrawn); writer.WriteInt("MW", MessagesWritten); writer.WriteInt("TV", TimesVisited); int seconds; Player pObject = PlayerObject; if (pObject != null) { seconds = (int)TotalTime.Add(TimeSinceLastLogin).TotalSeconds; } else { seconds = (int)TotalTime.TotalSeconds; } writer.WriteInt("TT", seconds); if (TimesKickedOthers > 0) { writer.WriteInt("TKO", TimesKickedOthers); } if (TimesBannedOthers > 0) { writer.WriteInt("TBO", TimesBannedOthers); } writer.EndCompound(); }