Main::onCommandPreprocess()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: InkoHX
5
 * Date: 2018/06/13
6
 * Time: 13:39
7
 */
8
9
namespace AntiCheat;
10
11
use AntiCheat\Task\CheckPlayerTask;
12
use pocketmine\event\entity\EntityDamageByEntityEvent;
13
use pocketmine\event\entity\EntityDamageEvent;
14
use pocketmine\event\Listener;
15
use pocketmine\event\player\PlayerCommandPreprocessEvent;
16
use pocketmine\event\player\PlayerToggleFlightEvent;
17
use pocketmine\event\server\DataPacketReceiveEvent;
18
use pocketmine\item\Item;
19
use pocketmine\network\mcpe\protocol\LoginPacket;
20
use pocketmine\Player;
21
use pocketmine\plugin\PluginBase;
22
23
class Main extends PluginBase implements Listener
24
{
25
    private $banapi;
26
    protected $spamplayers = [];
27
28
    public function onEnable(): void
29
    {
30
        $this->getServer()->getPluginManager()->registerEvents($this, $this);
31
        $this->banapi = $this->getServer()->getPluginManager()->getPlugin("BanAPI");
32
        $this->getScheduler()->scheduleRepeatingTask(new CheckPlayerTask($this), 20);
33
    }
34
35
    public function onToggleFlight(PlayerToggleFlightEvent $event): void
36
    {
37
        $player = $event->getPlayer();
38
        if (!$player->isOp()) {
39
            if ($event->isFlying()) {
40
                $this->banapi->addBan($player->getName(), $player->getAddress(), "Flying(飛行)", "AntiCheat", true);
41
            } else {
42
                $this->banapi->addBan($player->getName(), $player->getAddress(), "Flying(飛行)", "AntiCheat", true);
43
            }
44
        }
45
    }
46
47
    public function onReceive(DataPacketReceiveEvent $event)
48
    {
49
        $packet = $event->getPacket();
50
        if ($packet instanceof LoginPacket) {
51
            if ($packet->serverAddress === "mcpeproxy.tk" or $packet->serverAddress === "165.227.79.111") {
52
                $this->banapi->addBan($packet->username, $packet->serverAddress, "PROXY(プロキシ)", "AntiCheat", true);
53
            }
54
            if ($packet->clientId === 0) {
55
                $this->banapi->addBan($packet->username, $packet->serverAddress, "Toolbox(ツール)", "AntiCheat", true);
56
            }
57
        }
58
    }
59
60
    public function onCommandPreprocess(PlayerCommandPreprocessEvent $event)
61
    {
62
        $player = $event->getPlayer();
63
        $cooldown = microtime(true);
64
        if (isset($this->spamplayers[$player->getName()])) {
65
            if (($cooldown - $this->spamplayers[$player->getName()]['cooldown']) < 2) {
66
                $player->sendMessage("§7クールダウン中です。");
67
                $event->setCancelled(true);
68
            }
69
        }
70
        $this->spamplayers[$player->getName()]["cooldown"] = $cooldown;
71
    }
72
73
    public function onDamage(EntityDamageEvent $event)
74
    {
75
        $entity = $event->getEntity();
76
        if ($event instanceof EntityDamageByEntityEvent and $entity instanceof Player) {
77
            $damager = $event->getDamager();
78
            if ($damager instanceof Player) {
79
                if ($damager->getGamemode() === Player::CREATIVE or $damager->getInventory()->getItemInHand()->getId() === Item::BOW) {
80
                    return;
81
                }
82
                if ($damager->distance($entity) > 3.9) {
83
                    $event->setCancelled(true);
84
                }
85
            }
86
        }
87
    }
88
}
89