diff --git a/src/command/defaults/EnchantCommand.php b/src/command/defaults/EnchantCommand.php index 08e959a4f..3e53a55fb 100644 --- a/src/command/defaults/EnchantCommand.php +++ b/src/command/defaults/EnchantCommand.php @@ -26,7 +26,7 @@ namespace pocketmine\command\defaults; use pocketmine\command\CommandSender; use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\item\enchantment\EnchantmentInstance; -use pocketmine\item\enchantment\VanillaEnchantments; +use pocketmine\item\enchantment\StringToEnchantmentParser; use pocketmine\lang\KnownTranslationFactory; use pocketmine\permission\DefaultPermissionNames; use pocketmine\utils\TextFormat; @@ -66,9 +66,8 @@ class EnchantCommand extends VanillaCommand{ return true; } - try{ - $enchantment = VanillaEnchantments::fromString($args[1]); - }catch(\InvalidArgumentException $e){ + $enchantment = StringToEnchantmentParser::getInstance()->parse($args[1]); + if($enchantment === null){ $sender->sendMessage(KnownTranslationFactory::commands_enchant_notFound($args[1])); return true; } diff --git a/src/item/enchantment/StringToEnchantmentParser.php b/src/item/enchantment/StringToEnchantmentParser.php new file mode 100644 index 000000000..2205f12ff --- /dev/null +++ b/src/item/enchantment/StringToEnchantmentParser.php @@ -0,0 +1,66 @@ + + */ +final class StringToEnchantmentParser extends StringToTParser{ + use SingletonTrait; + + private static function make() : self{ + $result = new self; + + $result->register("blast_protection", fn() => VanillaEnchantments::BLAST_PROTECTION()); + $result->register("efficiency", fn() => VanillaEnchantments::EFFICIENCY()); + $result->register("feather_falling", fn() => VanillaEnchantments::FEATHER_FALLING()); + $result->register("fire_aspect", fn() => VanillaEnchantments::FIRE_ASPECT()); + $result->register("fire_protection", fn() => VanillaEnchantments::FIRE_PROTECTION()); + $result->register("flame", fn() => VanillaEnchantments::FLAME()); + $result->register("infinity", fn() => VanillaEnchantments::INFINITY()); + $result->register("knockback", fn() => VanillaEnchantments::KNOCKBACK()); + $result->register("mending", fn() => VanillaEnchantments::MENDING()); + $result->register("power", fn() => VanillaEnchantments::POWER()); + $result->register("projectile_protection", fn() => VanillaEnchantments::PROJECTILE_PROTECTION()); + $result->register("protection", fn() => VanillaEnchantments::PROTECTION()); + $result->register("punch", fn() => VanillaEnchantments::PUNCH()); + $result->register("respiration", fn() => VanillaEnchantments::RESPIRATION()); + $result->register("sharpness", fn() => VanillaEnchantments::SHARPNESS()); + $result->register("silk_touch", fn() => VanillaEnchantments::SILK_TOUCH()); + $result->register("thorns", fn() => VanillaEnchantments::THORNS()); + $result->register("unbreaking", fn() => VanillaEnchantments::UNBREAKING()); + $result->register("vanishing", fn() => VanillaEnchantments::VANISHING()); + + return $result; + } + + public function parse(string $input) : ?Enchantment{ + return parent::parse($input); + } +} \ No newline at end of file