Основа плагина PocketMine (Tesseract)

Основа плагина PocketMine (Tesseract)

Это подробное руководство по созданию простейшего (“Пустого”) первого плагина для PocketMine и по расширению его функциональности. 

Итак, для начала создадим следующую файловую систему:

  • pluginname_version
    • src
      • namespace
        • Main.php
    • plugin.yml

В принципе, не сложно. В файле 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, но это еще не факт.

This entry was posted in PocketMine. Bookmark the permalink.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *