https://static.devmc.org/images/5ac51db9-c5cc-496b-877f-104c54b5c022.png
Ультимативный гайд по разработке плагинов для сервера майнкрафт для котят [Часть 1]

Основой любого сервера майнкрафт, безусловно, являются его плагины. От них на сервере зависит практически всё - их качество и функционал напрямую определяют привлекательность сервера. Чтобы быть более конкурентными среди других майнкрафт серверов - стоит использовать собственные уникальные плагины реализующие Ваши задумки. И если у Вас нет средств для того, чтобы нанимать разработчиков на стороне - самое время научиться писать плагины самому.

First things first

Для начала стоит определиться с основами.
Думаю, ни для кого не секрет что оригинальный сервер майнкрафта написан и работает на Java.
Java - это обьектно-ориентированный язык программирования. Для работы Вашего сервера, Java клиента майнкрафта и написания плагинов под этот сервер вам нужно установить Java.
Начать можете отсюда, отсюда, или отсюда.

Для того, чтобы начать что-то писать под этот сервер нам нужно воспользоваться API.
Основные, наиболее распространенные и популярные API для оригинального сервера, вот неожиданность - тоже написаны и работают на Java (или на любом другом JVM совместимом языке).
Из этого следует что все плагины для наиболее распространенных и популярных API к оригинальному серверу майнкрафта написаны на… (ну, надеюсь, Вы уже поняли).

Что же это за такие “наиболее распространенные и популярные API к оригинальному серверу”, спросите Вы?
А я приведу вам небольшой список таковых:

Я не буду охватывать тут всю историю развития этих API, кто от кого форкнулся и так далее, ведь здесь важно другое - абсолютное большинство публичных плагинов что Вы найдете в сети, так или иначе работают с одним (или с несколькими / всеми) из этих API.

Ещё для написания плагинов нам понадобится “среда разработки”.
Если очень упрощённо, то это программа, позволяющая разрабатывать другие программы на определённом языке программирования на несколько порядков удобнее, чем если бы Вы писали код просто в блокноте.
Дальше по статье я буду приводить примеры разработки с использованием Intelij IDEA от Jetbrains, но, в принципе, Вы можете использовать любую другую удобную вам IDE.

Ну и последнее, но не по важности - сам сервер майнкрафта с нужным нам API на борту. Я для этого туториала взял Paper версии 1.19.2 отсюда и в дальнейшем, в статье, буду ссылаться на его API и документацию.
Сейчас Вам достаточно скачать .jar файл сервера. Позже я обьясню как его запустить и как протестировать плагин на нём.

Стартуем

На данном этапе предполагается, что Вы уже установили Java и IDE (среду разработки) на Java и перед вами сейчас открыт приветственный экран Вашей IDE.
Вот мой, например:
IDEA
Сперва нам нужно создать проект. Этим проектом и будет наш плагин.
Кликаем на кнопку ‘New Project’ и перед нами открывается окно создания нового проекта.
New project
С названием, думаю, всё очевидно.

  • Location’ - место на диске, где будет лежать папка проекта.
  • Create git repository’ - создать ли Git репозиторий для проекта. Если у вас стоит галочка - уберите.
  • Language’ - Java, тут всё понятно.
  • Build System’ - а вот с этого момента поподробнее.


Build System - система, через которую будет собираться Ваш проект.
Под сборкой имеется ввиду компиляция всего Вашего кода в исполняемый файл (jar, например) вместе с автоматическим внедрением в него всех зависимостей, библиотек и так далее.
Есть много различных сборщиков - Maven, Gradle, Ant и т.д., но в этом туториале я остановлюсь на Maven - как на самом простом, по моему мнению, в освоении, для начинающих разработчиков.

  • JDK’ - или Java Development Kit та самая Java которую Вы должны были уже установить ранее. Если вам повезло - IDEA сама автоматически определит доступную вам версию JDK. Если нет - вам придётся указать её локацию на диске вручную.
  • Add sample code’ - просто сразу добавляет в проект готовый пакет с классом в нём.
  • Advanced settings’ - в нашем случае тут расположены настройки для сборщика Maven.
  • Group Id’ - уникальный идентификатор Вашего проекта.
  • Artifact Id’ - название собранного сборщиком скомпилированного файла.


После того, как Вы всё настроили - жмём кнопку ‘Create’, и перед нами открывается окно с проектом.
project created
Немного отвлечёмся и поговорим о структуре плагинов, написанных под Paper API (и все его форки).
Для того, чтобы сервер понимал, что перед ним именно плагин, а не странный файл с расширением .jar - в каждом из плагинов есть файл plugin.yml - в котором подробно описывается что перед сервером за плагин, кто его автор, где расположен главный его класс, какие команды есть у плагина и т.д.

Мы начнём именно с создания и наполнения этого файла. Создаём в папке resources файл plugin.yml -> кликаем правой кнопкой мыши на resources -> New -> File -> вводим plugin.yml.
Заполняем файл следующим образом:
plugin.yml
Подробное описание каждой записи в файле есть здесь.
Из самого важного - нужно указать правильный путь до главного класса плагина (main), в моём случае это me.xezard.firstplugin.FirstPlugin. Если путь будет указан неверно - плагин не запустится.

