use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\types\CommandOriginData; use pocketmine\network\mcpe\protocol\types\CommandOutputMessage; use function count; class CommandOutputPacket extends DataPacket{ public const NETWORK_ID = ProtocolInfo::COMMAND_OUTPUT_PACKET; /** @var CommandOriginData */ public $originData; /** @var int */ public $outputType; /** @var int */ public $successCount; /** @var CommandOutputMessage[] */ public $messages = []; /** @var string */ public $unknownString; protected function decodePayload(){ $this->originData = $this->getCommandOriginData(); $this->outputType = $this->getByte(); $this->successCount = $this->getUnsignedVarInt(); for($i = 0, $size = $this->getUnsignedVarInt(); $i < $size; ++$i){ $this->messages[] = $this->getCommandMessage(); } if($this->outputType === 4){ $this->unknownString = $this->getString(); } } protected function getCommandMessage() : CommandOutputMessage{ $message = new CommandOutputMessage(); $message->isInternal = $this->getBool(); $message->messageId = $this->getString(); for($i = 0, $size = $this->getUnsignedVarInt(); $i < $size; ++$i){ $message->parameters[] = $this->getString(); } return $message; } protected function encodePayload(){ $this->putCommandOriginData($this->originData); $this->putByte($this->outputType); $this->putUnsignedVarInt($this->successCount); $this->putUnsignedVarInt(count($this->messages)); foreach($this->messages as $message){ $this->putCommandMessage($message); } if($this->outputType === 4){ $this->putString($this->unknownString); } } protected function putCommandMessage(CommandOutputMessage $message){ $this->putBool($message->isInternal); $this->putString($message->messageId); $this->putUnsignedVarInt(count($message->parameters)); foreach($message->parameters as $parameter){ $this->putString($parameter); } } public function handle(NetworkSession $session) : bool{ return $session->handleCommandOutput($this); } }