22declare(strict_types=1);
24namespace pocketmine\command\defaults;
32use
function array_shift;
35use
function inet_pton;
39 public function __construct(){
42 KnownTranslationFactory::pocketmine_command_ban_ip_description(),
43 KnownTranslationFactory::commands_banip_usage()
45 $this->setPermission(DefaultPermissionNames::COMMAND_BAN_IP);
49 if(count($args) === 0){
53 $value = array_shift($args);
54 $reason = implode(
" ", $args);
56 if(inet_pton($value) !==
false){
57 $this->processIPBan($value, $sender, $reason);
59 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_banip_success($value));
61 if(($player = $sender->getServer()->getPlayerByPrefix($value)) instanceof
Player){
62 $ip = $player->getNetworkSession()->getIp();
63 $this->processIPBan($ip, $sender, $reason);
65 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_banip_success_players($ip, $player->getName()));
67 $sender->sendMessage(KnownTranslationFactory::commands_banip_invalid());
76 private function processIPBan(
string $ip,
CommandSender $sender,
string $reason) : void{
77 $sender->getServer()->getIPBans()->addBan($ip, $reason, null, $sender->getName());
79 foreach($sender->getServer()->getOnlinePlayers() as $player){
80 if($player->getNetworkSession()->getIp() === $ip){
81 $player->kick(KnownTranslationFactory::pocketmine_disconnect_ban($reason !==
"" ? $reason : KnownTranslationFactory::pocketmine_disconnect_ban_ip()));
85 $sender->getServer()->getNetwork()->blockAddress($ip, -1);
execute(CommandSender $sender, string $commandLabel, array $args)