Source code for scfile.formats.nbt.decoder

import gzip

import zstandard as zstd

from scfile import formats
from scfile.core import FileDecoder, NbtContent
from scfile.enums import ByteOrder, FileFormat

from .enums import Tag
from .io import NbtBufferIO


[docs] class NbtDecoder(FileDecoder[NbtContent]): format = FileFormat.NBT order = ByteOrder.LITTLE _content = NbtContent
[docs] def as_json(self): return self.convert_to(formats.json.JsonEncoder)
[docs] def parse(self): data = self._decompress() stream = NbtBufferIO(data) # Read root tag tag = stream._read_tag() if tag == Tag.END: return _ = stream._readutf8() # Skip name self.data.value = stream._parse_tag(tag)
def _decompress(self): data = self.read() try: # Gzip is standard nbt compression data = gzip.decompress(data) except Exception: try: # Some synced configs use zstd data = zstd.decompress(data) except Exception: pass return data