diff --git a/tooldelta/constants/netease.py b/tooldelta/constants/netease.py deleted file mode 100644 index 66153752..00000000 --- a/tooldelta/constants/netease.py +++ /dev/null @@ -1,2 +0,0 @@ -PYRPC_OP_SEND = 0x05DB23AE -PYRPC_OP_RECV = 0x0094D408 diff --git a/tooldelta/mc_bytes_packet/pool.py b/tooldelta/mc_bytes_packet/pool.py index 719418e0..e46c27bd 100644 --- a/tooldelta/mc_bytes_packet/pool.py +++ b/tooldelta/mc_bytes_packet/pool.py @@ -8,6 +8,7 @@ from .structure_template_data_response import ( StructureTemplateDataResponse, ) +from .py_rpc import PyRpc class BytesPacketIDs(IntEnum): @@ -15,6 +16,7 @@ class BytesPacketIDs(IntEnum): LevelChunk = PacketIDS.IDLevelChunk SubChunk = PacketIDS.IDSubChunk StructureTemplateDataResponse = PacketIDS.IDStructureTemplateDataResponse + PyRpc = PacketIDS.PyRpc BYTES_PACKET_ID_POOL: dict[int, Callable[[], BaseBytesPacket]] = { @@ -22,6 +24,7 @@ class BytesPacketIDs(IntEnum): PacketIDS.IDLevelChunk: lambda: LevelChunk(), PacketIDS.IDSubChunk: lambda: SubChunk(), PacketIDS.IDStructureTemplateDataResponse: lambda: StructureTemplateDataResponse(), + PacketIDS.IDPyRpc: lambda: PyRpc() } diff --git a/tooldelta/mc_bytes_packet/py_rpc.py b/tooldelta/mc_bytes_packet/py_rpc.py new file mode 100644 index 00000000..39496a10 --- /dev/null +++ b/tooldelta/mc_bytes_packet/py_rpc.py @@ -0,0 +1,41 @@ +import struct +import msgpack +from dataclasses import dataclass +from io import BytesIO +from tooldelta.constants.packets import PacketIDS +from tooldelta.mc_bytes_packet.base_bytes_packet import BaseBytesPacket +from typing import Any + +PYRPC_OP_SEND = 0x05DB23AE +PYRPC_OP_RECV = 0x0094D408 + + +@dataclass +class PyRpc(BaseBytesPacket): + Value: Any = None + OperationType: int = 0 + + def name(self) -> str: + return "PyRpc" + + def custom_packet_id(self) -> int: + return 4 + + def real_packet_id(self) -> int: + return PacketIDS.IDPyRpc + + def encode(self) -> bytes: + writer = BytesIO() + payload = msgpack.packb(self.Value, use_bin_type=True) + writer.write(struct.pack("