diff --git a/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/CraftRecipeOptionalStackRequestAction.php b/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/CraftRecipeOptionalStackRequestAction.php new file mode 100644 index 000000000..9047947c8 --- /dev/null +++ b/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/CraftRecipeOptionalStackRequestAction.php @@ -0,0 +1,59 @@ +recipeId = $type; + $this->filterStringIndex = $filterStringIndex; + } + + public function getRecipeId() : int{ return $this->recipeId; } + + public function getFilterStringIndex() : int{ return $this->filterStringIndex; } + + public static function getTypeId() : int{ return ItemStackRequestActionType::CRAFTING_RECIPE_OPTIONAL; } + + public static function read(NetworkBinaryStream $in) : self{ + $recipeId = $in->readGenericTypeNetworkId(); + $filterStringIndex = $in->getLInt(); + return new self($recipeId, $filterStringIndex); + } + + public function write(NetworkBinaryStream $out) : void{ + $out->writeGenericTypeNetworkId($this->recipeId); + $out->putLInt($this->filterStringIndex); + } +} diff --git a/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequest.php b/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequest.php index 648eb295a..688b8fa94 100644 --- a/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequest.php +++ b/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequest.php @@ -32,13 +32,21 @@ final class ItemStackRequest{ private $requestId; /** @var ItemStackRequestAction[] */ private $actions; + /** + * @var string[] + * @phpstan-var list + */ + private $filterStrings; /** * @param ItemStackRequestAction[] $actions + * @param string[] $filterStrings + * @phpstan-param list $filterStrings */ - public function __construct(int $requestId, array $actions){ + public function __construct(int $requestId, array $actions, array $filterStrings){ $this->requestId = $requestId; $this->actions = $actions; + $this->filterStrings = $filterStrings; } public function getRequestId() : int{ return $this->requestId; } @@ -60,6 +68,7 @@ final class ItemStackRequest{ case CraftRecipeStackRequestAction::getTypeId(): return CraftRecipeStackRequestAction::read($in); case CraftRecipeAutoStackRequestAction::getTypeId(): return CraftRecipeAutoStackRequestAction::read($in); case CreativeCreateStackRequestAction::getTypeId(): return CreativeCreateStackRequestAction::read($in); + case CraftRecipeOptionalStackRequestAction::getTypeId(): return CraftRecipeOptionalStackRequestAction::read($in); case DeprecatedCraftingNonImplementedStackRequestAction::getTypeId(): return DeprecatedCraftingNonImplementedStackRequestAction::read($in); case DeprecatedCraftingResultsStackRequestAction::getTypeId(): return DeprecatedCraftingResultsStackRequestAction::read($in); } @@ -73,7 +82,11 @@ final class ItemStackRequest{ $typeId = $in->getByte(); $actions[] = self::readAction($in, $typeId); } - return new self($requestId, $actions); + $filterStrings = []; + for($i = 0, $len = $in->getUnsignedVarInt(); $i < $len; ++$i){ + $filterStrings[] = $in->getString(); + } + return new self($requestId, $actions, $filterStrings); } public function write(NetworkBinaryStream $out) : void{ @@ -83,5 +96,9 @@ final class ItemStackRequest{ $out->putByte($action::getTypeId()); $action->write($out); } + $out->putUnsignedVarInt(count($this->filterStrings)); + foreach($this->filterStrings as $string){ + $out->putString($string); + } } } diff --git a/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequestActionType.php b/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequestActionType.php index 08816c70b..7dea5c210 100644 --- a/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequestActionType.php +++ b/src/pocketmine/network/mcpe/protocol/types/inventory/stackrequest/ItemStackRequestActionType.php @@ -41,6 +41,7 @@ final class ItemStackRequestActionType{ public const CRAFTING_RECIPE = 9; public const CRAFTING_RECIPE_AUTO = 10; //recipe book? public const CREATIVE_CREATE = 11; - public const CRAFTING_NON_IMPLEMENTED_DEPRECATED_ASK_TY_LAING = 12; //anvils aren't fully implemented yet - public const CRAFTING_RESULTS_DEPRECATED_ASK_TY_LAING = 13; //no idea what this is for + public const CRAFTING_RECIPE_OPTIONAL = 12; //anvil/cartography table rename + public const CRAFTING_NON_IMPLEMENTED_DEPRECATED_ASK_TY_LAING = 13; + public const CRAFTING_RESULTS_DEPRECATED_ASK_TY_LAING = 14; //no idea what this is for }