diff --git a/src/command/defaults/EffectCommand.php b/src/command/defaults/EffectCommand.php index 84fa8585e..7b2541ea7 100644 --- a/src/command/defaults/EffectCommand.php +++ b/src/command/defaults/EffectCommand.php @@ -26,7 +26,7 @@ namespace pocketmine\command\defaults; use pocketmine\command\CommandSender; use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\entity\effect\EffectInstance; -use pocketmine\entity\effect\VanillaEffects; +use pocketmine\entity\effect\StringToEffectParser; use pocketmine\lang\KnownTranslationFactory; use pocketmine\permission\DefaultPermissionNames; use pocketmine\utils\Limits; @@ -69,9 +69,8 @@ class EffectCommand extends VanillaCommand{ return true; } - try{ - $effect = VanillaEffects::fromString($args[1]); - }catch(\InvalidArgumentException $e){ + $effect = StringToEffectParser::getInstance()->parse($args[1]); + if($effect === null){ $sender->sendMessage(KnownTranslationFactory::commands_effect_notFound($args[1])->prefix(TextFormat::RED)); return true; } diff --git a/src/entity/effect/StringToEffectParser.php b/src/entity/effect/StringToEffectParser.php new file mode 100644 index 000000000..b35ff68fc --- /dev/null +++ b/src/entity/effect/StringToEffectParser.php @@ -0,0 +1,73 @@ + + */ +final class StringToEffectParser extends StringToTParser{ + use SingletonTrait; + + private static function make() : self{ + $result = new self; + + $result->register("absorption", fn() => VanillaEffects::ABSORPTION()); + $result->register("blindness", fn() => VanillaEffects::BLINDNESS()); + $result->register("conduit_power", fn() => VanillaEffects::CONDUIT_POWER()); + $result->register("fatal_poison", fn() => VanillaEffects::FATAL_POISON()); + $result->register("fire_resistance", fn() => VanillaEffects::FIRE_RESISTANCE()); + $result->register("haste", fn() => VanillaEffects::HASTE()); + $result->register("health_boost", fn() => VanillaEffects::HEALTH_BOOST()); + $result->register("hunger", fn() => VanillaEffects::HUNGER()); + $result->register("instant_damage", fn() => VanillaEffects::INSTANT_DAMAGE()); + $result->register("instant_health", fn() => VanillaEffects::INSTANT_HEALTH()); + $result->register("invisibility", fn() => VanillaEffects::INVISIBILITY()); + $result->register("jump_boost", fn() => VanillaEffects::JUMP_BOOST()); + $result->register("levitation", fn() => VanillaEffects::LEVITATION()); + $result->register("mining_fatigue", fn() => VanillaEffects::MINING_FATIGUE()); + $result->register("nausea", fn() => VanillaEffects::NAUSEA()); + $result->register("night_vision", fn() => VanillaEffects::NIGHT_VISION()); + $result->register("poison", fn() => VanillaEffects::POISON()); + $result->register("regeneration", fn() => VanillaEffects::REGENERATION()); + $result->register("resistance", fn() => VanillaEffects::RESISTANCE()); + $result->register("saturation", fn() => VanillaEffects::SATURATION()); + $result->register("slowness", fn() => VanillaEffects::SLOWNESS()); + $result->register("speed", fn() => VanillaEffects::SPEED()); + $result->register("strength", fn() => VanillaEffects::STRENGTH()); + $result->register("water_breathing", fn() => VanillaEffects::WATER_BREATHING()); + $result->register("weakness", fn() => VanillaEffects::WEAKNESS()); + $result->register("wither", fn() => VanillaEffects::WITHER()); + + return $result; + } + + public function parse(string $input) : ?Effect{ + return parent::parse($input); + } +} \ No newline at end of file