use pocketmine\network\mcpe\protocol\types\inventory\ItemStack; use pocketmine\network\mcpe\serializer\NetworkBinaryStream; use function count; class InventoryContentPacket extends DataPacket implements ClientboundPacket{ public const NETWORK_ID = ProtocolInfo::INVENTORY_CONTENT_PACKET; /** @var int */ public $windowId; /** @var ItemStack[] */ public $items = []; /** * @param ItemStack[] $items * * @return InventoryContentPacket */ public static function create(int $windowId, array $items) : self{ $result = new self; $result->windowId = $windowId; $result->items = $items; return $result; } protected function decodePayload(NetworkBinaryStream $in) : void{ $this->windowId = $in->getUnsignedVarInt(); $count = $in->getUnsignedVarInt(); for($i = 0; $i < $count; ++$i){ $this->items[] = $in->getSlot(); } } protected function encodePayload(NetworkBinaryStream $out) : void{ $out->putUnsignedVarInt($this->windowId); $out->putUnsignedVarInt(count($this->items)); foreach($this->items as $item){ $out->putSlot($item); } } public function handle(PacketHandlerInterface $handler) : bool{ return $handler->handleInventoryContent($this); } }