34        private int $requestId,
 
   35        private array $actions,
 
   36        private array $filterStrings,
 
   37        private int $filterStringCause
 
 
   40    public function getRequestId() : int{ return $this->requestId; }
 
   43    public function getActions() : array{ return $this->actions; }
 
   51    public function getFilterStringCause() : int{ return $this->filterStringCause; }
 
   57    private static function readAction(ByteBufferReader $in, 
int $typeId) : ItemStackRequestAction{
 
   58        return match($typeId){
 
   59            TakeStackRequestAction::ID => TakeStackRequestAction::read($in),
 
   60            PlaceStackRequestAction::ID => PlaceStackRequestAction::read($in),
 
   61            SwapStackRequestAction::ID => SwapStackRequestAction::read($in),
 
   62            DropStackRequestAction::ID => DropStackRequestAction::read($in),
 
   63            DestroyStackRequestAction::ID => DestroyStackRequestAction::read($in),
 
   64            CraftingConsumeInputStackRequestAction::ID => CraftingConsumeInputStackRequestAction::read($in),
 
   65            CraftingCreateSpecificResultStackRequestAction::ID => CraftingCreateSpecificResultStackRequestAction::read($in),
 
   66            LabTableCombineStackRequestAction::ID => LabTableCombineStackRequestAction::read($in),
 
   67            BeaconPaymentStackRequestAction::ID => BeaconPaymentStackRequestAction::read($in),
 
   68            MineBlockStackRequestAction::ID => MineBlockStackRequestAction::read($in),
 
   69            CraftRecipeStackRequestAction::ID => CraftRecipeStackRequestAction::read($in),
 
   70            CraftRecipeAutoStackRequestAction::ID => CraftRecipeAutoStackRequestAction::read($in),
 
   71            CreativeCreateStackRequestAction::ID => CreativeCreateStackRequestAction::read($in),
 
   72            CraftRecipeOptionalStackRequestAction::ID => CraftRecipeOptionalStackRequestAction::read($in),
 
   73            GrindstoneStackRequestAction::ID => GrindstoneStackRequestAction::read($in),
 
   74            LoomStackRequestAction::ID => LoomStackRequestAction::read($in),
 
   75            DeprecatedCraftingNonImplementedStackRequestAction::ID => DeprecatedCraftingNonImplementedStackRequestAction::read($in),
 
   76            DeprecatedCraftingResultsStackRequestAction::ID => DeprecatedCraftingResultsStackRequestAction::read($in),
 
   81    public static function read(ByteBufferReader $in) : self{
 
   82        $requestId = 
CommonTypes::readItemStackRequestId($in);
 
   84        for($i = 0, $len = VarInt::readUnsignedInt($in); $i < $len; ++$i){
 
   85            $typeId = Byte::readUnsigned($in);
 
   86            $actions[] = self::readAction($in, $typeId);
 
   89        for($i = 0, $len = VarInt::readUnsignedInt($in); $i < $len; ++$i){
 
   90            $filterStrings[] = CommonTypes::getString($in);
 
   92        $filterStringCause = LE::readSignedInt($in);
 
   93        return new self($requestId, $actions, $filterStrings, $filterStringCause);
 
   96    public function write(ByteBufferWriter $out) : void{
 
   97        CommonTypes::writeItemStackRequestId($out, $this->requestId);
 
   98        VarInt::writeUnsignedInt($out, count($this->actions));
 
   99        foreach($this->actions as $action){
 
  100            Byte::writeUnsigned($out, $action->getTypeId());
 
  101            $action->write($out);
 
  103        VarInt::writeUnsignedInt($out, count($this->filterStrings));
 
  104        foreach($this->filterStrings as $string){
 
  105            CommonTypes::putString($out, $string);
 
  107        LE::writeSignedInt($out, $this->filterStringCause);