Lines 100.00% 28 / 28
Functions and Methods 100.00% 1 / 1
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
ItemKinds 100.00% 28 / 28 100.00% 1 / 1 28 100.00% 1 / 1
 read 100.00% 28 / 28 100.00% 1 / 1 28
1<?php
2
3declare(strict_types=1);
4
5namespace Lorekeeper\Server\Event\Item\Helper;
6
7use Lorekeeper\Core\Item\Equipment\Armor;
8use Lorekeeper\Core\Item\Equipment\Cape;
9use Lorekeeper\Core\Item\Equipment\ClassItem;
10use Lorekeeper\Core\Item\Equipment\GroundItem;
11use Lorekeeper\Core\Item\Equipment\Helm;
12use Lorekeeper\Core\Item\Equipment\Necklace;
13use Lorekeeper\Core\Item\Equipment\Pet;
14use Lorekeeper\Core\Item\Equipment\Weapon;
15use Lorekeeper\Core\Item\Equipment\WeaponType;
16use Lorekeeper\Core\Item\House\HouseItem;
17use Lorekeeper\Core\Item\House\HouseItemType;
18use Lorekeeper\Core\Item\Item;
19use Lorekeeper\Core\Item\ItemId;
20use Lorekeeper\Core\Item\ItemName;
21use Lorekeeper\Core\Item\Misc\Boost;
22use Lorekeeper\Core\Item\Misc\Enhancement;
23use Lorekeeper\Core\Item\Misc\Resource;
24use Lorekeeper\Server\Event\Event;
25use Lorekeeper\Server\Exception\MalformedEventException;
26
27final readonly class ItemKinds
28{
29    /**
30     * @param class-string<Event> $event
31     *
32     * @throws MalformedEventException
33     */
34    public static function read(ItemId $id, ItemName $name, string $type, string $event): Item
35    {
36        return match ($type) {
37            'Class' => new ClassItem($id, $name),
38            'Armor' => new Armor($id, $name),
39            'Helm' => new Helm($id, $name),
40            'Cape' => new Cape($id, $name),
41            'Pet' => new Pet($id, $name),
42            'Necklace' => new Necklace($id, $name),
43            'Misc' => new GroundItem($id, $name),
44            'Axe' => new Weapon($id, $name, WeaponType::Axe),
45            'Bow' => new Weapon($id, $name, WeaponType::Bow),
46            'Dagger' => new Weapon($id, $name, WeaponType::Dagger),
47            'Gauntlet' => new Weapon($id, $name, WeaponType::Gauntlet),
48            'Gun' => new Weapon($id, $name, WeaponType::Gun),
49            'HandGun' => new Weapon($id, $name, WeaponType::HandGun),
50            'Mace' => new Weapon($id, $name, WeaponType::Mace),
51            'Polearm' => new Weapon($id, $name, WeaponType::Polearm),
52            'Rifle' => new Weapon($id, $name, WeaponType::Rifle),
53            'Staff' => new Weapon($id, $name, WeaponType::Staff),
54            'Sword' => new Weapon($id, $name, WeaponType::Sword),
55            'Wand' => new Weapon($id, $name, WeaponType::Wand),
56            'Whip' => new Weapon($id, $name, WeaponType::Whip),
57            'Floor Item' => new HouseItem($id, $name, HouseItemType::Floor),
58            'Wall Item' => new HouseItem($id, $name, HouseItemType::Wall),
59            'House' => new HouseItem($id, $name, HouseItemType::House),
60            'ServerUse' => new Boost($id, $name),
61            'Enhancement' => new Enhancement($id, $name),
62            'Item', 'Note', 'Quest Item', 'Resource' => new Resource($id, $name),
63            default => throw new MalformedEventException($event, "unknown item type '{$type}'"),
64        };
65    }
66}