setPermission(DefaultPermissionNames::COMMAND_BAN_IP); } public function execute(CommandSender $sender, string $commandLabel, array $args){ if(count($args) === 0){ throw new InvalidCommandSyntaxException(); } $value = array_shift($args); $reason = implode(" ", $args); if(inet_pton($value) !== false){ $this->processIPBan($value, $sender, $reason); Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_banip_success($value)); }else{ if(($player = $sender->getServer()->getPlayerByPrefix($value)) instanceof Player){ $ip = $player->getNetworkSession()->getIp(); $this->processIPBan($ip, $sender, $reason); Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_banip_success_players($ip, $player->getName())); }else{ $sender->sendMessage(KnownTranslationFactory::commands_banip_invalid()); return false; } } return true; } private function processIPBan(string $ip, CommandSender $sender, string $reason) : void{ $sender->getServer()->getIPBans()->addBan($ip, $reason, null, $sender->getName()); foreach($sender->getServer()->getOnlinePlayers() as $player){ if($player->getNetworkSession()->getIp() === $ip){ $player->kick(KnownTranslationFactory::pocketmine_disconnect_ban($reason !== "" ? $reason : KnownTranslationFactory::pocketmine_disconnect_ban_ip())); } } $sender->getServer()->getNetwork()->blockAddress($ip, -1); } }