public function encodePacket()
 {
     $packetIDVarInt = VarInt::writeUnsignedVarInt($this->getPacketID());
     $encodedPacket = $this->encodeContents();
     $packetLengthVarInt = VarInt::writeUnsignedVarInt(strlen($encodedPacket) + $packetIDVarInt->getDataLength());
     return $packetLengthVarInt->getEncoded() . $packetIDVarInt->getEncoded() . $encodedPacket;
 }
 /**
  * Get the encoded contents of the packet (minus packetID/length)
  * @return String
  */
 protected function encodeContents()
 {
     $serverIDEncoded = StringType::write($this->serverID);
     $encodedPublicKey = base64_decode($this->getPublicKey());
     $publicKeyLength = VarInt::writeUnsignedVarInt(strlen($encodedPublicKey));
     $encodedToken = $this->getToken();
     $tokenLength = VarInt::writeUnsignedVarInt(strlen($encodedToken));
     return $serverIDEncoded->getEncoded() . $publicKeyLength->getEncoded() . $encodedPublicKey . $tokenLength->getEncoded() . $encodedToken;
 }