- Compatible API Versions
- 1.0.0
OrynthEconomy 1.0.0
Двухвалютная экономика для NukkitMOT
Двухвалютная экономика для 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
SPACE→ 100 000,50;DOT→ 100.000,50;COMMA→ 100,000.50;PLAIN→ 100000.50.
Количество знаков после запятой настраивается от 0 до 8. Все сообщения и цвета полностью изменяются в
messages.yml.Добавьте JAR OrynthEconomy в зависимости своего проекта.
Gradle:
Добавьте зависимость в
Если интеграция необязательна:
Получение API:
При жёсткой зависимости получайте экземпляр в
Gradle:
Code:
dependencies {
compileOnly files('libs/OrynthEconomy-1.0.0.jar')
}
plugin.yml, чтобы ваш плагин загружался после экономики:
YAML:
depend: ["OrynthEconomy"]
YAML:
softdepend: ["OrynthEconomy"]
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