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

Стартап Туториал | Создание плагинов | Spigot/CraftBukkit/Bukkit

Тема в разделе "Разработка плагинов для новичков", создана пользователем _MasterCapeXD_, 27 мар 2017.

Статус темы:
Закрыта.
  1. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    CraftBukkit - глобальная серверная модификация, предоставляющая API для взаимодействия с игровым миром и созданная для упрощения создания плагинов к SMP-серверу.В августе 2014 года команду Bukkit покинули практически все разработчики, в том числе глава проекта EvilSeph.

    Spigot - оптимизированная версия CraftBukkit со своими доработками и новыми возможностями и настройками, которая продолжила работу команды Bukkit.

    Разработки, созданные для данного туториала, используют ядро Spigot.

    [+] <- Помощь в изучении Java;
    [+] <- Сборка ссылок на обучающие материалы
    [+] <- Документация Spigot API;

    Софт для начала работы:
    Среда разработки:
    1) IntelliJ IDEA [+]
    2) Eclipse [+]
    3) NetBeans [+]
    Для нормального запуска этих программ у Вас должен быть установлен JDK (Java Development Kit) и JRE (Java Runtime Environment)!

    Редактирование файлов (.yml, .json, etc...):
    1) Notepad++ [+]

    Проект, созданный для данного туториала, был разработан в СР Eclipse.

    Основы:
    Java - обьектно-ориентированный язык программирования (вся программа - связь разных обьектов. Это как организм, в котором каждый орган отвечает за свою функцию для нормального функционирования всего организма. Органы могут сотрудничать, обмениваться информацией и тп).
    Его приемущества:
    1) Инкапсуляция:
    Теория: позволяет устанавливать доступ к обьекту и информации в нем с помощью модификаторов доступа.
    Пример: у Вас есть 3 сейфа с информацией. Первый - приватный (пароль знаете только Вы), второй - обычный (пароль знают Ваши родственники и соседи), третий - публичный (пароля нет).

    2) Наследование:
    Теория: позволяет наследовать свойства, методы и поля родительского обьекта.
    Пример: У Вас есть обьект Car (автомобиль), и обьект BMW, который наследует обьект Car.

    3) Полиморфизм (углубленно о наследовании):
    Теория: позволяет обьекту использовать методы производного класса, который не существует на момент создания базового.
    Пример: Что может хранить класс Car? Например, название марки автомобиля, кол-во сидений и тп. Допустим, кол-во сидений = 4. А что, если мы делаем 2-местный автомобиль? Мы наследуем класс Car и имеем возможность изменить для себя кол-во сидений для нашего авто.

    Основные типы данных:
    1) Текстовый тип:
    char - символ (16-разрядное беззнаковое целое, представляющее собой символ UTF-16 (буквы и цифры)).
    String - строка (может хранить в себе любые символы, главное, чтобы кодировка подошла).
    2) Целочисленный тип:
    byte - 8-разрядное целое число.
    short - 16-разрядное целое число.
    int - 32-разрядное целое число.
    long - 64-разрядное целое число.
    3) Дробный тип:
    float - 32-разрядное число в формате IEEE 754 с плавающей точкой.
    double - 64-разрядное число в формате IEEE 754 с плавающей точкой.
    4) Логический тип:
    boolean - хранит значение true или false.

    Переменные - ячейки памяти, которые хранят в себе определенный обьект (тип данных).

    Модификаторы доступа в Java:
    private - приватный (как мы помним, пароль знаем только мы).
    (модификатор не указывается) - обычный (как мы помним, пароль знают только наши родственники и соседи).
    protected - защищенный (пароль знают только наши дети и мы сами).
    public - публичный (пароля нет).

    НАЧАЛО РАБОТЫ:
    Создание проекта в среде разработки Eclipse:
    1) Запускаем Eclipse.
    2) Нажимаем на кнопку File (в левой верхней части экрана) -> New -> Java project.
    bandicam 2018-02-04 14-56-42-829.jpg
    3) В появившемся окне указываем имя проекта (в этом случае "RuBukkitGuide") и ставим такие настройки:
    bandicam 2018-02-04 14-57-00-100.jpg
    4) Нажимаем Finish.
    Проект создан!

    Создание пакетов:
    1) В созданном обьекте нажимаем ПКМ по папке src.
    2) Нажимаем New -> Package.
    bandicam 2018-02-04 14-57-39-652.jpg
    3) Создаем сами пакеты:
    bandicam 2018-02-04 14-57-50-349.jpg
    4) Нажимаем Finish.
    Пакеты созданы.
    Мы создали в папке src папку org, в ней папку rb и в ней папку guide.
    Для чего нужны пакеты? Представьте, что у Вас есть один большой ящик (Ваша программа) и в нем 4 маленьких ящика. В первом - яблоки, во втором - персики, в третьем - гранаты, в четвертом - ананасы. Для чего нам нужны эти коробки? Правильно, чтобы все фрукты не находились в одной коробке.
    Но в Java пакеты не только используются для сортировки. Они берут участие в инкапсуляции. Помните Обычный модификатор доступа? Вот вся информация с модификатором Обычный будет доступна всем обьектам в этом пакете. Тоесть, у яблок своя тусовка, и никакие персики и другие фрукты туда не полезут.

    Создание класса:
    Создадим теперь наш главный класс, который запустит весь наш плагин, назовем его Main.
    1) Нажимаем ПКМ по пакету guide -> New -> Class.
    [Screen] bandicam 2018-02-04 14-58-12-337.jpg
    2) Указываем название и нажимаем Finish.
    bandicam 2018-02-04 14-58-30-056.jpg
    Класс создан!

    Добавление библиотеки Spigot в проект:
    Для этого нажимаем ПКМ по проекту и нажимаем Properties -> Java build pass, заходим во вкладку Libraries и нажимаем на кнопку Add external JARs и указываем место хранения ядра Spigot (скачать их можно тут или тут).
    bandicam 2018-02-04 14-59-35-563.jpg

    Начинаем кодить!
    Созданный нами класс Main пока-что выглядит вот так:
    bandicam 2018-02-04 15-00-33-878.jpg

    Для того, чтобы наш проект считался плагином, нам нужно унаследовать класс JavaPlugin (этот класс находится в самом ядре Spigot).
    Для того, чтобы унаследовать этот класс, нам нужно в строку public class Main дописать extends JavaPlugin.
    Хорошо. Или нехорошо? Что за красная лампочка??? Eclipse нам говорит, что мы не импортировали класс JavaPlugin. Нажимаем на лампочку и импортируем.

    bandicam 2018-02-04 15-01-36-742.jpg

    Теперь мы имеем доступ к protected и public полям и методам. Чтобы Java знала наверняка, что мы используем метод из родительского класса (JavaPlugin), мы скажем это, используя аннотацию @Override. Какой метод мы возьмем из родительского класса? onEnable(), так как он запускает весь наш проект. Само ядро будет знать, что это плагин, и начнет получать всю нужную информацию. Если мы уберем extends JavaPlugin и метод onEnable(), то когда добавим плагин в папку plugins, он вообще не загрузится, и его вообще не будет в списке плагинов.

    bandicam 2018-02-04 15-04-20-383.jpg

    Что такое void? Это тип возвращаемых данных. Поскольку метод onEnable() ни чего не возвращает через return, то мы должны сообщить об этом системе. (Тип доступа может быть любым форматом возвращаемых данных, к примеру: int, boolean и даже String).

    Как узнать все методы, к которым мы имеем доступ? Пишем this и ставим точку. Нам программа вывела все доступные методы и поля из класса JavaPlugin.

    Что будем делать? Ну давайте выведем при запуске плагина, что он включился.
    Для этого заходим в метод onEnable(){ } и между { и } пишем нашу команду. Она выглядит так: this.getLogger().info("ПЛУГИН РАБОТАИТ!");
    Что мы сделали, введя эту команду? Мы получили класс Logger, в которого есть метод info(...), который и запустили.

    Плагин написан. Теперь мы должны создать файл plugin.yml. Нажимаем ПКМ по проекту. В окне нажимаем New -> File и вводим plugin.yml.
    В нем мы должны ввести такие значения:

    Код:
    name: RBGuide # Имя плагина
    main: org.rb.guide.Main # Путь к главному классу (тому, который наследует JavaPlugin)
    author: MasterCapeXD # Автор плагина
    version: 0.1 # Версия плагина
    description: super plugin # Описание плагина
    
    Теперь мы можем скомпилировать плагин. Нажимаем ПКМ по проекту, в окне нажимаем Export... -> Java -> JAR file -> Next и вводим путь к папке, где хотим сохранить файл.

    Доп. информация:
    Кроме метода onEnable() в JavaPlugin есть еще 2 метода - onLoad() и onDisable().

    Весь класс Main:
    PHP:
    package org.rb.guide;

    import org.bukkit.plugin.java.JavaPlugin;

    public class 
    Main extends JavaPlugin
    {
        @
    Override
        
    public void onEnable()
        {
            
    this.getLogger().info("ПЛУГИН РАБОТАИТ!");
        }
    }
    Сам проект тут.

    1 часть подошла к концу. В следующем мы продолжим добавлять функционала в плагин.
     
    Последнее редактирование: 6 фев 2018
  2. xBrainRTPx

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

    Баллы:
    66
    Имя в Minecraft:
    Brat987
    молодец!
     
  3. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Спасибо!
     
  4. Mr_RoboMan

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

    Баллы:
    123
    Поздравляю, ты "создал" еще N-ное количество "дивилаперов" которые будут писать свои недоплагины на дюп/секс/наркотики/и_прочую_зуйню.
     
  5. Blc_Dragon

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

    Баллы:
    76
    *лайк*
     
  6. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Всегда найдут за что зацепиться...Из той информации, что сейчас здесь, эти "супир" плугины не сделаешь.И неужели все будут писать именно этот бред? Может, кому-то эти уроки действительно помогут на начальных этапах, и в будущем этот парень будет отличным кодером.
     
  7. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Ну, я посмотрю, будут просить продолжения, продолжу...Ну а если серьезно, супер программистом на Рубаките не станешь, но, можешь попрактиковаться на ранних этапах.А уже если хочешь быть профи, то изучай Java глубже и на специальных сайтах на подобие JavaRush и тп.
     
  8. xBrainRTPx

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

    Баллы:
    66
    Имя в Minecraft:
    Brat987
    От кого, например?
     
  9. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    JavaRush чтобы стать профи? Надеюсь это шутка.

    К сожалению, не успел ознакомиться полностью с туториалом, но первое что бросилось в глаза это везде ошибка в слове "разработчик" (или имеются ввиду особенные вОлОгОдские рОзрОбОтчики?)
     
  10. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Будет полезно людям, которые хотят писать плагины, но не решаются начинать. Отличная пошаговая инструкция
     
  11. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    +1
    Гавно.
    Либо ты пишешь туториал, либо излагаешь свои эмоции. Вместе — никак.

    Почему бы сразу не начать делать проект maven/gradle? Всё равно придётся на них перейти. А сразу начинать проще.
     
  12. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Я не русский, могут быть офографические ошибки
    Спасибо))
    Ну, я по своему опыту сказал.Я не мог понять IntelliJ IDEA, а NetBeans мне просто не понравился по интерфейсу.Eclipse мне отлично подошел. Выбирать каждому свое, я для этого и оставил 3 ссылки.Мог бы оставить только Eclipse.
     
  13. alexandrage

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

    Баллы:
    173
    Не думаю, что для простого проекта нужены грабли или мавен. Когда у тебя из либ одно ведро. А вот когда нужно пол гитхаба выкачивать, другое дело.
     
  14. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Возможно, но у меня обычно и ядра-то под рукой нет =) Только его API где-то в глубинах ~/.m2/

    Да и редко уже без большего числа либ получается обойтись, постоянно всякие Gson-ы и свои наработки тянутся.

    Новичку может и да, проще так, но сложности в сразу понять maven не вижу =)
     
  15. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    По-хорошему было бы неплохо написать плагин на gradle для bukkit плагинов. Как это сделано в Sponge
     
  16. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Крутотень!:good:

    Но есть пара замечаний.
    1.Лучше не кидать скрины из Eclipse, а копировать все сразу на форум. Тогда и разобраться будет проще, просто напиши комментарии(слешами) к необходимым для пояснениям строкам, и в случае чего можно скопировать твой замечательный код к себе, чтобы попробовать, так сказать, на практике
    2. Oшибка:
    С нетерпением жду следующей части!

    P.S.
    При выводе в консоль русские символы мутируют в непонятные кракозябры. Это точно ошибка консоли, так как в логах все нормально. Как пофиксить, знаешь?

    Консолька:
    upload_2017-3-29_22-32-31.png

    Логи:
    upload_2017-3-29_22-33-26.png
     
  17. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Я не рекомендую копировать.Когда переписываешь, то запоминаешь на ходу.Я так учился.Даже если мог копировать, тупо переписывал.Но я подумаю над этим)
     
  18. AtomicScience

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

    Баллы:
    76
    Имя в Minecraft:
    AtomicScience
    Ну, я не хочу, чтобы это дошло до автоматизма, как базовый синтаксис, вот там это полезно
    А так, в случае чего, посмотрел, написал
     
  19. Автор темы
    _MasterCapeXD_

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

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Нет, у меня самого такая проблема, но я не считаю это проблемой (пока-что), по этому не искал способов решения этой пробелмы.Хотя соглашусь, в логи постоянно смотреть неудобно.
     
  20. Blc_Dragon

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

    Баллы:
    76
    В стартер вписать это:
    chcp 65001

    Далее пкм по верхнему краю консоли
    upload_2017-3-30_1-1-55.png
    Св-ва -> Шрифт -> установить на Luicida Console

    Других вариантов на новых версиях не находил.
    Работает кривовато, но работает
     
Статус темы:
Закрыта.

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