OrynthEconomy — двухвалютная экономика (донат валюта поддержка )

OrynthEconomy — двухвалютная экономика (донат валюта поддержка ) 1.0.0

Compatible API Versions
1.0.0
OrynthEconomy 1.0.0
Двухвалютная экономика для NukkitMOT

OrynthEconomy — самостоятельная экономика с обычной и донатной валютой. Плагин хранит счета игроков, поддерживает переводы, гибкое форматирование сумм, PlaceholderAPI и предоставляет Java API для интеграции магазинов, меню и других серверных плагинов.

Основные возможности:
  • два независимых баланса: REGULAR и DONATE;
  • защищённые переводы между игроками с повторным подтверждением команды;
  • настраиваемые начальные и максимальные балансы;
  • запрет или разрешение отрицательного баланса;
  • автоматическое сохранение счетов в accounts.yml;
  • форматы чисел SPACE, DOT, COMMA и PLAIN;
  • сокращённые суммы K, M и B;
  • настраиваемые символы обеих валют;
  • уведомления об изменениях от администратора и сторонних плагинов;
  • плейсхолдеры баланса, позиции в рейтинге и символов валют;
  • публичный Java API и отменяемое событие BalanceChangeEvent.

Команды игроков

/balance [ник] — посмотреть обычный баланс.
Алиасы: /bal, /money.

/donbalance [ник] — посмотреть донатный баланс.
Алиасы: /dbal, /donbal.

/pay <ник> <сумма> — перевести обычную валюту другому игроку.
Алиасы: /transfer, /перевести.

Если подтверждение включено, игрок должен повторить ту же команду в течение заданного времени. Если получатель или сумма изменились, подтверждение начинается заново.

Административные команды обычной валюты

/givemoney <ник> <сумма> [-a] — начислить монеты.
Алиас: /addmoney.

/takemoney <ник> <сумма> [-a] — снять монеты.
Алиас: /removemoney.

/setmoney <ник> <сумма> [-a] — установить точный баланс.

Административные команды донатной валюты

/givedon <ник> <сумма> [-a] — начислить донатную валюту.
Алиас: /adddon.

/takedon <ник> <сумма> [-a] — снять донатную валюту.
Алиас: /removedon.

/setdon <ник> <сумма> [-a] — установить точный донатный баланс.

Флаг -a выполняет административное изменение тихо: игрок не получает уведомление. Отправитель команды всё равно видит результат операции.

Управление плагином

/oryntheconomy reload — перезагрузить config.yml и messages.yml.
Алиас основной команды: /oryeco.

Суммы можно вводить как 1000, 1 000,50, 10k, 5m или 1b. Поддерживаются также кириллические сокращения к, м и б.

oryntheconomy.command.balance — просмотр своего обычного баланса. По умолчанию: все.

oryntheconomy.command.balance.others — просмотр обычного баланса другого игрока. По умолчанию: все.

oryntheconomy.command.donbalance — просмотр своего донатного баланса. По умолчанию: все.

oryntheconomy.command.donbalance.others — просмотр донатного баланса другого игрока. По умолчанию: все.

oryntheconomy.command.pay — денежные переводы. По умолчанию: все.

oryntheconomy.command.givemoney — выдача обычной валюты. По умолчанию: OP.

oryntheconomy.command.takemoney — снятие обычной валюты. По умолчанию: OP.

oryntheconomy.command.setmoney — установка обычного баланса. По умолчанию: OP.

oryntheconomy.command.givedon — выдача донатной валюты. По умолчанию: OP.

oryntheconomy.command.takedon — снятие донатной валюты. По умолчанию: OP.

oryntheconomy.command.setdon — установка донатного баланса. По умолчанию: OP.

oryntheconomy.command.reload — перезагрузка конфигурации. По умолчанию: OP.

PlaceholderAPI-nukkit является необязательной зависимостью. Интеграция включается параметром placeholder-api.enabled. Регистр названия важен.

