Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ItemUnequippedEvent
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 from
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3declare(strict_types=1);
4
5namespace AqwSocketClient\Events;
6
7use AqwSocketClient\Enums\EquipmentSlot;
8use AqwSocketClient\Enums\JsonMessageType;
9use AqwSocketClient\Interfaces\EventInterface;
10use AqwSocketClient\Interfaces\MessageInterface;
11use AqwSocketClient\Messages\JsonMessage;
12use AqwSocketClient\Objects\Identifiers\ItemIdentifier;
13use AqwSocketClient\Objects\Identifiers\SocketIdentifier;
14use Override;
15
16final class ItemUnequippedEvent implements EventInterface
17{
18    public function __construct(
19        public readonly SocketIdentifier $socketId,
20        public readonly ItemIdentifier $itemId,
21        public readonly EquipmentSlot $slot,
22        public readonly bool $unload,
23    ) {}
24
25    /**
26     * @return ?ItemUnequippedEvent
27     */
28    #[Override]
29    public static function from(MessageInterface $message): ?EventInterface
30    {
31        if (!($message instanceof JsonMessage && $message->type === JsonMessageType::UnequipItem)) {
32            return null;
33        }
34
35        $data = $message->data;
36        $slot = EquipmentSlot::tryFrom((string) $data['strES']);
37
38        if ($slot === null) {
39            return null;
40        }
41
42        return new self(
43            new SocketIdentifier((int) $data['uid']),
44            new ItemIdentifier((int) $data['ItemID']),
45            $slot,
46            (bool) ($data['bUnload'] ?? false),
47        );
48    }
49}