Основа плагина PocketMine (Tesseract)
Основа плагина PocketMine (Tesseract)
Это подробное руководство по созданию простейшего («Пустого») первого плагина для PocketMine и по расширению его функциональности.
Итак, для начала создадим следующую файловую систему:
- pluginname_version
- src
- namespace
- Main.php
- namespace
- plugin.yml
- src
В принципе, не сложно. В файле plugin.yml пишем следующее:
1 2 3 4 5 6 7 | name: pluginname main: namespace\Main api: 1.11.0 version: 1.0 load: POSTWORLD author: your_name description: |
Разберем этот код:
Для начала пишем имя нашего первого плагина PocketMine, тут все просто.
Следующая строчка (main) — класс, с которого начинается запуск плагина. Тут нужно быть очень внимательным — namespace должен совпадать с тем namespace, которым вы назвали папку в предыдущем шаге. Далее указываем через бэкслеш имя главного класса — того файла, что мы создали под названием Main.
api — важная сттрочка, показывающая поддерживаемые команды. Для последней версии PocketMine это 1.11.0, Tesseract же поддерживает версии до 3.0.0 и, возможно, уже и выше.
Далее идет версия, это неинтересно, потом тип загрузки — POSTWORLD (после мира), еще есть STARTUP — в самом начале.
Автора и описание добавить тоже не проблема.
Лучше копнем в сторону Main. Данный файл содержит код php, с подключенными необходимыми библиотеками pocketmine. Заготовка такого файла простая:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php namespace ExampleAuthor\MyPlugin; use pocketmine\plugin\PluginBase; class MyPlugin extends PluginBase{ public function onEnable(){ $this->getLogger()->info("Ура! Плагин работает!"); } public function onDisable(){ $this->getLogger()->info("Кто выключил мой плагин???"); } } ?> |
В принципе, ничего сложного. Сначала мы даем парсеру нашего php знать, в каком пространстве имен лежит этот класс. Далее подключаем библиотеку (одну из) PocketMine (об этом чуть позже). Наконец объявляем новый класс — он должен иметь то же название, что и файл. Для того, чтобы код распознавался как плагин PocketMine, наследуем главный класс от PluginBase.
Внутри класса есть две функции — аналоги ловушек в ModPE. В данном случае это ловушки включения и выключения плагина.
1 | $this->getLogger()->info("Ура! Плагин работает!"); |
Эта строчка получает лог игры и записывает в него строку. Соответственно, зайдя в консоль сервера, вы увидите эти сообщения.
Далее его следует упаковать в phar архив и отправить на сервер. Это можно сделать как в многих веб-сервисах, так и в программах, поэтому акцентировать внимание на этом не буду.
Лучше перейдем к самому интересному — кодингу. Для того, чтобы написать плагин PocketMine, нужно понять, что нам, собственно, от него надо. Да-да, я не шучу, четко сформулировать задачу на русском (английском, французском, венгерском…). Потом проанализировать задачу, и определить, что нужно для этого плагина. Возможно, узнать, когда игрок ставит блок? А возможно, удалить сообщение из чата? Дальше надо найти в библиотеке api PocketMine необходимый Listener и импортировать его с помощью use. Пример:
1 | use pocketmine\event\player\PlayerJoinEvent; |
Импортирует событие появления нового игрока на сервере.
Практически в каждом таком Listener есть такой метод, как setCancelled();
Вот пример его использования:
1 2 3 4 | function BlockPlaceEvent(BlockPlaceEvent $e) { $e->setCancelled();//теперь никто не посмеет ставить блоки тут!!! } |
Практически все остальные действия выполняются внутри подобных слушателей. Для того, чтобы что-то изменить в мире, используйте ту же библиотеку + интернет. Для Tesseract’a такого нету, придется залезть в исходный код сервера, чтобы вытянуть новые функции.
Напоследок скажу, что по плагинам PocketMine нету таких продуманных вики, как по ModPE, нету особо и учебников… Самый простой способ научится их писать — на чужом коде. Возможно, немного такого кода появится и на репозитории Mineprogramming, но это еще не факт.
Comments