velocitynetworkmc/bedrock-protocol

使用PHP实现Minecraft: Bedrock Edition协议

dev-master 2023-01-27 02:06 UTC

README

CI

使用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请求。