def test_io(): buf = Buffer() assert buf.buf == b"" assert buf.pos == 0 buf = Buffer(b"\x69\x00\x01\x02\x03") assert buf.read(1) == b"\x69" assert buf.read(2) == b"\x00\x01" assert buf.read() == b"\x02\x03" buf.reset() assert buf.read() == b"\x69\x00\x01\x02\x03" buf.reset()
def encode(self) -> bytes: out = Buffer.pack("i", self.chunk.x) + Buffer.pack("i", self.chunk.z) + Buffer.pack("?", self.full) mask = 0 chunk_sections_buffer = Buffer() for y, section in self.chunk.sections.items(): # pack chunk columns into buffer and generate a bitmask if y >= 0: mask |= 1 << y chunk_sections_buffer.write(Buffer.pack_chunk_section(section)) out += Buffer.pack_varint(mask) + Buffer.pack_nbt( nbt.TAG_Compound("", [self.chunk["Heightmaps"]["MOTION_BLOCKING"], self.chunk["Heightmaps"]["WORLD_SURFACE"]]) ) if self.full: out += Buffer.pack_varint(len(Chunk["Biomes"])) + b"".join([Buffer.pack_varint(n) for n in Chunk["Biomes"]]) out += len(chunk_sections_buffer) + chunk_sections_buffer.read() # here we would pack the block entities, but we don't support them yet so we just send an array with length of 0 out += Buffer.pack_varint(0) return out
def decode(cls, buf: Buffer) -> HandshakeLegacyPingRequest: buf.read(15) return cls(buf.read(1), buf.read(buf.unpack("h")).decode("UTF-16BE"), buf.unpack("i"))
def decode(cls, buf: Buffer) -> LoginStart: return cls(buf.read(buf.unpack_varint()).decode("UTF-8"))
def decode(cls, buf: Buffer) -> LoginEncryptionResponse: return cls(buf.read(buf.unpack_varint()), buf.read(buf.unpack_varint()))
def decode(self, buf: Buffer) -> PlayPluginMessageServerBound: return PlayPluginMessageServerBound(buf.unpack_string(), Buffer(buf.read()))
def decode(self, buf: Buffer) -> PlayPluginMessageServerBound: return PlayPluginMessageServerBound(buf.read())