use pocketmine\network\mcpe\protocol\serializer\PacketSerializer; use pocketmine\network\mcpe\protocol\types\inventory\ItemStack; use pocketmine\uuid\UUID; use function count; class CraftingEventPacket extends DataPacket implements ServerboundPacket{ public const NETWORK_ID = ProtocolInfo::CRAFTING_EVENT_PACKET; /** @var int */ public $windowId; /** @var int */ public $type; /** @var UUID */ public $id; /** @var ItemStack[] */ public $input = []; /** @var ItemStack[] */ public $output = []; protected function decodePayload(PacketSerializer $in) : void{ $this->windowId = $in->getByte(); $this->type = $in->getVarInt(); $this->id = $in->getUUID(); $size = $in->getUnsignedVarInt(); for($i = 0; $i < $size and $i < 128; ++$i){ $this->input[] = $in->getSlot(); } $size = $in->getUnsignedVarInt(); for($i = 0; $i < $size and $i < 128; ++$i){ $this->output[] = $in->getSlot(); } } protected function encodePayload(PacketSerializer $out) : void{ $out->putByte($this->windowId); $out->putVarInt($this->type); $out->putUUID($this->id); $out->putUnsignedVarInt(count($this->input)); foreach($this->input as $item){ $out->putSlot($item); } $out->putUnsignedVarInt(count($this->output)); foreach($this->output as $item){ $out->putSlot($item); } } public function handle(PacketHandlerInterface $handler) : bool{ return $handler->handleCraftingEvent($this); } }