Основной код (указывается в AntiChat.php):
<?php
namespace AntiCheat;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerMoveEvent;
use pocketmine\Player;
use pocketmine\Server;
use pocketmine\utils\Config;
class AntiCheat extends PluginBase implements Listener {
public function onEnable(){
$this->getLogger()->info("AntiCheat включен. Автор: vk.com/qw1nti");
$this->getServer()->getPluginManager()->registerEvents($this, $this);
$this->config = new Config($this->getDataFolder()."config.yml", Config::YAML, array(
"enable-check-fly" => true,
"enable-check-speed" => true,
"enable-check-nuker" => true,
"enable-check-xray" => true,
"punish-method" => "kick",
"kick-message" => "You were kicked for using cheats",
"ban-message" => "You were banned for using cheats",
"check-interval" => 5
));
}
public function onDisable(){
$this->getLogger()->info("AntiCheat Disabled!");
}
public function onPlayerMove(PlayerMoveEvent $event){
$player = $event->getPlayer();
$flyEnabled = $this->config->get("enable-check-fly");
$speedEnabled = $this->config->get("enable-check-speed");
$nukerEnabled = $this->config->get("enable-check-nuker");
$xrayEnabled = $this->config->get("enable-check-xray");
$punishMethod = $this->config->get("punish-method");
$kickMessage = $this->config->get("kick-message");
$banMessage = $this->config->get("ban-message");
if($flyEnabled && $player->isCreative() === false && $player->isSpectator() === false) {
$this->checkFly($player, $punishMethod, $kickMessage, $banMessage);
}
if($speedEnabled && $player->isCreative() === false && $player->isSpectator() === false) {
$this->checkSpeed($player, $punishMethod, $kickMessage, $banMessage);
}
if($nukerEnabled && $player->isCreative() === false && $player->isSpectator() === false) {
$this->checkNuker($player, $punishMethod, $kickMessage, $banMessage);
}
if($xrayEnabled && $player->isCreative() === false && $player->isSpectator() === false) {
$this->checkXRay($player, $punishMethod, $kickMessage, $banMessage);
}
}
public function checkFly(Player $player, $punishMethod, $kickMessage, $banMessage) {
if($player->getAllowFlight() === true && $player->isFlying() === true){
if($punishMethod == "kick"){
$player->kick($kickMessage);
}
if($punishMethod == "ban"){
$player->kick($banMessage);
$player->setBanned(true);
}
}
}
public function checkSpeed(Player $player, $punishMethod, $kickMessage, $banMessage) {
$threshold = 1.5;
$distance = sqrt(($player->getX() - $player->getPreviousPosition()->getX()) 2 + ($player->getY() - $player->getPreviousPosition()->getY()) 2 + ($player->getZ() - $player->getPreviousPosition()->getZ()) ** 2 );
$speed = $distance / $this->config->get("check-interval");
if($speed > $threshold){
if($punishMethod == "kick"){
$player->kick($kickMessage);
}
if($punishMethod == "ban"){
$player->kick($banMessage);
$player->setBanned(true);
}
}
}
public function checkNuker(Player $player, $punishMethod, $kickMessage, $banMessage) {
$block = $player->getLevel()->getBlock($player->getTargetBlock(4)->asVector3());
if($block->getId() != 0) {
if($punishMethod == "kick"){
$player->kick($kickMessage);
}
if($punishMethod == "ban"){
$player->kick($banMessage);
$player->setBanned(true);
}
}
}
public function checkXRay(Player $player, $punishMethod, $kickMessage, $banMessage) {
$block = $player->getLevel()->getBlock($player->asVector3());
for($i = 0; $i < 5; $i++) {
$block = $block->down();
if($block->getId() != 0){
if($punishMethod == "kick"){
$player->kick($kickMessage);
}
if($punishMethod == "ban"){
$player->kick($banMessage);
$player->setBanned(true);
}
break;
}
}
}
}
• Пояснение кода (этот плагин AntiCheat написан на языке программирования PHP и использует следующие классы и интерфейсы):
– namespace AntiCheat; - обозначает, что классы в этом файле находятся в пространстве имен "AntiCheat";
– use pocketmine\plugin\PluginBase; - импортирует класс "PluginBase" из пространства имен "pocketmine\plugin";
– use pocketmine\event\Listener; - импортирует интерфейс "Listener" из пространства имен; "pocketmine\event".
– use pocketmine\event\player\PlayerMoveEvent; - импортирует класс "PlayerMoveEvent" из пространства имен "pocketmine\event\player";
– use pocketmine\Player; - импортирует класс "Player" из пространства имен "pocketmine";
– use pocketmine\Server; - импортирует класс "Server" из пространства имен "pocketmine";
– use pocketmine\utils\Config; - импортирует класс "Config" из пространства имен "pocketmine\utils".
• Класс AntiCheat наследует класс PluginBase и реализует интерфейс Listener. Он содержит следующие методы:
– onEnable() - метод, который вызывается при загрузке плагина. Он регистрирует этот класс как слушателя событий и создает новый объект Config, который используется для хранения настроек плагина;
– onDisable() - метод, который вызывается при выгрузке плагина. Он выводит сообщение в лог сервера о том, что плагин был отключен;
– onPlayerMove(PlayerMoveEvent $event) - метод, который вызывается при каждом перемещении игрока. Он проверяет игрока на использование некорректных действий, таких как полет, быстрое перемещение, уничтожение блоков и использование X-Ray. Если игрок обнаруживается нарушающим правила, то его действие может быть наказано в соответствии с настройками плагина;
– checkFly(Player $player, $punishMethod, $kickMessage, $banMessage) - метод, который проверяет игрока на использование полета. Если игрок нарушает правила, то он может быть выгнан с сервера или забанен;
– checkSpeed(Player $player, $punishMethod, $kickMessage, $banMessage) - метод, который проверяет игрока на использование быстрого перемещения. Если игрок нарушает правила, то он может быть выгнан с сервера или забанен;
– checkNuker(Player $player, $punishMethod, $kickMessage, $banMessage) - метод, который проверяет игрока на использование уничтожения блоков. Если игрок нарушает правила, то он может быть выгнан с сервера или забанен;
– checkXRay(Player $player, $punishMethod, $kickMessage, $banMessage) - метод, который проверяет игрока на использование X-Ray. Если игрок нарушает правила, то он может быть выгнан с сервера или забанен.
ХАХАХАХ, ска пиздeц