Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
PlayerPreferencesLoadedEvent
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
2 / 2
6
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%
10 / 10
100.00% covered (success)
100.00%
1 / 1
5
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 Override;
14
15final class PlayerPreferencesLoadedEvent implements EventInterface
16{
17    /**
18     * @param array<string, ItemIdentifier> $costumes Keyed by EquipmentSlot value
19     */
20    public function __construct(
21        public readonly array $costumes,
22    ) {}
23
24    /**
25     * @return ?PlayerPreferencesLoadedEvent
26     * @mago-ignore analyzer:invalid-iterator
27     */
28    #[Override]
29    public static function from(MessageInterface $message): ?EventInterface
30    {
31        if (!($message instanceof JsonMessage && $message->type === JsonMessageType::PreferencesLoaded)) {
32            return null;
33        }
34
35        $raw = $message->data['result']['costumes'] ?? [];
36        $costumes = [];
37
38        foreach ($raw as $slotValue => $itemId) {
39            $slot = EquipmentSlot::tryFrom((string) $slotValue);
40
41            if ($slot === null) {
42                continue;
43            }
44
45            $costumes[$slot->value] = new ItemIdentifier((int) $itemId);
46        }
47
48        return new self($costumes);
49    }
50}