Esempio n. 1
0
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()
Esempio n. 2
0
    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
Esempio n. 3
0
 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"))
Esempio n. 4
0
 def decode(cls, buf: Buffer) -> LoginStart:
     return cls(buf.read(buf.unpack_varint()).decode("UTF-8"))
Esempio n. 5
0
 def decode(cls, buf: Buffer) -> LoginEncryptionResponse:
     return cls(buf.read(buf.unpack_varint()),
                buf.read(buf.unpack_varint()))
Esempio n. 6
0
 def decode(self, buf: Buffer) -> PlayPluginMessageServerBound:
     return PlayPluginMessageServerBound(buf.unpack_string(),
                                         Buffer(buf.read()))
Esempio n. 7
0
 def decode(self, buf: Buffer) -> PlayPluginMessageServerBound:
     return PlayPluginMessageServerBound(buf.read())