Обычная валюта:
Code:
%OrynthEconomy_balance%
%OrynthEconomy_balance_full%
%OrynthEconomy_balance_raw%
%OrynthEconomy_balance_fixed%
%OrynthEconomy_balance_short%
%OrynthEconomy_balance_rank%
Донатная валюта:
Code:
%OrynthEconomy_donbalance%
%OrynthEconomy_donbalance_full%
%OrynthEconomy_donbalance_raw%
%OrynthEconomy_donbalance_fixed%
%OrynthEconomy_donbalance_short%
%OrynthEconomy_donbalance_rank%
Символы валют:
Code:
%OrynthEconomy_currency_symbol%
%OrynthEconomy_don_currency_symbol%
Значения форматов:
  • balance — сумма в настроенном формате;
  • full — форматированная сумма вместе с символом валюты;
  • raw — точное число без разделителей и лишних нулей;
  • fixed — число с фиксированным количеством знаков после точки;
  • short — сокращённый вид, например 12.5K или 3M;
  • rank — место игрока в рейтинге выбранной валюты.

Для получения баланса другого игрока передайте ник в параметре:
Code:
%OrynthEconomy_balance<Steve>%
%OrynthEconomy_donbalance<Steve>%

YAML:
# Начальные балансы новых игроков
balances:
  default: "0"
  default-donate: "0"
  allow-negative: false
  maximum: "999999999999999"
  maximum-donate: "999999999999999"

# Формат отображения денег
format:
  mode: SPACE
  decimals: 2
  trim-zeroes: true
  symbol: "$"
  donate-symbol: "₽"
  symbol-after-number: true

# Переводы между игроками
transfer:
  enabled: true
  minimum: "1"
  maximum: "999999999999999"
  confirmation:
    enabled: true
    timeout-seconds: 30

# Хранилище и автосохранение
storage:
  file: accounts.yml
  autosave-seconds: 300

# Уведомления игрокам
notifications:
  admin-changes: true
  api-changes: true
  default-api-source: "серверного плагина"

placeholder-api:
  enabled: true
Режимы format.mode:
  • SPACE → 100 000,50;
  • DOT → 100.000,50;
  • COMMA → 100,000.50;
  • PLAIN → 100000.50.

Количество знаков после запятой настраивается от 0 до 8. Все сообщения и цвета полностью изменяются в messages.yml.

Добавьте JAR OrynthEconomy в зависимости своего проекта.

Gradle:
Code:
dependencies {
    compileOnly files('libs/OrynthEconomy-1.0.0.jar')
}
Добавьте зависимость в plugin.yml, чтобы ваш плагин загружался после экономики:

YAML:
depend: ["OrynthEconomy"]
Если интеграция необязательна:

YAML:
softdepend: ["OrynthEconomy"]
Получение API:

Java:
import ru.cryovex.oryntheconomy.api.OrynthEconomyAPI;

OrynthEconomyAPI economy = OrynthEconomyAPI.getInstance();
При жёсткой зависимости получайте экземпляр в onEnable() своего плагина. Метод выбросит IllegalStateException, если OrynthEconomy ещё не включён.

Получение балансов:

Java:
OrynthEconomyAPI economy = OrynthEconomyAPI.getInstance();

double regular = economy.getBalance(player);
double regularByName = economy.getBalance("Steve");

double donate = economy.getDonBalance(player);
double donateByName = economy.getDonBalance("Steve");
Для денежных вычислений без потери точности используйте BigDecimal:

Java:
import java.math.BigDecimal;
import ru.cryovex.oryntheconomy.api.Currency;

BigDecimal exact = economy.getBalanceExact("Steve", Currency.REGULAR);
BigDecimal exactDonate = economy.getBalanceExact("Steve", Currency.DONATE);
Проверка и создание счёта:

Java:
boolean exists = economy.hasAccount("Steve");
boolean created = economy.createAccount("Steve"); // true, если создан новый счёт
Операции с обычной валютой:

Java:
boolean added = economy.addBalance("Steve", 100.0);
boolean removed = economy.removeBalance("Steve", 25.0);
boolean changed = economy.setBalance("Steve", 500.0);
Операции с донатной валютой:

Java:
boolean added = economy.addDonBalance("Steve", 10.0);
boolean removed = economy.removeDonBalance("Steve", 2.0);
boolean changed = economy.setDonBalance("Steve", 50.0);
Короткие методы выполняют изменение тихо. Возвращается true, если операция выполнена, и false, если сумма некорректна, превышен лимит, недостаточно средств или изменение отменено событием.

Операция с уведомлением игрока:

