1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал "От а до я" Создания плагина Minecraft

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем mc_archeage, 22 фев 2016.

  1. Автор темы
    mc_archeage

    mc_archeage Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    NegaTiV
    [​IMG]
    Сегодня я заново открываю цикл статей и на этот раз. забрасывать его не буду и даже буду отвечать на ваши коментарии. Ну что ж, от слов к делу. Поехали!
    Подготовка

    Для написания своих плагинов нам понадобятся:
    Так же понадобятся базовые знания по Java. Если таковых нет, то вот ссылки по “поднятию скила”:

    Установка и настройка Eclipse
    Если вы уже знакомы с Eclipse или увас другая IDE, то пропускайте этот раздел.


    Проблем с установкой эклипса возниктуть не должно: его нужно просто распаковать в любоую папку и запустить. Сразу после этого, эклипс попросит указать, какое рабочее пространство(workspace) сейчас открыть. Это папка, в которой будут сохранятся все созданные проекты и где ее располагать – лично ваше решение. Если вам всеранво, то оставляйте все как есть. Если вдруг захотите изменить рабочее пространстро, то не переживайте: при каждом следующем запуске, эклипс сново спросит вас о рабочем пространстве. Таких пространств можно наделать сколько угодно и каждое может быть настроено по разному, под какие-то определенные цели. К примеру у меня есть 2 рабочих пространства: для написания обычных java-приложений и для написания плагинов под “ведро”. Если вдруг вам надоест это сообщение, там есть галочка «Use this as the default and do not ask again», что позволяет задать workspace по-умолчанию.+

    Как только вы определитесь с выбором места и загрузится Eclipse, то мы увидим пригласительную вкладку… которую сразу же закрываем. Она нам ни к чему.
    [​IMG] [​IMG]
    Теперь же мы видим рабочее пространство самого эклипса. Из всего этого, нам понадобится только следующие панели:

    • Package Explorer
      Здесь будут отображаться ваши проекты, пакеты(о них позже) и всевозможные файлы наших будующих плагинов.
    • Problems
      Этой панелькой мы будем редко пользоваться(если вообще до нее дело дойдет), но сказать о ней стоит. Здесь будут показываться ошибки, допущенные в коде, а так же предупреждающие сообщения о возможных ошибках или неточностях.
    • Outline
      Тут будет отображаться навигация непосредственно по коду открытого java исходника.
    Последние 2 описанные панели можно вообще свернуть, т.к. пользоваться ими будем редко.

    Рабочее место почти готово. Осталось только поставить еще 2 галочки в настройках.

    Переходим в меню Window -> Preferences, далее по древу General -> Editor -> Text Editors и выставляем галочку «Show line numbers», чтобы включить отображение нумерации строк. Теперь переходим в General -> Workspace и в группе «Text file encoding» выставляем кодировку UTF-8, самым установив кодировку по-умолчанию.
    [​IMG] [​IMG]
    С установкой и настройкой покончено. Теперь поясню, как создавать новый проект для плагина. Это можно сделать одим из 3-х способов:

    • Меню File -> New -> Java Project
    • Кнопка на панели инструментов
    • Правый клик в Package Explorer
      [​IMG]
    Перед нами откроется окно New Java Project. В Project name указываем название нашему проекту
    [​IMG]
    Нажимаем Next.
    В появившемся окне, переходим на вкладку Libraries, нажимаем кнопку Add External JARs и выбираем скаченный Bukkit API
    [​IMG]
    Жмем Finish.

    Слева, в Package Explorer, показался наш проект с папкой src, в которой будут храниться наши исходные коды. Теперь созданим новый класс. Делается это точно так же, как и с Java Project.
    [​IMG]
    В окне New Java Class нам понадобятся только следующие графы:

    • Package
      указывается пакет, в котором будет хранится наш класс. Формат имени должен быть примерно такой: ru.dmitriymx.bukkit.tutorial.
      Если в двух словах и на пальцах, то пакеты в ява – это пространство имен(namespace) или «виртуальные папки», в которые помещаются классы. Подробнее про это можно прочитать здесь: [1], [2], [3].
    • Name
      указываем название класса (у меня это DmxFirstPlugin)
    Все остальные пункты оставляем как есть и жмем Finish.

    Вот теперь переходим непосредственно к коду.
    Пишем простой плагин
    Как только мы создали новый класс, нашему взору предстает уже готовый пустой шаблон
    upload_2016-2-22_20-12-37.png
    Пока это всего лишь пустой класс, который абсолютно бесполезен в быту. Будем это исправлять. Изменяем вот это
    upload_2016-2-22_20-12-58.png
    на это
    upload_2016-2-22_20-13-19.png
    Эклипс подчеркнет нам JavaPlugin, указывая на ошибку в коде. Если подвести мышь к такому подчеркнутому коду, то откроется окошко с описанием ошибки и способы ее решения. В данном случае нам нужно импортировать класс из Bukkit API, для чего выбираем пункт «Import ‘JavaPlugin’(org.bukkit.plugin.java)»
    upload_2016-2-22_20-13-37.png
    Сразу же замечаем, как над всем нашим кодом вписалась строчка
    upload_2016-2-22_20-13-52.png
    Немного теоретического материала. У плагинов есть 3 основных метода: onEnable(), onDisable() и onLoad(). Первые два отвечают за включение и отключение плагина, а последний срабатывает когда плагин непосредственно подгружается в память сервера. Из этого следует, что onLoad выполняется самым первым, но сам плагин начинает работать только после вызова onEnable со стороны сервера. По выключению или перезагрузки сервера, вызывается метод onDisable.

    С “точками входа-выхода” разобрались. Давайте теперь напишем что-нибудь более-менее работоспособное. Приведем общий код класса к следующему виду:
    upload_2016-2-22_20-14-43.png
    кому невидна вторая часть: upload_2016-2-22_20-15-2.png
    о что мы сейчас написали – готовый плагин. Все что он делает – это пишет в чат о приходе и уходе игрока на сервер. Разбираться в его работе будем по порядку(а как иначе?).
    Сперва обращу внимание на строку объявления класса. Как видно, к нашему классу добавилось расширение Listener. Не углубляясь в дебри явы, скажу проще: указывая данное расширение, мы тем самым расширяем область применения класса не только как плагина(JavaPlugin), но и как обработчика событий(Listener). А вот как раз в методе onEnable() мы регистрируем наш класс на сервере как обработчик событий(this – это указание «на самого себя», если кто забыл).

    Далее следует 2 наших обработчика событий onJoin() и onQuit(). Первый отвечает а событие входа игрока на сервер, а второй – за уход. С помощью метода event.getPlayer().sendMessage(), мы можем отправить сообщение тому игроку, которое вызвал данное событие(в нашем случае игроку, который зашел). Статический класс ChatColor хранит в себе константы цветов для окраски. Думаю как им пользоваться уже видно из примера. Так же, оба наших обработчка оповещают других игроков на сервере о произошетших событиях, но делают это по разному. В onJoin() с помощью метода event.setJoinMessage() мы меняем привычное сообщение «Player joined the game» на любое другое. А в onQuit() мы поступили инача(в целях примера): убрали вывод сообщения о выходе и сообщаем об этом через метод getServer().broadcastMessage(), который просто посылает всем игрокам на сервере указанное сообщение.+

    Дело осталось за малым: написание важного файлика plugin.yml и упаковка всего этого в jar-файл.

    plugin.yml – это файл описания плагина. В нем задается название плагина, главный класс, описание и какие комманды зарегестрировать за плагинов(об этом позже) и т.д. В нашем случае, файлик должен выглядеть так:
    upload_2016-2-22_20-15-45.png
    Ой, забфл сказать, где этот файлик должен находится. Жмем правой кнопкой мыши в PackageExplorer по папке src и через меню New выбираем File. В поле File name пишем plugin.yml и жмем Finish. В открывшемся текстовом редакторе, пишем то, что я указывал выше. Всё сохраняем и переходим к последней фазе: упаковке.

    Правый тык по папке src -> Export. В древе папок, открываем Java и выбираем JAR file и жмем Next. Из голочек оставляем только «Export generated class files and resources» и «Compress the contents of the JAR file». В поле JAR file указываем, куда будем сохранять полученный плагин. После нажатия на Finish, плагин можно класть в папку plugins, запускать сервер и проверять его работу.
    [​IMG][​IMG]
    Видите? Это совсем просто. С практикой вы наберетесь больше опыта и сможете делать более крутые плагины, даже такие легендарные как WorldEdit и WorldGuard.
    Источник
    1
    2
     
    Последнее редактирование: 5 мар 2016
  2. Sonicxd2

    Sonicxd2 Активный участник Пользователь

    Баллы:
    76
    Смысл копировать?
     
  3. Автор темы
    mc_archeage

    mc_archeage Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    NegaTiV
    Мало кто любить гуглить.
     
  4. Denil

    Denil Старожил Пользователь

    Баллы:
    103
    Skype:
    denildiver
    Имя в Minecraft:
    Denil
    нельзя воровать названия
     
  5. PTyTb3242

    PTyTb3242 Новичок

    Баллы:
    6
    бакет апи нот фаунд, есть живые ссылки на библиотеку?
     
  6. Автор темы
    mc_archeage

    mc_archeage Новичок Пользователь

    Баллы:
    11
    Имя в Minecraft:
    NegaTiV
  7. Negezor

    Negezor Активный участник Пользователь

    Баллы:
    78
    Ты довнич?
     
  8. Negezor

    Negezor Активный участник Пользователь

    Баллы:
    78
    Ты просто используешь API ядра, за библиотеку это не стоит считать, это прям полноценное приложение.
     
  9. NerawenPro

    NerawenPro Ньюби

    Баллы:
    1
    Имя в Minecraft:
    Nerawen
    upload_2017-6-8_2-18-36.png
    Вот такая фигня, нет надписи Import.Помогите пж
     
  10. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Зачем зависать на таких недо-туторах, если видео по этой теме - куча?
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну все - выбрасывай.
     
  12. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Эту фразу тебе нужно занести в подпись. Это твоя основная фраза.
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Она не моя, если честно. Но идеально подходит для безнадежных людей.
     
  14. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Что-то мне подсказывает, что эта фраза относится к мозгам человека, к которому обращаешься.
     
  15. TamperOk

    TamperOk Активный участник

    Баллы:
    61
    Имя в Minecraft:
    SouthTexCub
    Сделал всё точно так, как и тут, кидаю в "plugins", но плагин не отображается на сервере.
     

Поделиться этой страницей