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

Плагин [DEV/RPG] Mimic - API для работы с RPG плагинами

Тема в разделе "Неподтвержденные плагины", создана пользователем OsipXD, 12 апр 2017.

Метки:
?

Какую систему сделать следующей?

Голосование закрыто 8 авг 2020.
  1. Свой вариант (в комментарии)

    0 голосов
    0,0%
  2. Система динамических значений (здоровье, мана и пр.)

    42,9%
  3. Система атрибутов (сила, ловкость, интеллект и т.д.)

    42,9%
  4. Система скиллов (увеличение уровня скиллов, выдача их и т.д.)

    14,3%
  1. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD

    Некоторое время назад я описывал проблему, которая сподвигла меня написать этот API. И теперь представляю готовую реализацию (правда, пока с небольшим функционалом).

    MimicAPI - это API для абстракции таких RPG концепций, как уровень, класс, мана игрока и т.д. Mimic - это реализация MimicAPI для Bukkit.

    Что это даст?
    Если коротко, то это а-ля Vault для RPG статов.
    Если подробнее, то отсутствие привязки плагинов к определенной реализации той или иной RPG концепции позволит добиться более простой совместимости RPG плагинов друг с другом и поможет избавиться от конфликтов их между собой.

    Какие API существуют?
    На данный момент (v0.4) существует 3 API и несколько реализаций для них:

    - LevelSystem - API для работы с уровнем и опытом игрока. Позволяет добавить поддержку уровня и опыта из другого плагина.
    - ClassSystem - API для проверки классов игрока. Даже если в вашем плагине нет классов вы можете проверить их у иггрока.
    - ItemsRegistry - API для создания и сравнения предметов. Полезно для получения предметов из других плагинов.

    Как использовать?
    Если вы используете систему сборки (Gradle, Maven и т. д.) инструкцию можно найти на GitHub.

    Код:
    ServicesManager sm = getServer().getServicesManager();
    
    // Получаем провайдер для системы уровней, которуюу после мы сможем 
    // хранить для получения систем определенных игроков
    BukkitLevelSystem.Provider levelSystemFactory = sm.load(BukkitLevelSystem.Provider.class);
           
    // Теперь получим систему уровней определённого игрока
    LevelSystem levelSystem = levelSystemFactory.get(player);
    
    // Работаем с полученной системой
    int level = levelSystem.getLevel();
    int exp = levelSystem.getExp();
    int totalExp = levelSystem.getTotalExp();
    // полный список методов смотрите в JavaDoc
    

    Важно!
    Для хранения объекта игрока внутри системы используется слабая ссылка, что позволяет нам не беспокоиться о том, что наличие инициализированной системы помешает выгрузке игрока из памяти, если он выйдет с сервера. Но из-за этого возникает риск получить IllegalStateException, если мы попытаемся воспользоваться системой после того, как игрок вышел с сервера, поэтому старайтесь, чтобы время жизни инициализированной системой было небольшим, тогда появление исключений будет сведено к нулю.

    Более подробная документация есть на GitHub.
    Вы всегда можете задать вопрос мне в Discord: [​IMG]

    Лог изменений


    v0.4
    - Всё сначала
     
    Последнее редактирование: 8 авг 2020
  2. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Резерв
     
  3. Bomber123

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

    Баллы:
    76
    :silence::silence::silence::silence::good:
    Вау
    Сделай систему магии
    :lol::lol::lol::lol::lol::lol::lol::lol::lol:
     
  4. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Добавил это в голосование. Можно переголосовать :)
     
  5. Bomber123

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

    Баллы:
    76
    Всё!!!
     
  6. SaMEC

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

    Баллы:
    173
    Skype:
    support.meedway
    Имя в Minecraft:
    Nick
    В голосовании последние 3 пункта однозначно нужно внедрять
     
  7. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Они все будут реализованы. Вопрос в том, что сделать раньше.
     
  8. Bomber123

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

    Баллы:
    76
    чего больше того и делай
     
  9. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Ну да. Только когда я это писал, было равное количество голосов за все варианты.
     
  10. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Потому что при регистрации подсистемы создаётся её неинициализированный экземпляр, а потом, когда надо получить систему для конкретного игрока, то он клонируется и вызывается метод инициализации. На самом деле я уже понял, что это плохое решение и лучше тут использовать абстрактную фабрику, тогда можно будет один раз получить фабрику, а потом из нее сколько угодно инициализированных систем получать.
    v1.1.0
    - API обновлён до 1.1.0
    - Исправлена ошибка из-за которой невозможно было использовать плагин
    - Количество возможных исключений уменьшено, теперь использовать API удобнее

    v1.1.1
    - Убрал из jar-ника аннотации JetBrains
     
  11. demkom

    demkom Guest

    Хорошая вещь. Буду ждать пока функционал увеличится, тогда напишу себе замену BattleLevels.
     
  12. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    v0.4
    - Всё сначала
     

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