Основой любого сервера майнкрафт, безусловно, являются его плагины. От них на сервере зависит практически всё — их качество и функционал напрямую определяют привлекательность сервера. Чтобы быть более конкурентными среди других майнкрафт серверов — стоит использовать собственные уникальные плагины реализующие Ваши задумки. И если у Вас нет средств для того, чтобы нанимать разработчиков на стороне — самое время научиться писать плагины самому.
First things first
Для начала стоит определиться с основами.
Думаю, ни для кого не секрет что оригинальный сервер майнкрафта написан и работает на Java.
Java — это обьектно-ориентированный язык программирования. Для работы Вашего сервера, Java клиента майнкрафта и написания плагинов под этот сервер вам нужно установить Java.
Начать можете отсюда, отсюда, или отсюда.
Для того, чтобы начать что-то писать под этот сервер нам нужно воспользоваться API.
Основные, наиболее распространенные и популярные API для оригинального сервера, вот неожиданность — тоже написаны и работают на Java (или на любом другом JVM совместимом языке).
КАК СОЗДАВАТЬ ПЛАГИНЫ МАЙНКРАФТ НЕ УМЕЯ ПРОГРАММИРОВАТЬ?
Из этого следует что все плагины для наиболее распространенных и популярных API к оригинальному серверу майнкрафта написаны на… (ну, надеюсь, Вы уже поняли).
Что же это за такие “наиболее распространенные и популярные API к оригинальному серверу”, спросите Вы?
А я приведу вам небольшой список таковых:
- Bukkit
- Spigot [документация]
- Paper [документация]
Я не буду охватывать тут всю историю развития этих API, кто от кого форкнулся и так далее, ведь здесь важно другое — абсолютное большинство публичных плагинов что Вы найдете в сети, так или иначе работают с одним (или с несколькими / всеми) из этих API.
Ещё для написания плагинов нам понадобится “среда разработки”.
Если очень упрощённо, то это программа, позволяющая разрабатывать другие программы на определённом языке программирования на несколько порядков удобнее, чем если бы Вы писали код просто в блокноте.
Дальше по статье я буду приводить примеры разработки с использованием Intelij IDEA от Jetbrains, но, в принципе, Вы можете использовать любую другую удобную вам IDE.
Ну и последнее, но не по важности — сам сервер майнкрафта с нужным нам API на борту. Я для этого туториала взял Paper версии 1.19.2 отсюда и в дальнейшем, в статье, буду ссылаться на его API и документацию.
Сейчас Вам достаточно скачать .jar файл сервера. Позже я обьясню как его запустить и как протестировать плагин на нём.
Стартуем
На данном этапе предполагается, что Вы уже установили Java и IDE (среду разработки) на Java и перед вами сейчас открыт приветственный экран Вашей IDE.
Вот мой, например:
Сперва нам нужно создать проект. Этим проектом и будет наш плагин.
Как создавать плагины Minecraft в Intellij IDEA. Часть 1
Кликаем на кнопку ‘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’, и перед нами открывается окно с проектом.
Немного отвлечёмся и поговорим о структуре плагинов, написанных под Paper API (и все его форки).
Для того, чтобы сервер понимал, что перед ним именно плагин, а не странный файл с расширением .jar — в каждом из плагинов есть файл plugin.yml — в котором подробно описывается что перед сервером за плагин, кто его автор, где расположен главный его класс, какие команды есть у плагина и т.д.
Мы начнём именно с создания и наполнения этого файла. Создаём в папке resources файл plugin.yml -> кликаем правой кнопкой мыши на resources -> New -> File -> вводим 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’.
Итог всех приведённых выше манипуляций выглядит следующим образом:

