Использование Economy API

Economy API объединяет все плагины экономики под одним API. Это означает, что любой плагин, использующий Economy API, будет совместим со всеми плагинами экономики, которые реализуют указанный API. На этой странице вы узнаете, как его использовать в Вашем собственном плагине.

Загрузка EconomyService

Чтобы использовать Economy API, вы должны сначала загрузить класс EconomyService используя ServiceManager.

Предупреждение

Вам нужно обращать внимание на различные game states, когда сервер запускается, останавливается или работает при использовании таких сервисов, как Economy API. Посмотрите на странице Сервисы для получения дополнительной информации.

Пример: Загрузка EconomyService

import org.spongepowered.api.service.economy.EconomyService;
import org.spongepowered.api.Sponge;

Optional<EconomyService> serviceOpt = Sponge.getServiceManager().provide(EconomyService.class);
if (!serviceOpt.isPresent()) {
    // handle there not being an economy implementation
}
EconomyService economyService = serviceOpt.get();

Предупреждение

Храните этот сервис в локальной переменной вместо глобальной переменной, поскольку реализация может измениться в любой момент. Если вам по какой-либо причине нужно хранить сервис глобально, используйте ChangeServiceProviderEvent, чтобы обновлять реализацию.

Примечание

В отличие от других сервисов, вы должны пытаться использовать ServiceManager#provide(java.lang.Class) вместо ServiceManager#provideUnchecked(java.lang.Class), потому что Sponge не предоставляет реализацию по умолчанию для EconomyService и поэтому не гарантирует, что она существует.

Использование EconomyService

После загрузки EconomyService и присвоения ей переменной вы готовы получить доступ ко всем функциям, которые может предложить Economy API.

Пример: Получение баланса игрока

import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.economy.EconomyService;
import org.spongepowered.api.service.economy.account.UniqueAccount;
import java.math.BigDecimal;
import java.util.Optional;

Optional<UniqueAccount> uOpt = economyService.getOrCreateAccount(player.getUniqueId());
if (uOpt.isPresent()) {
    UniqueAccount acc = uOpt.get();
    BigDecimal balance = acc.getBalance(economyService.getDefaultCurrency());
}

Некоторые методы Account требуют таких переменных, как:

  • Валюта: участвующая в обмене валюта

  • Причина: что вызвало изменение учётной записи

  • Контекст: контекст, в котором произошло изменение

Они предназначены для более продвинутых видов использования, но всё равно должны быть заполнены. Ниже приведен список допустимых значений по умолчанию:

  • Валюта: EconomyService#getDefaultCurrency()

  • Причина: Cause.of(EventContext.builder().add(EventContextKeys.PLUGIN, plugin).build(), plugin)

  • Контекст: new HashSet<Context>()