mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-05-23 14:04:38 +00:00
There are a few motivations here: 1) Less boilerplate code (this can be written inline) 2) It's possible to provide multiple constructors for different packet variations to reduce the chance of errors. 3) It makes things catch fire on updates in ways that static analysers can understand.
74 lines
1.9 KiB
PHP
74 lines
1.9 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\item\Item;
|
|
use pocketmine\network\mcpe\handler\SessionHandler;
|
|
use function count;
|
|
|
|
class InventoryContentPacket extends DataPacket implements ClientboundPacket{
|
|
public const NETWORK_ID = ProtocolInfo::INVENTORY_CONTENT_PACKET;
|
|
|
|
/** @var int */
|
|
public $windowId;
|
|
/** @var Item[] */
|
|
public $items = [];
|
|
|
|
/**
|
|
* @param int $windowId
|
|
* @param Item[] $items
|
|
*
|
|
* @return InventoryContentPacket
|
|
*/
|
|
public static function create(int $windowId, array $items) : self{
|
|
(function(Item ...$items){})(...$items); //type check
|
|
$result = new self;
|
|
$result->windowId = $windowId;
|
|
$result->items = $items;
|
|
return $result;
|
|
}
|
|
|
|
protected function decodePayload() : void{
|
|
$this->windowId = $this->getUnsignedVarInt();
|
|
$count = $this->getUnsignedVarInt();
|
|
for($i = 0; $i < $count; ++$i){
|
|
$this->items[] = $this->getSlot();
|
|
}
|
|
}
|
|
|
|
protected function encodePayload() : void{
|
|
$this->putUnsignedVarInt($this->windowId);
|
|
$this->putUnsignedVarInt(count($this->items));
|
|
foreach($this->items as $item){
|
|
$this->putSlot($item);
|
|
}
|
|
}
|
|
|
|
public function handle(SessionHandler $handler) : bool{
|
|
return $handler->handleInventoryContent($this);
|
|
}
|
|
}
|