diff --git a/src/pocketmine/network/mcpe/NetworkBinaryStream.php b/src/pocketmine/network/mcpe/NetworkBinaryStream.php index 627a6eb15..8ca86b0c4 100644 --- a/src/pocketmine/network/mcpe/NetworkBinaryStream.php +++ b/src/pocketmine/network/mcpe/NetworkBinaryStream.php @@ -40,6 +40,7 @@ use pocketmine\network\mcpe\protocol\types\EntityLink; use pocketmine\network\mcpe\protocol\types\SkinAnimation; use pocketmine\network\mcpe\protocol\types\SkinData; use pocketmine\network\mcpe\protocol\types\SkinImage; +use pocketmine\network\mcpe\protocol\types\StructureEditorData; use pocketmine\network\mcpe\protocol\types\StructureSettings; use pocketmine\utils\BinaryStream; use pocketmine\utils\UUID; @@ -655,6 +656,7 @@ class NetworkBinaryStream extends BinaryStream{ $result->mirror = $this->getByte(); $result->integrityValue = $this->getFloat(); $result->integritySeed = $this->getInt(); + $result->pivot = $this->getVector3(); return $result; } @@ -673,5 +675,34 @@ class NetworkBinaryStream extends BinaryStream{ $this->putByte($structureSettings->mirror); $this->putFloat($structureSettings->integrityValue); $this->putInt($structureSettings->integritySeed); + $this->putVector3($structureSettings->pivot); + } + + protected function getStructureEditorData() : StructureEditorData{ + $result = new StructureEditorData(); + + $result->structureName = $this->getString(); + $result->structureDataField = $this->getString(); + + $result->includePlayers = $this->getBool(); + $result->showBoundingBox = $this->getBool(); + + $result->structureBlockType = $this->getVarInt(); + $result->structureSettings = $this->getStructureSettings(); + $result->structureRedstoneSaveMove = $this->getVarInt(); + + return $result; + } + + protected function putStructureEditorData(StructureEditorData $structureEditorData) : void{ + $this->putString($structureEditorData->structureName); + $this->putString($structureEditorData->structureDataField); + + $this->putBool($structureEditorData->includePlayers); + $this->putBool($structureEditorData->showBoundingBox); + + $this->putVarInt($structureEditorData->structureBlockType); + $this->putStructureSettings($structureEditorData->structureSettings); + $this->putVarInt($structureEditorData->structureRedstoneSaveMove); } } diff --git a/src/pocketmine/network/mcpe/protocol/StructureBlockUpdatePacket.php b/src/pocketmine/network/mcpe/protocol/StructureBlockUpdatePacket.php index ef4febf1f..fa748f2a8 100644 --- a/src/pocketmine/network/mcpe/protocol/StructureBlockUpdatePacket.php +++ b/src/pocketmine/network/mcpe/protocol/StructureBlockUpdatePacket.php @@ -26,16 +26,32 @@ namespace pocketmine\network\mcpe\protocol; #include use pocketmine\network\mcpe\NetworkSession; +use pocketmine\network\mcpe\protocol\types\StructureEditorData; -class StructureBlockUpdatePacket extends DataPacket{ +class StructureBlockUpdatePacket extends DataPacket/* implements ServerboundPacket*/{ public const NETWORK_ID = ProtocolInfo::STRUCTURE_BLOCK_UPDATE_PACKET; + /** @var int */ + public $x; + /** @var int */ + public $y; + /** @var int */ + public $z; + /** @var StructureEditorData */ + public $structureEditorData; + /** @var bool */ + public $isPowered; + protected function decodePayload(){ - //TODO + $this->getBlockPosition($this->x, $this->y, $this->z); + $this->structureEditorData = $this->getStructureEditorData(); + $this->isPowered = $this->getBool(); } protected function encodePayload(){ - //TODO + $this->putBlockPosition($this->x, $this->y, $this->z); + $this->putStructureEditorData($this->structureEditorData); + $this->putBool($this->isPowered); } public function handle(NetworkSession $session) : bool{ diff --git a/src/pocketmine/network/mcpe/protocol/types/StructureEditorData.php b/src/pocketmine/network/mcpe/protocol/types/StructureEditorData.php new file mode 100644 index 000000000..9e7f04263 --- /dev/null +++ b/src/pocketmine/network/mcpe/protocol/types/StructureEditorData.php @@ -0,0 +1,48 @@ +