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; } $effectManager = $player->getEffects(); if(strtolower($args[1]) === "clear"){ $effectManager->clear(); $sender->sendMessage(new TranslationContainer("commands.effect.success.removed.all", [$player->getDisplayName()])); return true; } $effect = VanillaEffects::fromString($args[1]); if($effect === null){ $effect = VanillaEffects::byMcpeId((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(!$effectManager->has($effect)){ if(count($effectManager->all()) === 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; } $effectManager->remove($effect); $sender->sendMessage(new TranslationContainer("commands.effect.success.removed", [$effect->getName(), $player->getDisplayName()])); }else{ $instance = new EffectInstance($effect, $duration, $amplification, $visible); $effectManager->add($instance); self::broadcastCommandMessage($sender, new TranslationContainer("%commands.effect.success", [$effect->getName(), $instance->getAmplifier(), $player->getDisplayName(), $instance->getDuration() / 20, $effect->getId()])); } return true; } }