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

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

Discussion in 'Разработка плагинов для новичков' started by Bind, Jun 25, 2015.

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

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

    Trophy Points:
    68
    Всем привет,

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    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 Активный участник Пользователь

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

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

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

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

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

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

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

    Trophy Points:
    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, как твои исходники-то собирать? )) делать свой проект? ))
     
    Last edited: Jun 25, 2015
  11. Автор темы
    Bind

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

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

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

    Trophy Points:
    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 Активный участник Пользователь

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

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

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

Share This Page