Source code for scfile.formats.nbt.nbt

import struct

from .enums import Tag


[docs] def encode(tag: int, name: bytes) -> bytes: return bytes([tag]) + struct.pack(">H", len(name)) + name
[docs] def compound(name: bytes, *children: bytes) -> bytes: return encode(Tag.COMPOUND, name) + b"".join(children) + b"\x00"
[docs] def lst(name: bytes, type: int, *v: bytes) -> bytes: return encode(Tag.LIST, name) + struct.pack(">bi", type, len(v)) + b"".join(v)
[docs] def encode_byte(name: bytes, v: int) -> bytes: return encode(Tag.BYTE, name) + struct.pack(">b", v)
[docs] def encode_int(name: bytes, v: int) -> bytes: return encode(Tag.INT, name) + struct.pack(">i", v)
[docs] def encode_long(name: bytes, v: int) -> bytes: return encode(Tag.LONG, name) + struct.pack(">q", v)
[docs] def encode_ba(name: bytes, v: bytes) -> bytes: return encode(Tag.BYTE_ARRAY, name) + struct.pack(">i", len(v)) + v
[docs] def encode_ia(name: bytes, arr: tuple[int, ...]) -> bytes: return encode(Tag.INT_ARRAY, name) + struct.pack(f">i{len(arr)}i", len(arr), *arr)