Теперь нам нужно создать соответствующие указанному ранее пути пакеты и главный класс плагина.
Создаём нужные пакеты - кликаем правой кнопкой мыши на me.xezard (в Вашем случае это может быть Ваш собственный ранее созданный пакет) -> New -> Package -> вводим firstplugin.
Важно: новый пакет в таком случае создаётся относительно уже существующего. Полный путь получится следующим - me.xezard.firstplugin.
⁣Давайте заодно удалим класс автоматически созданный нашей IDE - класс Main.
Жмём правой кнопкой мыши по нему -> Delete -> Ок. Готово.

Вот мы и добрались до создания первого класса плагина и по совместительству - главного его класса.
Жмём правой кнопкой мыши на ранее созданный нами пакет -> New -> Java class -> вводим то имя класса, которое мы ранее указали последним в main секции файла plugin.yml - в моём случае это ‘FirstPlugin’.
Итог всех приведённых выше манипуляций выглядит следующим образом:
main class
Вновь немного отвлечёмся на настройку сборки нашего плагина. В данный момент мы никак не сможем взаимодействовать с API сервера майнкрафт - среда разработки ничего не знает о нём и его структуре. Для того, чтобы это исправить, нам нужно добавить API в проект, в моём случае это будет Paper API (форк Spigot API), в файл pom.xml. pom.xml - это, по сути, подробное описание нашему сборщику как конкретно собирать проект. Я не буду останавливаться на этом и подробно обьяснять что означает каждая из строк в файле - на это вполне может уйти пара отдельных гайдов. Сейчас вам достаточно привести Ваш pom.xml к следующему виду:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">   
<modelVersion>4.0.0</modelVersion>
    <groupId>me.xezard</groupId>
    <artifactId>FirstPlugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <defaultGoal>clean package install</defaultGoal>
        <finalName>FirstPlugin</finalName>
⁣
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
⁣
    <repositories>
        <repository>
            <id>papermc</id>
            <url>https://papermc.io/repo/repository/maven-public/</url>
        </repository>
    </repositories>
⁣
    <dependencies>
        <dependency>
            <groupId>com.destroystokyo.paper</groupId>
            <artifactId>paper-api</artifactId>
            <version>1.16.5-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>


Если очень кратко - то в файле мы указали под какую версию Java будет скомпилирован плагин, указали репозиторий, где находится Paper API и указали что наш плагин зависит от этого API в секции <dependencies>.

Код

Пришло время для самого интересного - написания кода. Cтоит начать с того, что любой плагин написанный под Paper API (и его форки) в своём главном классе обязательно должен наследовать класс JavaPlugin.
Для наследования в Java используется ключевое слово extends.
Изменим код класса на следующий:
main class
Я постарался максимально понятно расписать за что отвечает каждая строка в классе. Сейчас, если скомпилировать плагин, добавить на сервер и запустить его - при включении или выключении плагина сервером он выведет в консоль соответствующие сообщения.

Компиляция плагина

Пришло время собрать наш код в jar файл! Если Вы, также как и я, используете IDEA для написания кода - просто откройте панель ‘Maven’ справа в верхнем углу, нажмите левой кнопкой мыши на название Вашего плагина и далее на зелёный значок Play.
build
Если до этого момента Вы всё делали правильно - Вы увидите открывшуюся консоль и по прошествии некоторого времени надпись ‘BUILD SUCCESS’.
build success

Тестируем плагин

Помните сервер, который Вы скачали в начале статьи? Его время пришло.
Переместите .jar сервера, который Вы загрузили в отдельную папку. Если вы являетесь пользователем операционной системы Windows (как я), то создайте в этой же папке скрипт start.bat со следующим содержимым:

java -Dfile.encoding=utf-8 -server -Xms1G -Xmx1G -jar paper.jar nogui
pause


Важно: paper.jar что указан в этом файле - это название Вашего файла сервера в папке. Если название не будет совпадать - скрипт не запустит Ваш сервер. Параметры Xms и Xmx используются для выделения процессу сервера оперативной памяти. Я использовал 1 гигабайт, но Вы можете указать свои значения. Главное, чтобы выделенной оперативной памяти хватало для работы сервера.

После того, как Вы закончили редактировать файл - запустите его двойным кликом мыши. При первом запуске сервера, как ни странно - он не запустится. Вместо этого он сначала предложит вам принять соглашение EULA.
Cейчас Вам достаточно открыть файл eula.txt и поменять строчку eula=false на eula=true и сохранить файл.
Теперь запустите сервер повторно и после надписи ‘Done! For help, type “help”’ напишите в консоли stop и нажмите Enter.
Повторный запуск был необходим для того, чтобы сервер сгенерировал все свои файлы.

Вернитесь в папку в которой лежат файлы Вашего плагина и перейдите в папку target - в ней лежит скомпилированный плагин, в моём случае это FirstPlugin.jar. Переместите его в папку сервера, в подпапку plugins, после этого запустите сервер.

Если вы шли в точности по статье и всё делали правильно, то в консоли сервера вы сможете увидеть заветное сообщение:
success
⁣⁣За сим первая часть этой замечательной статьи подходит к концу. Во второй части мы рассмотрим создание команд, отслеживание событий сервера и работу с конфигурацией плагина.


3 февраля 2023 в 18:06
5 декабря 2022 в 22:52
368
Руководство
java idea maven minecraft spigot bukkit paper plugin
1
3