Слив моего плагина powercmd PM5x

Донатный Плагин PowerCmd

Для ядер pocketmine и nethergamez

Версии PM5x, NG

Команды

/top - телепорт на самый верхний блок

/tpk - телепорт к игроку

/fire - поджечь игрока

/love - показать частицы сердец

/heal - захилить игрока / себя

/food - накормить игрока / себя

/slap - подкинуть игрока в рамндомную сторону

/rotate - повернуть голову игрока в рамндомную сторону

/reload - перезагрузка сервера

/disarm - снять с игрока броню

/drophand - дрогнуть что у игрока в руке

/speed <1/5> изменяет скорость

удаление дефолтных команд nethergamez и pocketmine

Powercoust.zip

Извини, но кроме как назвать это плагин не полным пздцом я не могу. Ниже все грехи:


1. reloadPlugins(), это Самоубийство сервера

$this->plugin->getServer()->getPluginManager()->reloadPlugins();

Использование этого метода перезагрузки плагинов ХРЕНОВАЯ ИДЕЯ. В архитектуре PocketMine-MP и PHP перезагрузка плагинов (reload), это сломанная механика. Оно часто приводит к утечкам памяти, крашам из-за статических свойств и некорректной выгрузке классов. Насколько я помню, даже разрабы ядра твердят

Не используйте /reload, перезапускайте сервер!

А этот плагин не просто использует её, он делает это своей фичей.

2. Безумие в onPlayerInteract (фашизм бл)

Взгляни на этот кусок:

$allowedBlocks = ['stone', ... 'air']; // Огромный список
$blockName = strtolower($item->getName());

if (!in_array($blockName, $allowedBlocks)) {
    $event->cancel();
}

Логика проверки моё почтение. Код проверяет имя предмета в руке ($item->getName()), чтобы разрешить взаимодействие. Если я держу в руке алмазный меч (которого нет в списке $allowedBlocks) и нажимаю ПКМ по сундуку или двери, событие отменяется! Я не смогу открыть дверь с мечом в руке. Хардкод списков это вообще отдельный пзд. Вышла новая версия Minecraft с вишневыми досками? Плагин их запретит, пока ты не допишешь их вручную в код.

3. Отключение НЕОБХОДИМЫХ КОМАНД!

ЭТО САМОЕ БОЛЬНОЕ РЕШЕНИЕ, КОТОРОЕ ПРИДЕТ В ГОЛОВУ РАЗРАБОТЧИКАМ ПЛАГИНОВ.

$commandsToDisable = ['stop', 'op', 'deop', 'ban', ...];

Плагин отключает /stop, /op, /ban. Если этот плагин забагует (а он забагует, см. пункт 1), ты даже не сможешь нормально остановить сервер или выдать права, потому что он вырезал эти команды из карты команд. Надо будет лезть в VDS, и отключать через CTRL + C, или убить процесс на крайний случай. БРАВО!

4. Двойная тряска при заморозке

Есть таск:

// Каждые 5 тиков
$player->teleport($savedLocation);

И есть Event:

// При каждом движении
$event->setTo($from);

PlayerMoveEvent с отменой движения (setTo($from)), это правильный способ (хотя лучше cancel(), но setTo тоже работает). Но зачем тогда Task, который каждые 0.25 секунды телепортирует игрока?
Это вызывает джиттер (дерганье экрана) у игрока. Его клиент пытается сдвинуться, ивент откидывает его назад, а таск сверху еще раз телепортирует.

5. Изобретение велосипеда (Поиск игрока)

private function findPlayerByName(string $partialName): ?Player { ... }

ЧЕЛ, СЕРЬЕЗНО?!

Server::getInstance()->getPlayerByPrefix($name)

Существует ещё со времён API 3.0.0. Он делает ровно то же самое, но оптимизированнее и является стандартом. Зачем писать 20 строк кода, когда есть встроенный метод?

6. God Object (Божественный класс) и Switch-hell

Весь код свален в один файл Main.php. Метод onCommand превратился в гигантский switch (хотя это будет получше YandereDev, хоть где-то положительная черта).

Читать и поддерживать такой файл, не лучше (а даже хуже) ада. Команды должны быть разнесены по отдельным классам (например, class HealCommand extends Command). Я бы понимал если бы плагин был легким и простым, но это же опять пзд полный.

7. saveDefaultConfig()

МЕРТВЫЙ С*КА КОД!

$this->saveDefaultConfig();

В плагине нету каталога resources, откуда метод saveDefaultConfig() достал бы config.yml. Тогда нахуя этот метод вообще в плагине?!
Код $this->config->get(...) будет работать на дефолтных значениях (в лучшем случае) или крашнет сервер.


Там ещё дохуя всего что можно было раскритиковать, но мне стало уже морально больно дальше разбирать.

1 лайк

Я знаю что может и написано криво и да косяков много я просто сливаю свои старые плагины так что все равно спасибо что обратил внимание на ошибки и уделил время.

ии писал весь код, это пиздeц

что плохого в том что код писал ии? забил промпт в ии → получил код → провел ревью на уязвимости и т.п → профит

1 лайк

Не в случае автора этого плагина

другое дело если человек разбирается в коде, и понимает что ии пишет, и сможет попросить ии подправить код, либо же сам, а тут просто откровенный пиздeц, что по промпту, что по коду

2 лайка