$blockId){ if(!is_string($itemId)){ throw new AssumptionFailedError("Invalid blockitem ID mapping table, expected string as key"); } if(!is_string($blockId)){ throw new AssumptionFailedError("Invalid blockitem ID mapping table, expected string as value"); } $builtMap[$itemId] = $blockId; } return new self($builtMap); } /** * @var string[] * @phpstan-var array */ private array $itemToBlock = []; /** * @var string[] * @phpstan-var array */ private array $blockToItem = []; /** * @param string[] $itemToBlock * @phpstan-param array $itemToBlock */ public function __construct(array $itemToBlock){ foreach(Utils::stringifyKeys($itemToBlock) as $itemId => $blockId){ $this->itemToBlock[mb_strtolower($itemId, 'US-ASCII')] = $blockId; $this->blockToItem[mb_strtolower($blockId, 'US-ASCII')] = $itemId; } } public function itemIdToBlockId(string $itemId) : ?string{ return $this->itemToBlock[mb_strtolower($itemId, 'US-ASCII')] ?? null; } public function blockIdToItemId(string $blockId) : ?string{ //we don't need this for any functionality, but it might be nice to have for debugging return $this->blockToItem[mb_strtolower($blockId, 'US-ASCII')] ?? null; } }