Вновь немного отвлечёмся на настройку сборки нашего плагина. В данный момент мы никак не сможем взаимодействовать с API сервера майнкрафт — среда разработки ничего не знает о нём и его структуре. Для того, чтобы это исправить, нам нужно добавить API в проект, в моём случае это будет Paper API (форк Spigot API), в файл pom.xml . pom.xml — это, по сути, подробное описание нашему сборщику как конкретно собирать проект. Я не буду останавливаться на этом и подробно обьяснять что означает каждая из строк в файле — на это вполне может уйти пара отдельных гайдов. Сейчас вам достаточно привести Ваш pom.xml к следующему виду:
4.0.0 me.xezard FirstPlugin 1.0-SNAPSHOT clean package install FirstPlugin org.apache.maven.plugins maven-compiler-plugin 8 8 papermc https://papermc.io/repo/repository/maven-public/ com.destroystokyo.paper paper-api 1.16.5-R0.1-SNAPSHOT provided
Если очень кратко — то в файле мы указали под какую версию Java будет скомпилирован плагин, указали репозиторий, где находится Paper API и указали что наш плагин зависит от этого API в секции .
Код
Пришло время для самого интересного — написания кода. Cтоит начать с того, что любой плагин написанный под Paper API (и его форки) в своём главном классе обязательно должен наследовать класс JavaPlugin.
Для наследования в Java используется ключевое слово extends.
Изменим код класса на следующий:
Я постарался максимально понятно расписать за что отвечает каждая строка в классе. Сейчас, если скомпилировать плагин, добавить на сервер и запустить его — при включении или выключении плагина сервером он выведет в консоль соответствующие сообщения.
Компиляция плагина
Пришло время собрать наш код в jar файл! Если Вы, также как и я, используете IDEA для написания кода — просто откройте панель ‘Maven’ справа в верхнем углу, нажмите левой кнопкой мыши на название Вашего плагина и далее на зелёный значок Play.
Если до этого момента Вы всё делали правильно — Вы увидите открывшуюся консоль и по прошествии некоторого времени надпись ‘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, после этого запустите сервер.
Если вы шли в точности по статье и всё делали правильно, то в консоли сервера вы сможете увидеть заветное сообщение:
За сим первая часть этой замечательной статьи подходит к концу. Во второй части мы рассмотрим создание команд, отслеживание событий сервера и работу с конфигурацией плагина.
Источник: devmc.org
Разработка собственного плагина для сервера Minecraft
Еще с детства я начал покорять бесконечные просторы Minecraft. Естественно о разработке в то время никакой речи не шло. Но с недавних пор загорелся идеей создать о свой проект серверов.
На Java до этого никогда не писал, но есть бекграунд на других языках, поэтому осталось только приспособиться. Соотвественно разработка плагинов, Bukkit и другие библиотеки вижу впервые, но посмотрев несколько туторов, стала понятна примерная концепция.
Ранее писал на таких языках как PHP, JS. В данный момент веду разработку на языке Go. Сильно привык к «гошке» и его синтаксису и в процессе написания плагина часто использовал синтаксис Go для написания логических конструкций.
Мне не сильно хотелось использовать какие-то готовые решения, ведь тогда не будет углубленных знаний, которые я получу в процессе написания кода. Хочется одновременно и поучить Java и написать что-то свое (самое главное).
В этой статье я не буду затрагивать процесс настройки окружения, установки IDE и стороннего софта.
Идея плагина
На серверах часто используются постройки, находящиеся в пустоте, например летающие лобби, острова. Такую модель постройки мы выбрали вместе с моим другом: летающие острова. Одной из проблем таких построек — Игрок может провалиться в пустоту и не выбраться.
Прошерстив Google мне удалось найти парочку подходящих плагинов, которые уже решают это проблему. Но один из них, который оказался поддерживаем разработчиком и самими ядром сервера, предоставлял ограниченный функционал, расширенный можно было приобрести на X евро. Фича, которая мне понравилась в платном плагине — создание анимаций из частиц после телепортации из пустоты.
Мне захотелось самому понять, как это сделать, разработать собственный плагин, а потом с удовольствием им пользоваться, поддерживать, находить баги — мое мелкое детище, как никак.
Создаем сам плагин
Назвал я плагин просто — VoidTeleport.
Первым делом создал класс для управления конфигурацией плагина.
Отлично! Класс для работы с конфигом уже есть, теперь нужно определиться со структурой файла config.yml . Нужно реализовать поддержку для разных миров, поэтому не придумал ничего проще, как просто указать список нужных миров.
worlds: # Наименование мира, например spawn, world, world_the_end — name: spawn # Координаты для респавна игрока при падении в пустоту spawnLocation: x: 0 y: 0 z: 0
Конфиг есть, теперь можно приступить к созданию обработчика событий. Мой выбор пал на событие EntityDamageByBlockEvent. Можно было бы и слушать событие PlayerMoveEvent, но оно случается гораздо чаще, чем триггер на получение урона. Лишняя нагрузка на сервер не нужна, поэтому стал слушать урон.
Тепер разберем вызов эффекта анимации при телепортации Spiral.spawn(player) . Назвал класс Spiral, потому что эффект будет в виде спирали.
Т.к. это мой первый плагин, то не стал заморачиваться с Пакетами и ProtocolLib.
Описываем анимацию в отдельном классе Spiral. Я предпочел реализовать спираль под названием Helix — достаточно простая в реализации модель. Пришлось немного вспомнить тригонометрию, но у меня получилось!
Почему в коде 23? Это число является ограничением для координаты y. Т.е. по сути спираль будет подниматься вверх на y = 2.3 . Как можно заметить, при указании смещения particleLocation.add(x, y / 10, z) y делится на 10. Еще одной причиной стало то, что спираль не успевает несколько раз «обернуть» игрока.
Собираем все вместе
Наконец можем собрать наш код в единой точке и протестировать, что получилось.
Результат
При заданным настройкам файле конфигурации мы успешно попадаем в указанную точки и наблюдаем просто классную анимацию, как по мне.
И без указания мира в конфиге.
Можно посмотреть код этого плагина в моем репозитории Github.
Скачать можно последний релиз.
Источник: habr.com
КАК ПИСАТЬ СВОИ ПЛАГИНЫ ДЛЯ MINECRAFT
Бесплатно скачать последнюю версию Minecraft можно по ссылке:
Пишем плагины для Minecraft #1 — Основы написания
ПЛАГИНОПИСАНИЕ НА МАЙНКРАФТ ПЕ — КАK ПИСАТЬ ПЛАГИНЫ НА МКПЕ — ПЛАГИН — ЧИТАЕМ ИМПОРТЫ
#1 — Как писать свои плагины для Майнкрафт ПЕ — Основы плагина — onEnable() Disable — PocketMine API
Создание плагинов для Minecraft #1 — Создание проекта
Создание плагинов для Minecraft #1 — Вводный урок
Создание плагинов Minecraft. Часть 1. Введение. Первые шаги.
Как создать плагин для Minecraft #1 — Основы и первый плагин
Источник: www.vomine.ru