public void Export(string path, NbtTag root) { if (Snbt) { File.WriteAllText(path, root.ToSnbt(CreateOptions())); } else { var file = new fNbt.NbtFile(); file.BigEndian = BigEndian; file.RootTag = root; using (var writer = File.Create(path)) { if (BedrockHeader) { writer.Seek(8, SeekOrigin.Begin); } long size = file.SaveToStream(writer, Compression); if (BedrockHeader) { // bedrock level.dat files start with a header containing a magic number and then the little-endian size of the data writer.Seek(0, SeekOrigin.Begin); writer.Write(new byte[] { 8, 0, 0, 0 }, 0, 4); writer.Write(DataUtils.GetBytes((int)size, little_endian: !BigEndian), 0, 4); } } } }
public void SetTags(NbtTag tag, NbtContainerTag parent, bool fill_current_value) { NbtTag = tag; NbtParent = parent; if (fill_current_value) { this.Text = tag.ToSnbt(SnbtOptions.MultilinePreview); } }
// add contents of tag to stringbuilder // used for aligning indents for multiline compounds and lists private static void AddSnbt(NbtTag tag, SnbtOptions options, StringBuilder sb, string indent_string, int indent_level, bool include_name) { if (tag is NbtCompound compound) { AddSnbtCompound(compound, options, sb, indent_string, indent_level, include_name); } else if (tag is NbtList list) { AddSnbtList(list, options, sb, indent_string, indent_level, include_name); } else { AddIndents(sb, indent_string, indent_level); sb.Append(tag.ToSnbt(options, include_name: include_name)); } }
public void SetFromTag(NbtTag tag) { this.Text = tag.ToSnbt(SnbtOptions.DefaultExpanded); }