1. Основы Java 8 и структура плагина: главный класс и plugin.yml
Основы Java 8 и структура плагина: главный класс и plugin.yml
Приветствую! Если вы читаете эту статью, значит, ваша среда разработки IntelliJ IDEA уже настроена, JDK 8 установлен, и вы готовы написать свой первый код. В предыдущих этапах мы подготовили почву, а теперь пришло время заложить фундамент вашего будущего плагина.
В этой статье мы разберем анатомию плагина для Minecraft версии 1.8. Мы не просто напишем «Hello World», но и поймем, почему код пишется именно так. Мы изучим главный класс, наследование от JavaPlugin, жизненный цикл плагина и файл конфигурации plugin.yml.
Главный класс: Сердце плагина
Любой плагин для Bukkit/Spigot (ядра сервера Minecraft) начинается с главного класса. Это точка входа, место, где сервер «стучится» к вашему плагину, чтобы запустить его.
В Java 8, как и в любой другой версии Java, все строится вокруг классов и объектов. Чтобы сервер понял, что ваш код — это плагин, ваш главный класс должен наследовать функционал от родительского класса, предоставляемого API сервера.
!Схема наследования вашего класса от JavaPlugin
Наследование и JavaPlugin
Ключевое слово, которое делает ваш класс плагином — это extends. Взглянем на базовую структуру:
Разберем каждую строчку:
package ru.myserver.tutorial; — это «адрес» вашего класса. Пакеты в Java помогают группировать классы и избегать конфликтов имен. Обычно используется обратный домен (например, com.google или ru.yandex), но для обучения можно использовать что-то простое.import org.bukkit.plugin.java.JavaPlugin; — мы сообщаем Java, где найти класс JavaPlugin. Он находится в библиотеке Spigot/Bukkit, которую мы подключили ранее.public class Main extends JavaPlugin — мы объявляем публичный класс с именем Main (имя файла должно совпадать: Main.java) и говорим, что он расширяет (наследует) JavaPlugin.> Важно: В одном плагине может быть только один класс, который наследует JavaPlugin. Если вы сделаете два таких класса, сервер выдаст ошибку при запуске.
Жизненный цикл: onEnable и onDisable
Когда сервер запускается или останавливается, он вызывает определенные методы вашего главного класса. В Java 8 мы используем аннотацию @Override, чтобы показать, что мы переопределяем стандартное поведение этих методов.
Вот как выглядит минимальный рабочий код:
Разбор методов:
* onEnable(): Этот метод запускается сервером, когда плагин загружается. Это происходит при старте сервера или при команде /reload. Здесь вы будете регистрировать команды, слушатели событий (Events), загружать конфиги и подключаться к базам данных.
* onDisable(): Этот метод запускается при выключении сервера или перезагрузке. Здесь нужно сохранять данные, закрывать соединения с базой данных и очищать память, если это необходимо.
* getLogger().info(...): Это способ отправить сообщение в консоль сервера. getLogger() возвращает объект логгера, связанный с вашим плагином, а info пишет сообщение с уровнем важности «Информация».
В Minecraft 1.8 консоль поддерживает цвета, но для системных сообщений лучше использовать стандартный логгер.
Структура проекта в IntelliJ IDEA
Чтобы ваш код превратился в рабочий .jar файл, он должен лежать в правильных папках. Стандартная структура проекта Maven выглядит так:
!Правильная структура папок Maven проекта
* src/main/java: Здесь живет ваш Java код. Внутри этой папки вы создаете структуру пакетов (папок), соответствующих вашему package (например, ru/myserver/tutorial).
* src/main/resources: Здесь хранятся ресурсы — файлы, которые не являются кодом, но нужны плагину. Самый главный файл здесь — plugin.yml.
plugin.yml: Паспорт вашего плагина
Даже если вы напишете идеальный код на Java, сервер не запустит его без файла plugin.yml. Этот файл находится в корне вашего .jar архива (в исходниках он лежит в src/main/resources).
plugin.yml — это файл в формате YAML. Это язык сериализации данных, который очень чувствителен к отступам.
Минимальное содержание plugin.yml
Для работы плагина необходимы три параметра:
Детальный разбор полей:
MyPlugin, а не My Plugin). Это имя будет отображаться в списке /plugins.1.0, v1.0-BETA и т.д.Если в вашем классе Main пакет указан как package ru.myserver.tutorial;, то в plugin.yml вы обязаны написать ru.myserver.tutorial.Main.
Расширенные настройки (Опционально)
Вы можете добавить больше информации:
Опасности YAML
> YAML не прощает ошибок с отступами. Никогда не используйте клавишу TAB для отступов в plugin.yml! Используйте только пробелы.
Если вы поставите TAB, сервер при запуске выдаст ошибку: org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml.
Сборка проекта (Компиляция)
Вы написали код в классе Main и создали plugin.yml. Теперь нужно превратить это в файл, который понимает сервер Minecraft — в .jar файл.
В IntelliJ IDEA с использованием Maven это делается просто:
Maven начнет процесс сборки: он скачает необходимые библиотеки (если их еще нет), скомпилирует ваш Java код в байт-код, положит ресурсы и упакует все в архив.
После успешной сборки (вы увидите сообщение BUILD SUCCESS в консоли IDEA), готовый файл появится в папке target внутри папки вашего проекта.
Практика: Ваш первый запуск
Давайте подытожим алгоритм действий, который вы должны выполнить после прочтения этой статьи:
Main в папке src/main/java/....JavaPlugin.onEnable и написать туда вывод в лог.plugin.yml в папке src/main/resources.name, version и main.package..jar файл из папки target в папку plugins вашего тестового сервера.Особенности Java 8 в контексте Minecraft 1.8
Поскольку наш курс ориентирован на версию 1.8, мы используем Java 8. Это «золотой стандарт» для старых версий майнкрафта. Хотя современные версии Java (17, 21) имеют много новых фишек (например, var, record, текстовые блоки), в Java 8 их нет.
Однако, Java 8 подарила нам Лямбда-выражения и Stream API, которые мы будем активно использовать в будущих уроках для обработки коллекций игроков и инвентарей. Пока что запомните: синтаксис должен быть строгим, типы переменных указываются явно.
В следующем уроке мы научимся реагировать на действия игроков: обрабатывать вход на сервер, ломание блоков и чат. Но без понимания структуры главного класса и plugin.yml двигаться дальше невозможно.
Убедитесь, что ваш «Hello World» плагин успешно запускается на сервере, прежде чем переходить к следующей статье.