Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Метки:
Теги Теги
api plugin rpg

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

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

    0 голосов 0,0%

  • Опрос закрыт .

OsipXD

Старожил
Пользователь
Баллы
173
Имя в 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.

Java:
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:

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


v0.4
- Всё сначала
 
Последнее редактирование:
В голосовании последние 3 пункта однозначно нужно внедрять
 
Почему нельзя использовать new вместо clone?
Потому что при регистрации подсистемы создаётся её неинициализированный экземпляр, а потом, когда надо получить систему для конкретного игрока, то он клонируется и вызывается метод инициализации. На самом деле я уже понял, что это плохое решение и лучше тут использовать абстрактную фабрику, тогда можно будет один раз получить фабрику, а потом из нее сколько угодно инициализированных систем получать.
v1.1.0
- API обновлён до 1.1.0
- Исправлена ошибка из-за которой невозможно было использовать плагин
- Количество возможных исключений уменьшено, теперь использовать API удобнее

v1.1.1
- Убрал из jar-ника аннотации JetBrains
 
Хорошая вещь. Буду ждать пока функционал увеличится, тогда напишу себе замену BattleLevels.
 

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

Назад
Верх