getMagicNumber()] = $member; foreach($member->getAliases() as $alias){ self::$aliasMap[$alias] = $member; } } public static function fromString(string $str) : self{ self::checkInit(); return self::$aliasMap[$str] ?? self::Enum_fromString($str); } /** * @param int $n * * @return GameMode * @throws \InvalidArgumentException */ public static function fromMagicNumber(int $n) : self{ self::checkInit(); if(!isset(self::$magicNumberMap[$n])){ throw new \InvalidArgumentException("No " . self::class . " enum member matches magic number $n"); } return self::$magicNumberMap[$n]; } /** @var int */ private $magicNumber; /** @var string */ private $englishName; /** @var string */ private $translationKey; /** @var string[] */ private $aliases; private function __construct(string $enumName, int $magicNumber, string $englishName, string $translationKey, array $aliases = []){ $this->Enum___construct($enumName); $this->magicNumber = $magicNumber; $this->englishName = $englishName; $this->translationKey = $translationKey; $this->aliases = $aliases; } /** * @return int */ public function getMagicNumber() : int{ return $this->magicNumber; } /** * @return string */ public function getEnglishName() : string{ return $this->englishName; } /** * @return string */ public function getTranslationKey() : string{ return "%" . $this->translationKey; } /** * @return string[] */ public function getAliases() : array{ return $this->aliases; } //TODO: ability sets per gamemode }