PocketMine-MP 5.35.1 git-e32e836dad793a3a3c8ddd8927c00e112b1e576a
Loading...
Searching...
No Matches
ItemStackRequest.php
1<?php
2
3/*
4 * This file is part of BedrockProtocol.
5 * Copyright (C) 2014-2022 PocketMine Team <https://github.com/pmmp/BedrockProtocol>
6 *
7 * BedrockProtocol is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 */
12
13declare(strict_types=1);
14
15namespace pocketmine\network\mcpe\protocol\types\inventory\stackrequest;
16
17use pmmp\encoding\Byte;
18use pmmp\encoding\ByteBufferReader;
19use pmmp\encoding\ByteBufferWriter;
20use pmmp\encoding\DataDecodeException;
21use pmmp\encoding\LE;
22use pmmp\encoding\VarInt;
25use function count;
26
27final class ItemStackRequest{
33 public function __construct(
34 private int $requestId,
35 private array $actions,
36 private array $filterStrings,
37 private int $filterStringCause
38 ){}
39
40 public function getRequestId() : int{ return $this->requestId; }
41
43 public function getActions() : array{ return $this->actions; }
44
49 public function getFilterStrings() : array{ return $this->filterStrings; }
50
51 public function getFilterStringCause() : int{ return $this->filterStringCause; }
52
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),
77 default => throw new PacketDecodeException("Unhandled item stack request action type $typeId"),
78 };
79 }
80
81 public static function read(ByteBufferReader $in) : self{
82 $requestId = CommonTypes::readItemStackRequestId($in);
83 $actions = [];
84 for($i = 0, $len = VarInt::readUnsignedInt($in); $i < $len; ++$i){
85 $typeId = Byte::readUnsigned($in);
86 $actions[] = self::readAction($in, $typeId);
87 }
88 $filterStrings = [];
89 for($i = 0, $len = VarInt::readUnsignedInt($in); $i < $len; ++$i){
90 $filterStrings[] = CommonTypes::getString($in);
91 }
92 $filterStringCause = LE::readSignedInt($in);
93 return new self($requestId, $actions, $filterStrings, $filterStringCause);
94 }
95
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);
102 }
103 VarInt::writeUnsignedInt($out, count($this->filterStrings));
104 foreach($this->filterStrings as $string){
105 CommonTypes::putString($out, $string);
106 }
107 LE::writeSignedInt($out, $this->filterStringCause);
108 }
109}
__construct(private int $requestId, private array $actions, private array $filterStrings, private int $filterStringCause)