Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Плагин для нескольких версий

Тема в разделе "Разработка плагинов для новичков", создана пользователем Bind, 25 июн 2015.

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

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

    Баллы:
    68
    Всем привет,

    уже 4 день не могу понять как эта система работает: https://github.com/mbax/AbstractionExamplePlugin

    Мне нужно сделать свой плагин для нескольких версий сразу (например: 1.8.1 и 1.8.3).

    Может кто показать чистый и понятный образец? Буду очень благодарен :)
     
  2. Хостинг MineCraft
    <
  3. UniWest

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

    Баллы:
    66
    Skype:
    CrazyLee1337
    Имя в Minecraft:
    Reflect1on
    Технически плагин должен работать на 1.8.1 и 1.8.3 без всяких адаптаций. Если в этих версиях минимальные различия. У меня плагины с API 1.7.9 работают на 1.5.2 .
     
  4. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    О, годный пример, а то я на словах каждый раз пытаюсь объяснять :)
    @fromgate
    Форкану-ка я его.

    По теме: это и есть чистейший образец. Основной проект (pom.xml) включает в себя описание интерфейса к версия-зависимой части. Интерфейс от версии не зависит. В проект включены три подмодуля, по ревизиям внутрянки сервера CraftBukkit. Каждая из них зависит явно от конкретной несовместимой с другими версией ядра.
    Каждый модуль компилируется, всё вместе включается в плагин, а во время запуска код определяет, ядро какой nms подходит под ядро, где запущен сервер, и грузит нужный класс. Основной код плагина работает с конкретным классом, используя только общие интерфейс.
     
  5. Автор темы
    Bind

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

    Баллы:
    68
    Это если использовать API, который не содержит пакетов и других хороших вещей.
    Весь код я понял, как определят и т.д.. Но как он добавил в каждый класс, подходящие версией, импорты?

    Например:
    В папке v1_7_R1
    Код:
    import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
    И в папке v1_7_R2
    Код:
    import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
    Я вот одного не понимаю...
     
  6. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    В коде плагина импортов к ним нету.
    В интерфейсном коде импортов к ним нету.
    В каждом из модулей (считай их отдельными проектами) — импорты из соответствующей версии ядра. Зависимости прописаны в их отдельных pom.xml-ах.

    Оболочка IDE сама при необходимости парсит зависимости текущего проекта и предлагает добавить импорты. А для каждого из модулей вариант всего один.

    Насколько я помню:
    • 1.8.0-1.8.1 это v1_8_R1
    • 1.8.2 это v1_8_R2
    • 1.8.3-1.8.7 это v1_8_R3
    но могу ошибаться!
     
  7. Автор темы
    Bind

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

    Баллы:
    68
    так как я понял он в "Build Patch" закинул разных версий ядра?
     
  8. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Кто он?
    Компиляцией (сборкой проекта) занимается Maven — это отдельный стандартизированный инструмент.
    В файле его проекта (pom.xml) описано, от каких других проектов зависит текущий, с указанием конкретных версий. Во время компиляции Maven убеждается, что все зависимости выкачаны из их репозиториев (по сути просто расшаренные в веб папки), т.е. во время компиляции каждого из подмодулей автоматически будет выкачано с интернета соответствующее ядро, и исходники удачно скомпилируются. Если хочешь, можешь считать что для каждого модуля в его Build Path добавлено отдельное ядро, но внутри это чуть-чуть не так и делается автоматически системой сборки.
    После того, как будут скомпилированы классы подмодулей, основной проект включит их в свой .jar.
    Благодаря ленивой загрузке в Java классы, которые скомпилированы под ядро, отличающееся от того, где запущен плагин, загружены не будут, и не вызовут исключения ClassNotFound.
     
  9. Автор темы
    Bind

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

    Баллы:
    68
    Спасибо за пояснение, я програмирую на Eclipse, где мне достать Maven, создать эти pom.yml файлы?

    P.S А нельзя просто закинуть нужные версии в Build Patch и в отдельных классах по определенной версии использовать нужные импорты, а при загрузке плагина проверить на какой версии стоит сервер и использовать нужный класс?
     
  10. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Я не пользуюсь Eclipse, я пишу в NetBeans.
    Maven должен идти модулем к IDE, по крайней мере у меня оно так. Так-то это отдельный продукт, и скачивается свободно со своего сайта, но всё-таки IDE должна поддерживать его сама, 95%. В Файл-Открыть (Создать) появляются отдельные типа проектов, а именно Проекты Maven или Проекты pom.xml.
    pom.xml ты должен сделать сам, в целом у тебя вполне рабочий пример перед глазами.
    Нет. И Build Path.[DOUBLEPOST=1435253080,1435253042][/DOUBLEPOST]Во, fromgate корректно всё написал.[DOUBLEPOST=1435253134][/DOUBLEPOST]
    Не забывай коммитить в гитхаб фичи по их готовности и end-of-day :)
    Почему ты не выкладываешь pom.xml, как твои исходники-то собирать? )) делать свой проект? ))
     
    Последнее редактирование: 25 июн 2015
  11. Автор темы
    Bind

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

    Баллы:
    68
    Спасибо огромное за ответ. Только вот тот пример совсем запутанный... Пално папок разных, не понятно как это все должно выглядить в Eclipse. Теперь вообще, пытаюсь новый проект создать, в одной вкладке не дает нажать "Далее" и затем зависает все... Может кто сделает самый простой пример, который я могбы заимпортит в Eclipse? Я готов заплатить.
     
  12. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    @Bind
    1. Проверь, что в твоём Eclipse установлен плагин, который осуществляет поддержку проектов Maven.
    2. Почитай тут, очень основная инфа и очень кратко, http://www.apache-maven.ru/quick_start.html
    3. Проект должен просто открываться, как самый обычный проект. По твоей ссылке и идёт этот самый простой пример. Просто выкачай его и открой в Eclipse, попробуй скомпилировать, поменять что-нибудь в нём. А так и до своего додумаешься.
    Прости, я за тебя сделать это не могу, у меня вообще Эклипса нет, и качать не буду :)[DOUBLEPOST=1435297107,1435296886][/DOUBLEPOST]
    Кстати нет, нельзя подключить несколько зависимостей, отличающихся только версиями. Ну, в "правильном пути" нельзя:
    upload_2015-6-26_11-40-1.png
    Хотя хз, может быть просто предупреждение, сборка вроде продолжилась.
     
  13. Автор темы
    Bind

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

    Баллы:
    68
    Спасибо, я все по нему и делал. Только вот создаю я проект не через команды, так как не знаю куда их прописывать)
    Я все заинсталил, теперь пробую создать новый проект и все зависает(( Хотя до этого получитлось создать.
     
  14. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ну да, командами и не надо. Там всё через Эклипс должно само по себе происходить.
     

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