setPermission("pocketmine.command.effect"); } public function execute(CommandSender $sender, string $commandLabel, array $args){ if(!$this->testPermission($sender)){ return true; } if(count($args) < 2){ throw new InvalidCommandSyntaxException(); } $player = $sender->getServer()->getPlayer($args[0]); if($player === null){ $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.player.notFound")); return true; } if(strtolower($args[1]) === "clear"){ foreach($player->getEffects() as $effect){ $player->removeEffect($effect->getId()); } $sender->sendMessage(new TranslationContainer("commands.effect.success.removed.all", [$player->getDisplayName()])); return true; } $effect = Effect::getEffectByName($args[1]); if($effect === null){ $effect = Effect::getEffect((int) $args[1]); } if($effect === null){ $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.effect.notFound", [(string) $args[1]])); return true; } $amplification = 0; if(count($args) >= 3){ if(($d = $this->getBoundedInt($sender, $args[2], 0, (int) (INT32_MAX / 20))) === null){ return false; } $duration = $d * 20; //ticks }else{ $duration = null; } if(count($args) >= 4){ $amplification = $this->getBoundedInt($sender, $args[3], 0, 255); if($amplification === null){ return false; } } $visible = true; if(count($args) >= 5){ $v = strtolower($args[4]); if($v === "on" or $v === "true" or $v === "t" or $v === "1"){ $visible = false; } } if($duration === 0){ if(!$player->hasEffect($effect->getId())){ if(count($player->getEffects()) === 0){ $sender->sendMessage(new TranslationContainer("commands.effect.failure.notActive.all", [$player->getDisplayName()])); }else{ $sender->sendMessage(new TranslationContainer("commands.effect.failure.notActive", [$effect->getName(), $player->getDisplayName()])); } return true; } $player->removeEffect($effect->getId()); $sender->sendMessage(new TranslationContainer("commands.effect.success.removed", [$effect->getName(), $player->getDisplayName()])); }else{ $instance = new EffectInstance($effect, $duration, $amplification, $visible); $player->addEffect($instance); self::broadcastCommandMessage($sender, new TranslationContainer("%commands.effect.success", [$effect->getName(), $instance->getAmplifier(), $player->getDisplayName(), $instance->getDuration() / 20, $effect->getId()])); } return true; } }