Lines 100.00% 9 / 9
Functions and Methods 100.00% 1 / 1
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
Events 100.00% 9 / 9 100.00% 1 / 1 4 100.00% 1 / 1
 recognize 100.00% 9 / 9 100.00% 1 / 1 4
1<?php
2
3declare(strict_types=1);
4
5namespace Lorekeeper\Server\Event;
6
7use Lorekeeper\Server\Event\CharacterClass\ClassChangedEvent;
8use Lorekeeper\Server\Event\Combat\AttackRejectedEvent;
9use Lorekeeper\Server\Event\Combat\MonsterRespawnedEvent;
10use Lorekeeper\Server\Event\Combat\MonstersDiedEvent;
11use Lorekeeper\Server\Event\Combat\MonstersHealthChangedEvent;
12use Lorekeeper\Server\Event\Combat\PlayerDiedEvent;
13use Lorekeeper\Server\Event\Combat\PlayersHealthChangedEvent;
14use Lorekeeper\Server\Event\Combat\PlayersManaChangedEvent;
15use Lorekeeper\Server\Event\Combat\ResurrectedEvent;
16use Lorekeeper\Server\Event\Combat\SkillsLoadedEvent;
17use Lorekeeper\Server\Event\Inventory\PlayerInventoryLoadedEvent;
18use Lorekeeper\Server\Event\Item\ItemEquippedEvent;
19use Lorekeeper\Server\Event\Item\ItemUnequippedEvent;
20use Lorekeeper\Server\Event\Item\ItemUnwornEvent;
21use Lorekeeper\Server\Event\Item\ItemWornEvent;
22use Lorekeeper\Server\Event\Map\AlreadyInMapEvent;
23use Lorekeeper\Server\Event\Map\MapLockedEvent;
24use Lorekeeper\Server\Event\Map\MapMemberOnlyEvent;
25use Lorekeeper\Server\Event\Map\MapNotAvailableEvent;
26use Lorekeeper\Server\Event\Map\MapRequiresQuestEvent;
27use Lorekeeper\Server\Event\Map\MonstersDescribedEvent;
28use Lorekeeper\Server\Event\Map\MonstersPlacedEvent;
29use Lorekeeper\Server\Event\Map\MonstersSeenEvent;
30use Lorekeeper\Server\Event\Map\MovedToMapEvent;
31use Lorekeeper\Server\Event\Map\PlayersSeenEvent;
32use Lorekeeper\Server\Event\Map\RoomJoinedEvent;
33use Lorekeeper\Server\Event\Player\PlayerEnteredEvent;
34use Lorekeeper\Server\Event\Player\PlayerLeftEvent;
35use Lorekeeper\Server\Event\Player\PlayerUpdatedEvent;
36use Lorekeeper\Server\Event\Progression\LeveledUpEvent;
37use Lorekeeper\Server\Event\Quest\QuestLoadedEvent;
38use Lorekeeper\Server\Event\Reward\MonsterRewardedEvent;
39use Lorekeeper\Server\Event\Session\ConnectionEstablishedEvent;
40use Lorekeeper\Server\Event\Session\LoginFailedEvent;
41use Lorekeeper\Server\Event\Session\LoginSucceededEvent;
42use Lorekeeper\Server\Event\Shop\ShopLoadedEvent;
43use Lorekeeper\Server\Exception\MalformedEventException;
44use Lorekeeper\Server\Message\Message;
45
46final readonly class Events
47{
48    /** @var non-empty-list<class-string<Event>> */
49    public const array ALL = [
50        ActionTooSoonEvent::class,
51        AttackRejectedEvent::class,
52        AwayFromKeyboardEvent::class,
53        ClassChangedEvent::class,
54        MonsterRespawnedEvent::class,
55        MonsterRewardedEvent::class,
56        MonstersDiedEvent::class,
57        MonstersHealthChangedEvent::class,
58        LeveledUpEvent::class,
59        PlayersHealthChangedEvent::class,
60        PlayersManaChangedEvent::class,
61        PlayerDiedEvent::class,
62        ResurrectedEvent::class,
63        SkillsLoadedEvent::class,
64        ConnectionEstablishedEvent::class,
65        PlayerInventoryLoadedEvent::class,
66        ItemEquippedEvent::class,
67        ItemUnequippedEvent::class,
68        ItemUnwornEvent::class,
69        ItemWornEvent::class,
70        LoginFailedEvent::class,
71        LoginSucceededEvent::class,
72        AlreadyInMapEvent::class,
73        MapLockedEvent::class,
74        MapMemberOnlyEvent::class,
75        MapNotAvailableEvent::class,
76        MapRequiresQuestEvent::class,
77        MovedToMapEvent::class,
78        MonstersDescribedEvent::class,
79        MonstersPlacedEvent::class,
80        MonstersSeenEvent::class,
81        PlayersSeenEvent::class,
82        RoomJoinedEvent::class,
83        PlayerEnteredEvent::class,
84        PlayerLeftEvent::class,
85        PlayerUpdatedEvent::class,
86        QuestLoadedEvent::class,
87        ShopLoadedEvent::class,
88    ];
89
90    /** @return list<Event|MalformedEventException> */
91    public static function recognize(Message $message): array
92    {
93        $recognized = [];
94
95        foreach (self::ALL as $event) {
96            try {
97                /** @mago-expect analysis:possibly-static-access-on-interface */
98                $heard = $event::from($message);
99            } catch (MalformedEventException $malformed) {
100                $recognized[] = $malformed;
101
102                continue;
103            }
104
105            if ($heard->isSome()) {
106                $recognized[] = $heard->unwrap();
107            }
108        }
109
110        return $recognized;
111    }
112}