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

Плагин [DEV/RPG] BukkitMimic v1.1.1 - API для работы с RPG плагинами [1.7.10+]

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

?

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

  1. Свой вариант (в комментарии)

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

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

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

Результаты будут видны только после голосования.
  1. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    [​IMG]
    Версия: v1.1.1
    Скачать | GitHub | JavaDoc

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

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

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

    Коротко о структуре
    Каждая концепция - это система, а реализация концепции - подсистема.
    В API есть реестр систем, в который записаны все подсистемы для каждой системы.
    Вы в любой момент можете зарегистрировать новую или получить существующую реализации системы, чтобы с ней работать.

    Какие системы существуют?
    На данный момент (v1.0) существует всего две системы и по одной подсистеме для каждой из них:

    - LevelSystem - система уровня и опыта игрока
    ----- VanillaLevelSystem - подсистема ванильного опыта и уровня
    - ClassSystem - система классов игрока
    ----- PermissionsClassSystem - подсистема классов, основанных на пермишенах (например, чтобы назначить игроку класс Mage, нужно дать ему пермишен "mimic.class.mage").

    Как использовать?
    Если вы используете систему сборки (Gradle, Maven и т. д.) для того чтобы подключить библиотеку к своему проекту, используйте репозиторий JitPack.
    Если не используете, то подключите скомпилированный jar (доступный по ссылке выше).
    Код:
    // Получаем реестр
    SystemRegistry registry = BukkitMimic.getSystemRegistry();
    
    // Получаем фабрику для системы уровней, которуюу после мы сможем 
    // хранить для получения систем определенных игроков
    SystemFactory<LevelSystem> levelSystemFactory;
    try {
        levelSystemFactory = registry.getSystemFactory(LevelSystem.class);
    } catch(SystemNotFoundException e) {
        // Возникает, если в реестре нет ни одной подсистемы для данной системы
    }
           
    // Теперь получим систему уровней определённого игрока
    Player player = somePlayer;
    LevelSystem levelSystem = levelSystemFactory.get(player);
    
    // Работаем с полученной системой
    int level = levelSystem.getLevel();
    int exp = levelSystem.getExp();
    int totalExp = levelSystem.getTotalExp();
    // и т.д. Все методы с описанием на английском можно найти в JavaDoc[FONT=Tahoma]

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

    Пример регистрации новой подсистемы:
    Код:
    // Получаем реестр систем
    BukkitSystemRegistry registry = BukkitMimic.getSystemRegistry();
    
    // Регистрируем подсистему
    try {
        registry.registerSubsystem(MySubsystem.class);
    } catch(SystemNotNeededException e) {
        // Это исключение возникает, если система не зарегистрирована из-за того, 
        // что требования для ее существования не выполнены (а именно, не 
        // существуют необходимые классы
    } catch(SystemNotRegisteredException e) {
        // Это исключение вызывается, если система не зарегистрирована из-за 
        // возникшей ошибки. Это происходит, если неверно реализована подсистема
    }
    Конечно, это неполная документация. Если хотите посмотреть примеры создания систем и подсистем, то смотрите исходники существующих систем (ru.endlesscode.mimic.api.system.ClassSystem) и подсистем (ru.endlesscode.mimic.bukkit.system.PermissionsClassSystem).

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

    v1.1.1
    - API обновлён до 1.1.0

    - Исправлена ошибка из-за которой невозможно было использовать плагин
    - Количество возможных исключений уменьшено, теперь использовать API удобнее

    v1.0

    - Первый релиз
     
    Последнее редактирование: 23 апр 2017
  2. Хостинг MineCraft
    <
  3. Автор темы
    OsipXD

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

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

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

    Баллы:
    46
    :silence::silence::silence::silence::good:[DOUBLEPOST=1491982875,1491982797][/DOUBLEPOST]Вау[DOUBLEPOST=1491982929][/DOUBLEPOST]Сделай систему магии
    :lol::lol::lol::lol::lol::lol::lol::lol::lol:
     
  5. Автор темы
    OsipXD

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

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

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

    Баллы:
    46
    Всё!!!
     
  7. SaMEC

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

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

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

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

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

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

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

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

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

    Баллы:
    76
    Почему нельзя использовать new вместо clone?
     
  12. Автор темы
    OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Потому что при регистрации подсистемы создаётся её неинициализированный экземпляр, а потом, когда надо получить систему для конкретного игрока, то он клонируется и вызывается метод инициализации. На самом деле я уже понял, что это плохое решение и лучше тут использовать абстрактную фабрику, тогда можно будет один раз получить фабрику, а потом из нее сколько угодно инициализированных систем получать.[DOUBLEPOST=1492954562,1492087183][/DOUBLEPOST]v1.1.0
    - API обновлён до 1.1.0
    - Исправлена ошибка из-за которой невозможно было использовать плагин
    - Количество возможных исключений уменьшено, теперь использовать API удобнее
    [DOUBLEPOST=1492956136][/DOUBLEPOST]v1.1.1
    - Убрал из jar-ника аннотации JetBrains
     
  13. demkom

    demkom Администратор Пользователь

    Баллы:
    76
    Skype:
    demkom1983
    Имя в Minecraft:
    G_demkom_G
    Хорошая вещь. Буду ждать пока функционал увеличится, тогда напишу себе замену BattleLevels.
     

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