PocketMine-MP 5.35.1 git-f412a390b8f63d0311cc1d1c81046404153b8440
Loading...
Searching...
No Matches
WhitelistCommand.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\command\defaults;
25
34use function count;
35use function implode;
36use function sort;
37use function strtolower;
38use const SORT_STRING;
39
41
42 public function __construct(string $namespace, string $name){
43 parent::__construct(
44 $namespace,
45 $name,
46 KnownTranslationFactory::pocketmine_command_whitelist_description(),
47 KnownTranslationFactory::commands_whitelist_usage()
48 );
49 $this->setPermissions([
50 DefaultPermissionNames::COMMAND_WHITELIST_RELOAD,
51 DefaultPermissionNames::COMMAND_WHITELIST_ENABLE,
52 DefaultPermissionNames::COMMAND_WHITELIST_DISABLE,
53 DefaultPermissionNames::COMMAND_WHITELIST_LIST,
54 DefaultPermissionNames::COMMAND_WHITELIST_ADD,
55 DefaultPermissionNames::COMMAND_WHITELIST_REMOVE
56 ]);
57 }
58
59 public function execute(CommandSender $sender, string $commandLabel, array $args){
60 if(count($args) === 0){
62 }
63 $testPermissionCtx = $commandLabel . " " . $args[0];
64 if(count($args) === 1){
65 switch(strtolower($args[0])){
66 case "reload":
67 if($this->testPermission($testPermissionCtx, $sender, DefaultPermissionNames::COMMAND_WHITELIST_RELOAD)){
68 $server = $sender->getServer();
69 $server->getWhitelisted()->reload();
70 if($server->hasWhitelist()){
71 $this->kickNonWhitelistedPlayers($server);
72 }
73 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_reloaded());
74 }
75
76 return true;
77 case "on":
78 if($this->testPermission($testPermissionCtx, $sender, DefaultPermissionNames::COMMAND_WHITELIST_ENABLE)){
79 $server = $sender->getServer();
80 $server->getConfigGroup()->setConfigBool(ServerProperties::WHITELIST, true);
81 $this->kickNonWhitelistedPlayers($server);
82 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_enabled());
83 }
84
85 return true;
86 case "off":
87 if($this->testPermission($testPermissionCtx, $sender, DefaultPermissionNames::COMMAND_WHITELIST_DISABLE)){
88 $sender->getServer()->getConfigGroup()->setConfigBool(ServerProperties::WHITELIST, false);
89 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_disabled());
90 }
91
92 return true;
93 case "list":
94 if($this->testPermission($testPermissionCtx, $sender, DefaultPermissionNames::COMMAND_WHITELIST_LIST)){
95 $entries = $sender->getServer()->getWhitelisted()->getAll(true);
96 sort($entries, SORT_STRING);
97 $result = implode(", ", $entries);
98 $count = (string) count($entries);
99
100 $sender->sendMessage(KnownTranslationFactory::commands_whitelist_list($count, $count));
101 $sender->sendMessage($result);
102 }
103
104 return true;
105
106 case "add":
107 $sender->sendMessage(KnownTranslationFactory::commands_generic_usage(KnownTranslationFactory::commands_whitelist_add_usage()));
108 return true;
109
110 case "remove":
111 $sender->sendMessage(KnownTranslationFactory::commands_generic_usage(KnownTranslationFactory::commands_whitelist_remove_usage()));
112 return true;
113 }
114 }elseif(count($args) === 2){
115 if(!Player::isValidUserName($args[1])){
117 }
118 switch(strtolower($args[0])){
119 case "add":
120 if($this->testPermission($testPermissionCtx, $sender, DefaultPermissionNames::COMMAND_WHITELIST_ADD)){
121 $sender->getServer()->addWhitelist($args[1]);
122 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_add_success($args[1]));
123 }
124
125 return true;
126 case "remove":
127 if($this->testPermission($testPermissionCtx, $sender, DefaultPermissionNames::COMMAND_WHITELIST_REMOVE)){
128 $server = $sender->getServer();
129 $server->removeWhitelist($args[1]);
130 if(!$server->isWhitelisted($args[1])){
131 $server->getPlayerExact($args[1])?->kick(KnownTranslationFactory::pocketmine_disconnect_kick(KnownTranslationFactory::pocketmine_disconnect_whitelisted()));
132 }
133 Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_whitelist_remove_success($args[1]));
134 }
135
136 return true;
137 }
138 }
139
141 }
142
143 private function kickNonWhitelistedPlayers(Server $server) : void{
144 $message = KnownTranslationFactory::pocketmine_disconnect_kick(KnownTranslationFactory::pocketmine_disconnect_whitelisted());
145 foreach($server->getOnlinePlayers() as $player){
146 if(!$server->isWhitelisted($player->getName())){
147 $player->kick($message);
148 }
149 }
150 }
151}
testPermission(string $context, CommandSender $target, ?string $permission=null)
Definition Command.php:125
setPermissions(array $permissions)
Definition Command.php:106
execute(CommandSender $sender, string $commandLabel, array $args)