Извини, но кроме как назвать это плагин не полным пздцом я не могу. Ниже все грехи:
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(...) будет работать на дефолтных значениях (в лучшем случае) или крашнет сервер.
Там ещё дохуя всего что можно было раскритиковать, но мне стало уже морально больно дальше разбирать.