· 6 years ago · Mar 15, 2020, 09:20 AM
1Skip to content
2 SonsaYT04 / TempBanUI
3Sign up
4Code Issues 0 Pull requests 0 Projects 0 Actions Wiki Security Pulse
5Join GitHub today
6GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
7
8TempBanUI/src/SonsaYT/TempBanUI/Main.php
9@SonsaYT04 SonsaYT04 Remove useless code
10b8f4e44 on 3 Feb 2019
11280 lines (266 sloc) 10.7 KB
12
13<?php
14
15namespace SonsaYT\TempBanUI;
16
17use pocketmine\plugin\PluginBase;
18use pocketmine\Player;
19use pocketmine\command\Command;
20use pocketmine\command\CommandSender;
21use pocketmine\event\Listener;
22use pocketmine\event\player\PlayerPreLoginEvent;
23use pocketmine\event\entity\EntityDamageEvent;
24use pocketmine\event\entity\EntityDamageByEntityEvent;
25use pocketmine\utils\Config;
26use pocketmine\utils\TextFormat;
27
28class Main extends PluginBase implements Listener {
29
30 public $staffList = [];
31 public $targetPlayer = [];
32
33 public function onEnable() {
34 $this->getServer()->getPluginManager()->registerEvents($this, $this);
35 @mkdir($this->getDataFolder());
36 $this->db = new \SQLite3($this->getDataFolder() . "TempBanUI.db");
37 $this->db->exec("CREATE TABLE IF NOT EXISTS banPlayers(player TEXT PRIMARY KEY, banTime INT, reason TEXT, staff TEXT);");
38 $this->message = (new Config($this->getDataFolder() . "Message.yml", Config::YAML, array(
39 "BroadcastBanMessage" => "§b{player} §dhas been banned by §b{staff} §dfor §b{day} §dday/s, §b{hour} §dhour/s, §b{minute} §dminute/s. §dReason: §b{reason}",
40 "KickBanMessage" => "§dYou are banned by §b{staff} §dfor §b{day} §dday/s, §b{hour} §dhour/s, §b{minute} §dminute/s. \n§dReason: §b{reason}",
41 "LoginBanMessage" => "§dYou are still banned for §b{day} §dday/s, §b{hour} §dhour/s, §b{minute} §dminute/s, §b{second} §dsecond/s. \n§dReason: §b{reason} \n§dBanned by: §b{staff}",
42 "BanMyself" => "§cYou can't ban yourself",
43 "BanModeOn" => "§bBan mode on",
44 "BanModeOff" => "§cBan mode off",
45 "NoBanPlayers" => "§bNo ban players",
46 "UnBanPlayer" => "§b{player} has been unban",
47 "AutoUnBanPlayer" => "§b{player} has been auto unban. Ban time already done",
48 "BanListTitle" => "§lBAN PLAYER LIST",
49 "BanListContent" => "Choose player",
50 "PlayerListTitle" => "§lPLAYER LIST",
51 "PlayerListContent" => "Choose player",
52 "InfoUIContent" => "§dInformation: \nDay: §b{day} \n§dHour: §b{hour} \n§dMinute: §b{minute} \n§dSecond: §b{second} \n§dReason: §b{reason} \n§dBanned by: §b{staff}\n\n\n",
53 "InfoUIUnBanButton" => "Unban Player",
54 )))->getAll();
55 }
56
57 public function onCommand(CommandSender $sender, Command $cmd, string $label,array $args) : bool {
58 switch($cmd->getName()){
59 case "tban":
60 if($sender instanceof Player) {
61 if($sender->hasPermission("use.tban")){
62 if(count($args) == 0){
63 $this->openPlayerListUI($sender);
64 }
65 if(count($args) == 1){
66 if($args[0] == "on"){
67 if(!isset($this->staffList[$sender->getName()])){
68 $this->staffList[$sender->getName()] = $sender;
69 $sender->sendMessage($this->message["BanModeOn"]);
70 }
71 } else if ($args[0] == "off"){
72 if(isset($this->staffList[$sender->getName()])){
73 unset($this->staffList[$sender->getName()]);
74 $sender->sendMessage($this->message["BanModeOff"]);
75 }
76 } else {
77 $this->targetPlayer[$sender->getName()] = $args[0];
78 $this->openTbanUI($sender);
79 }
80 }
81 }
82 }
83 else{
84 $sender->sendMessage(TextFormat::RED . "Use this Command in-game.");
85 return true;
86 }
87 break;
88 case "tcheck":
89 if($sender instanceof Player) {
90 if($sender->hasPermission("use.tcheck")){
91 $this->openTcheckUI($sender);
92 }
93 }
94 break;
95 }
96 return true;
97 }
98
99 public function openPlayerListUI($player){
100 $api = $this->getServer()->getPluginManager()->getPlugin("FormAPI");
101 $form = $api->createSimpleForm(function (Player $player, $data = null){
102 $target = $data;
103 if($target === null){
104 return true;
105 }
106 $this->targetPlayer[$player->getName()] = $target;
107 $this->openTbanUI($player);
108 });
109 $form->setTitle($this->message["PlayerListTitle"]);
110 $form->setContent($this->message["PlayerListContent"]);
111 foreach($this->getServer()->getOnlinePlayers() as $online){
112 $form->addButton($online->getName(), -1, "", $online->getName());
113 }
114 $form->sendToPlayer($player);
115 return $form;
116 }
117
118 public function hitBan(EntityDamageEvent $event){
119 if($event instanceof EntityDamageByEntityEvent) {
120 $damager = $event->getDamager();
121 $victim = $event->getEntity();
122 if($damager instanceof Player && $victim instanceof Player){
123 if(isset($this->staffList[$damager->getName()])){
124 $event->setCancelled(true);
125 $this->targetPlayer[$damager->getName()] = $victim->getName();
126 $this->openTbanUI($damager);
127 }
128 }
129 }
130 }
131
132 public function openTbanUI($player){
133 $api = $this->getServer()->getPluginManager()->getPlugin("FormAPI");
134 $form = $api->createCustomForm(function (Player $player, array $data = null){
135 $result = $data[0];
136 if($result === null){
137 return true;
138 }
139 if(isset($this->targetPlayer[$player->getName()])){
140 if($this->targetPlayer[$player->getName()] == $player->getName()){
141 $player->sendMessage($this->message["BanMyself"]);
142 return true;
143 }
144 $now = time();
145 $day = ($data[1] * 86400);
146 $hour = ($data[2] * 3600);
147 if($data[3] > 1){
148 $min = ($data[3] * 60);
149 } else {
150 $min = 60;
151 }
152 $banTime = $now + $day + $hour + $min;
153 $banInfo = $this->db->prepare("INSERT OR REPLACE INTO banPlayers (player, banTime, reason, staff) VALUES (:player, :banTime, :reason, :staff);");
154 $banInfo->bindValue(":player", $this->targetPlayer[$player->getName()]);
155 $banInfo->bindValue(":banTime", $banTime);
156 $banInfo->bindValue(":reason", $data[4]);
157 $banInfo->bindValue(":staff", $player->getName());
158 $banInfo->execute();
159 $target = $this->getServer()->getPlayerExact($this->targetPlayer[$player->getName()]);
160 if($target instanceof Player){
161 $target->kick(str_replace(["{day}", "{hour}", "{minute}", "{reason}", "{staff}"], [$data[1], $data[2], $data[3], $data[4], $player->getName()], $this->message["KickBanMessage"]));
162 }
163 $this->getServer()->broadcastMessage(str_replace(["{player}", "{day}", "{hour}", "{minute}", "{reason}", "{staff}"], [$this->targetPlayer[$player->getName()], $data[1], $data[2], $data[3], $data[4], $player->getName()], $this->message["BroadcastBanMessage"]));
164 unset($this->targetPlayer[$player->getName()]);
165
166 }
167 });
168 $list[] = $this->targetPlayer[$player->getName()];
169 $form->setTitle(TextFormat::BOLD . "TEMPORARY BAN");
170 $form->addDropdown("\nTarget", $list);
171 $form->addSlider("Day/s", 0, 30, 1);
172 $form->addSlider("Hour/s", 0, 24, 1);
173 $form->addSlider("Minute/s", 0, 60, 5);
174 $form->addInput("Reason");
175 $form->sendToPlayer($player);
176 return $form;
177 }
178
179 public function openTcheckUI($player){
180 $api = $this->getServer()->getPluginManager()->getPlugin("FormAPI");
181 $form = $api->createSimpleForm(function (Player $player, $data = null){
182 if($data === null){
183 return true;
184 }
185 $this->targetPlayer[$player->getName()] = $data;
186 $this->openInfoUI($player);
187 });
188 $banInfo = $this->db->query("SELECT * FROM banPlayers;");
189 $array = $banInfo->fetchArray(SQLITE3_ASSOC);
190 if (empty($array)) {
191 $player->sendMessage($this->message["NoBanPlayers"]);
192 return true;
193 }
194 $form->setTitle($this->message["BanListTitle"]);
195 $form->setContent($this->message["BanListContent"]);
196 $banInfo = $this->db->query("SELECT * FROM banPlayers;");
197 $i = -1;
198 while ($resultArr = $banInfo->fetchArray(SQLITE3_ASSOC)) {
199 $j = $i + 1;
200 $banPlayer = $resultArr['player'];
201 $form->addButton(TextFormat::BOLD . "$banPlayer", -1, "", $banPlayer);
202 $i = $i + 1;
203 }
204 $form->sendToPlayer($player);
205 return $form;
206 }
207
208 public function openInfoUI($player){
209 $api = $this->getServer()->getPluginManager()->getPlugin("FormAPI");
210 $form = $api->createSimpleForm(function (Player $player, int $data = null){
211 $result = $data;
212 if($result === null){
213 return true;
214 }
215 switch($result){
216 case 0:
217 $banplayer = $this->targetPlayer[$player->getName()];
218 $banInfo = $this->db->query("SELECT * FROM banPlayers WHERE player = '$banplayer';");
219 $array = $banInfo->fetchArray(SQLITE3_ASSOC);
220 if (!empty($array)) {
221 $this->db->query("DELETE FROM banPlayers WHERE player = '$banplayer';");
222 $player->sendMessage(str_replace(["{player}"], [$banplayer], $this->message["UnBanPlayer"]));
223 }
224 unset($this->targetPlayer[$player->getName()]);
225 break;
226 }
227 });
228 $banPlayer = $this->targetPlayer[$player->getName()];
229 $banInfo = $this->db->query("SELECT * FROM banPlayers WHERE player = '$banPlayer';");
230 $array = $banInfo->fetchArray(SQLITE3_ASSOC);
231 if (!empty($array)) {
232 $banTime = $array['banTime'];
233 $reason = $array['reason'];
234 $staff = $array['staff'];
235 $now = time();
236 if($banTime < $now){
237 $banplayer = $this->targetPlayer[$player->getName()];
238 $banInfo = $this->db->query("SELECT * FROM banPlayers WHERE player = '$banplayer';");
239 $array = $banInfo->fetchArray(SQLITE3_ASSOC);
240 if (!empty($array)) {
241 $this->db->query("DELETE FROM banPlayers WHERE player = '$banplayer';");
242 $player->sendMessage(str_replace(["{player}"], [$banplayer], $this->message["AutoUnBanPlayer"]));
243 }
244 unset($this->targetPlayer[$player->getName()]);
245 return true;
246 }
247 $remainingTime = $banTime - $now;
248 $day = floor($remainingTime / 86400);
249 $hourSeconds = $remainingTime % 86400;
250 $hour = floor($hourSeconds / 3600);
251 $minuteSec = $hourSeconds % 3600;
252 $minute = floor($minuteSec / 60);
253 $remainingSec = $minuteSec % 60;
254 $second = ceil($remainingSec);
255 }
256 $form->setTitle(TextFormat::BOLD . $banPlayer);
257 $form->setContent(str_replace(["{day}", "{hour}", "{minute}", "{second}", "{reason}", "{staff}"], [$day, $hour, $minute, $second, $reason, $staff], $this->message["InfoUIContent"]));
258 $form->addButton($this->message["InfoUIUnBanButton"]);
259 $form->sendToPlayer($player);
260 return $form;
261 }
262
263 public function onPlayerLogin(PlayerPreLoginEvent $event){
264 $player = $event->getPlayer();
265 $banplayer = $player->getName();
266 $banInfo = $this->db->query("SELECT * FROM banPlayers WHERE player = '$banplayer';");
267 $array = $banInfo->fetchArray(SQLITE3_ASSOC);
268 if (!empty($array)) {
269 $banTime = $array['banTime'];
270 $reason = $array['reason'];
271 $staff = $array['staff'];
272 $now = time();
273 if($banTime > $now){
274 $remainingTime = $banTime - $now;
275 $day = floor($remainingTime / 86400);
276 $hourSeconds = $remainingTime % 86400;
277 $hour = floor($hourSeconds / 3600);
278 $minuteSec = $hourSeconds % 3600;
279 $minute = floor($minuteSec / 60);
280 $remainingSec = $minuteSec % 60;
281 $second = ceil($remainingSec);
282 $player->close("", str_replace(["{day}", "{hour}", "{minute}", "{second}", "{reason}", "{staff}"], [$day, $hour, $minute, $second, $reason, $staff], $this->message["LoginBanMessage"]));
283 } else {
284 $this->db->query("DELETE FROM banPlayers WHERE player = '$banplayer';");
285 }
286 }
287 if(isset($this->staffList[$player->getName()])){
288 unset($this->staffList[$player->getName()]);
289 }
290 }
291
292}
293© 2020 GitHub, Inc.
294Terms
295Privacy
296Security
297Status
298Help
299Contact GitHub
300Pricing
301API
302Training
303Blog
304About