mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-23 03:16:35 +00:00
this is not complete yet, but the final change (having the binarystream actually come from outside) is a little more disruptive, and some extra changes need to be made. This will grant some sanity in the meantime without breaking too much stuff.
122 lines
3.3 KiB
PHP
122 lines
3.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
*
|
|
* ____ _ _ __ __ _ __ __ ____
|
|
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
|
|
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
|
|
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
|
|
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* @author PocketMine Team
|
|
* @link http://www.pocketmine.net/
|
|
*
|
|
*
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace pocketmine\network\mcpe\protocol;
|
|
|
|
#include <rules/DataPacket.h>
|
|
|
|
use pocketmine\network\BadPacketException;
|
|
use pocketmine\network\mcpe\handler\PacketHandler;
|
|
use pocketmine\network\mcpe\serializer\NetworkBinaryStream;
|
|
|
|
class BookEditPacket extends DataPacket implements ServerboundPacket{
|
|
public const NETWORK_ID = ProtocolInfo::BOOK_EDIT_PACKET;
|
|
|
|
public const TYPE_REPLACE_PAGE = 0;
|
|
public const TYPE_ADD_PAGE = 1;
|
|
public const TYPE_DELETE_PAGE = 2;
|
|
public const TYPE_SWAP_PAGES = 3;
|
|
public const TYPE_SIGN_BOOK = 4;
|
|
|
|
/** @var int */
|
|
public $type;
|
|
/** @var int */
|
|
public $inventorySlot;
|
|
/** @var int */
|
|
public $pageNumber;
|
|
/** @var int */
|
|
public $secondaryPageNumber;
|
|
|
|
/** @var string */
|
|
public $text;
|
|
/** @var string */
|
|
public $photoName;
|
|
|
|
/** @var string */
|
|
public $title;
|
|
/** @var string */
|
|
public $author;
|
|
/** @var string */
|
|
public $xuid;
|
|
|
|
protected function decodePayload(NetworkBinaryStream $in) : void{
|
|
$this->type = $in->getByte();
|
|
$this->inventorySlot = $in->getByte();
|
|
|
|
switch($this->type){
|
|
case self::TYPE_REPLACE_PAGE:
|
|
case self::TYPE_ADD_PAGE:
|
|
$this->pageNumber = $in->getByte();
|
|
$this->text = $in->getString();
|
|
$this->photoName = $in->getString();
|
|
break;
|
|
case self::TYPE_DELETE_PAGE:
|
|
$this->pageNumber = $in->getByte();
|
|
break;
|
|
case self::TYPE_SWAP_PAGES:
|
|
$this->pageNumber = $in->getByte();
|
|
$this->secondaryPageNumber = $in->getByte();
|
|
break;
|
|
case self::TYPE_SIGN_BOOK:
|
|
$this->title = $in->getString();
|
|
$this->author = $in->getString();
|
|
$this->xuid = $in->getString();
|
|
break;
|
|
default:
|
|
throw new BadPacketException("Unknown book edit type $this->type!");
|
|
}
|
|
}
|
|
|
|
protected function encodePayload(NetworkBinaryStream $out) : void{
|
|
$out->putByte($this->type);
|
|
$out->putByte($this->inventorySlot);
|
|
|
|
switch($this->type){
|
|
case self::TYPE_REPLACE_PAGE:
|
|
case self::TYPE_ADD_PAGE:
|
|
$out->putByte($this->pageNumber);
|
|
$out->putString($this->text);
|
|
$out->putString($this->photoName);
|
|
break;
|
|
case self::TYPE_DELETE_PAGE:
|
|
$out->putByte($this->pageNumber);
|
|
break;
|
|
case self::TYPE_SWAP_PAGES:
|
|
$out->putByte($this->pageNumber);
|
|
$out->putByte($this->secondaryPageNumber);
|
|
break;
|
|
case self::TYPE_SIGN_BOOK:
|
|
$out->putString($this->title);
|
|
$out->putString($this->author);
|
|
$out->putString($this->xuid);
|
|
break;
|
|
default:
|
|
throw new \InvalidArgumentException("Unknown book edit type $this->type!");
|
|
}
|
|
}
|
|
|
|
public function handle(PacketHandler $handler) : bool{
|
|
return $handler->handleBookEdit($this);
|
|
}
|
|
}
|