velocitynetworkmc / bedrock-protocol
使用PHP实现Minecraft: Bedrock Edition协议
dev-master
2023-01-27 02:06 UTC
Requires
- php: ^8.0
- ext-json: *
- netresearch/jsonmapper: ^4.0
- pocketmine/binaryutils: ^0.2.0
- pocketmine/color: ^0.2.0 || ^0.3.0
- pocketmine/math: ^0.3.0 || ^0.4.0
- pocketmine/nbt: ^0.3.0
- ramsey/uuid: ^4.1
Requires (Dev)
- phpstan/phpstan: 1.9.4
- phpstan/phpstan-phpunit: ^1.0.0
- phpstan/phpstan-strict-rules: ^1.0.0
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2024-09-21 08:46:18 UTC
README
使用PHP实现Minecraft: Bedrock Edition协议
此库实现了Minecraft: Bedrock Edition协议中的所有数据包,以及一些支持这些数据包所需的一些额外功能。然而,在撰写本文时,它不包括以下内容:
- 与JWT处理/验证相关的内容
- 与加密相关的内容
- 与压缩相关的内容
解码数据包
假设您已成功解密和解压缩Minecraft数据包,接下来您想要解码它。使用此库,目前通过PacketBatch
进行,如下所示:
$batch = new PacketBatch($payload); foreach($batch->getPackets($packetPool, $protocolContext, $maxPackets) as [$packetObject, $packetPayload]){ if($packetObject !== null){ $packetObject->decode(PacketSerializer::decoder($packetPayload, 0, $protocolContext)); var_dump($packetObject); //tada }else{ var_dump("Got unknown packet", $packetPayload); } }
编码数据包
这很简单
/** @var Packet[] $packets */ $batch = PacketBatch::fromPackets($protocolContext, ...$packets); $batchPayload = $batch->getBuffer();
脚注
由于这个库原本只为PocketMine-MP使用,因此它的边缘处理有些粗糙。最近,这个混乱才从核心中分离出来,以便其他事物也能使用它。这意味着可能需要进行API更改,并且您的反馈将有助于推动这些更改。如果您想改进BedrockProtocol,请提出建议,或者更好的,提交pull请求。