*/ private array $idToEnch = []; /** * @var int[] * @phpstan-var array */ private array $enchToId = []; private function __construct(){ $this->register(EnchantmentIds::PROTECTION, VanillaEnchantments::PROTECTION()); $this->register(EnchantmentIds::FIRE_PROTECTION, VanillaEnchantments::FIRE_PROTECTION()); $this->register(EnchantmentIds::FEATHER_FALLING, VanillaEnchantments::FEATHER_FALLING()); $this->register(EnchantmentIds::BLAST_PROTECTION, VanillaEnchantments::BLAST_PROTECTION()); $this->register(EnchantmentIds::PROJECTILE_PROTECTION, VanillaEnchantments::PROJECTILE_PROTECTION()); $this->register(EnchantmentIds::THORNS, VanillaEnchantments::THORNS()); $this->register(EnchantmentIds::RESPIRATION, VanillaEnchantments::RESPIRATION()); $this->register(EnchantmentIds::SHARPNESS, VanillaEnchantments::SHARPNESS()); //TODO: smite, bane of arthropods (these don't make sense now because their applicable mobs don't exist yet) $this->register(EnchantmentIds::KNOCKBACK, VanillaEnchantments::KNOCKBACK()); $this->register(EnchantmentIds::FIRE_ASPECT, VanillaEnchantments::FIRE_ASPECT()); $this->register(EnchantmentIds::EFFICIENCY, VanillaEnchantments::EFFICIENCY()); $this->register(EnchantmentIds::SILK_TOUCH, VanillaEnchantments::SILK_TOUCH()); $this->register(EnchantmentIds::UNBREAKING, VanillaEnchantments::UNBREAKING()); $this->register(EnchantmentIds::POWER, VanillaEnchantments::POWER()); $this->register(EnchantmentIds::PUNCH, VanillaEnchantments::PUNCH()); $this->register(EnchantmentIds::FLAME, VanillaEnchantments::FLAME()); $this->register(EnchantmentIds::INFINITY, VanillaEnchantments::INFINITY()); $this->register(EnchantmentIds::MENDING, VanillaEnchantments::MENDING()); $this->register(EnchantmentIds::VANISHING, VanillaEnchantments::VANISHING()); $this->register(EnchantmentIds::SWIFT_SNEAK, VanillaEnchantments::SWIFT_SNEAK()); } public function register(int $mcpeId, Enchantment $enchantment) : void{ $this->idToEnch[$mcpeId] = $enchantment; $this->enchToId[spl_object_id($enchantment)] = $mcpeId; } public function fromId(int $id) : ?Enchantment{ //we might not have all the enchantment IDs registered return $this->idToEnch[$id] ?? null; } public function toId(Enchantment $enchantment) : int{ if(!array_key_exists(spl_object_id($enchantment), $this->enchToId)){ //this should never happen, so we treat it as an exceptional condition throw new \InvalidArgumentException("Enchantment does not have a mapped ID"); } return $this->enchToId[spl_object_id($enchantment)]; } }