diff --git a/src/command/defaults/WhitelistCommand.php b/src/command/defaults/WhitelistCommand.php index 2fdf5a1fa..3f60f8efa 100644 --- a/src/command/defaults/WhitelistCommand.php +++ b/src/command/defaults/WhitelistCommand.php @@ -29,6 +29,7 @@ use pocketmine\command\utils\InvalidCommandSyntaxException; use pocketmine\lang\KnownTranslationFactory; use pocketmine\permission\DefaultPermissionNames; use pocketmine\player\Player; +use pocketmine\Server; use function count; use function implode; use function sort; @@ -62,14 +63,20 @@ class WhitelistCommand extends VanillaCommand{ switch(strtolower($args[0])){ case "reload": if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_RELOAD)){ - $sender->getServer()->getWhitelisted()->reload(); + $server = $sender->getServer(); + $server->getWhitelisted()->reload(); + if($server->hasWhitelist()){ + $this->kickNonWhitelistedPlayers($server); + } Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_reloaded()); } return true; case "on": if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_ENABLE)){ - $sender->getServer()->getConfigGroup()->setConfigBool("white-list", true); + $server = $sender->getServer(); + $server->getConfigGroup()->setConfigBool("white-list", true); + $this->kickNonWhitelistedPlayers($server); Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_enabled()); } @@ -116,7 +123,11 @@ class WhitelistCommand extends VanillaCommand{ return true; case "remove": if($this->testPermission($sender, DefaultPermissionNames::COMMAND_WHITELIST_REMOVE)){ - $sender->getServer()->removeWhitelist($args[1]); + $server = $sender->getServer(); + $server->removeWhitelist($args[1]); + if(!$server->isWhitelisted($args[1])){ + $server->getPlayerExact($args[1])?->kick("Server whitelisted."); + } Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_remove_success($args[1])); } @@ -126,4 +137,12 @@ class WhitelistCommand extends VanillaCommand{ throw new InvalidCommandSyntaxException(); } + + private function kickNonWhitelistedPlayers(Server $server) : void{ + foreach($server->getOnlinePlayers() as $player){ + if(!$server->isWhitelisted($player->getName())){ + $player->kick("Server whitelisted."); + } + } + } }