Java:
boolean success = economy.addDonBalance(
    player.getName(),
    5.0,
    false,          // silent: false — показать уведомление
    "НазваниеПлагина"
);
Параметр source выводится в настраиваемом сообщении. При silent = true уведомление не отправляется.

Перевод обычной валюты:

Java:
boolean success = economy.transfer("Steve", "Alex", 100.0);
Перевод изменяет оба счёта одной синхронизированной операцией. Для отправителя и получателя должны существовать счета. BalanceChangeEvent вызывается для обеих сторон; если хотя бы одно событие отменено, перевод не применяется.

Форматирование:

Java:
String value = economy.format(12500.50);
String fullRegular = economy.format(12500.50, Currency.REGULAR, true);
String fullDonate = economy.format(50, Currency.DONATE, true);
Получение всех счетов:

Java:
Map<String, Double> regularAccounts = economy.getAllMoney();
Map<String, Double> donateAccounts = economy.getAllDonMoney();

Java:
import cn.nukkit.Player;
import ru.cryovex.oryntheconomy.api.OrynthEconomyAPI;

public boolean buy(Player player, double price) {
    OrynthEconomyAPI economy = OrynthEconomyAPI.getInstance();

    if (economy.getBalance(player) < price) {
        player.sendMessage("Недостаточно средств");
        return false;
    }

    boolean paid = economy.removeBalance(
        player.getName(),
        price,
        false,
        "ExampleShop"
    );

    if (!paid) {
        player.sendMessage("Покупка была отменена");
        return false;
    }

    // Выдайте товар только после успешного списания.
    return true;
}
Всегда проверяйте возвращаемое значение операции и выдавайте товар только после true. Это защищает покупку от выдачи предмета без успешного списания.

BalanceChangeEvent вызывается до применения изменения и может быть отменён другим плагином.

Java:
import cn.nukkit.Server;
import cn.nukkit.event.EventHandler;
import cn.nukkit.event.Listener;
import ru.cryovex.oryntheconomy.api.Currency;
import ru.cryovex.oryntheconomy.event.BalanceChangeEvent;

public final class EconomyListener implements Listener {

    @EventHandler
    public void onBalanceChange(BalanceChangeEvent event) {
        String player = event.getPlayerName();
        Currency currency = event.getCurrency();

        Server.getInstance().getLogger().info(
            player + ": " + event.getOldBalance()
                + " -> " + event.getNewBalance()
                + " (" + event.getDifference() + ")"
        );

        // Пример: запретить списание донатной валюты сторонним API.
        if (currency == Currency.DONATE
                && event.getDifference().signum() < 0
                && event.getReason().name().equals("API")) {
            event.setCancelled(true);
        }
    }
}
Доступные данные события:
  • getPlayerName() — имя владельца счёта;
  • getCurrency() — REGULAR или DONATE;
  • getOldBalance() — баланс до операции;
  • getNewBalance() — предполагаемый баланс после операции;
  • getDifference() — разница между новым и старым балансом;
  • getReason() — причина изменения;
  • getSource() — источник операции;
  • setCancelled(true) — отменить изменение.

ChangeReason: ADMIN_GIVE, ADMIN_TAKE, ADMIN_SET, TRANSFER_SEND, TRANSFER_RECEIVE, API, OTHER.

Для упрощения миграции старых интеграций доступны методы в стиле EconomyAPI:

Java:
double balance = economy.myMoney(player);

int addResult = economy.addMoney(player, 100.0);
int removeResult = economy.reduceMoney(player, 50.0);
int setResult = economy.setMoney(player, 500.0);
Методы изменения возвращают 1 при успехе и -1 при ошибке.

Требования:
  • NukkitMOT;
  • Java 17 или новее;
  • PlaceholderAPI-nukkit — необязательно.

Остановите сервер, поместите OrynthEconomy-1.0.0.jar в папку plugins и запустите сервер. Плагин создаст:

Code:
plugins/OrynthEconomy/
├── config.yml
├── messages.yml
└── accounts.yml
Не редактируйте accounts.yml на работающем сервере: данные периодически сохраняются автоматически и также сохраняются при нормальном выключении.

Версия: 1.0.0
API: 1.0.0
Автор: Cryovex
Author
Cryovex
Downloads
4
Views
18
First release
Last update
Rating
0.00 star(s) 0 ratings

More resources from Cryovex

Top