Prakter Terbaik API Ekonomi

API Ekonomi mencoba untuk menjadi cukup abstrak untuk memberikan plugins ekonomi fleksibilitas dalam bagaimana cara mereka beroperasi. Dalam rangka memberikan plugins ekonomi kontrol yang sebanyak-banyaknya, plugins yang menghabiskan API ekonomi harus mengikuti beberapa petunjuk ketika bekerja dengannya:

Penarikan uang

Plugins seharusnya tidak memeriksa kalau sebuah akun memiliki cukup uang sebelum mencoba untuk menariknya. Selagi hal ini mungkin terdengar keterlaluan, Hal itu memperbolehkan plugins untuk mengontrol sepenuhnya bagaimana mereka menghadapi saldo negatif.

Dengan mengecek sendiri apakah akun memiliki cukup uang, anda mencegah plugin ekonomi (kemungkinan) mengizinkan saldo negatif. Sebaga contoh, satu plugin ekonomi mungkin ingin mengizinkan saldo negatif kepada admins, atau pengguna dengan izin tertentu. Dengan melakukan pemeriksaan sendiri, anda dapat mengambil kekuasaan ini dari plugin ekonomi.

Kode ini menggambarkan apa yang tidak bisa dilakukan:

import java.math.BigDecimal;

import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.cause.EventContext;
import org.spongepowered.api.event.cause.EventContextKeys;
import org.spongepowered.api.service.economy.EconomyService;
import org.spongepowered.api.service.economy.account.Account;

PluginContainer plugin = ...;
EconomyService service = ...;
Account account = ...;
BigDecimal requiredAmount = BigDecimal.valueOf(20);
EventContext eventContext = EventContext.builder().add(EventContextKeys.PLUGIN, plugin).build();

// BAD: Don't perform this check
if (account.getBalance(service.getDefaultCurrency()).compareTo(requiredAmount) < 0) {
    // You don't have enough money!
} else {
    // The account has enough, let's withdraw some cash!
    account.withdraw(service.getDefaultCurrency(), requiredAmount, Cause.of(eventContext, plugin));
}

Daripada hal ini, hal terbaik untuk dilakukan adalah langsung menarik jumlah yang anda butuhkan, dan periksa :javadoc:`ResultType`dari kembalian :javadoc:`TransactionResult`. Dalam kasus ini sebuah plugin ekonomi yang tidak bisa memperbolehkan dana negatif akan langsung kembali dengan ResultType#ACCOUNT_NO_FUNDS, atau ResultType#FAILED.

Berikut ini bagaimana kamu sebaiknya menarik uang:

import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.cause.EventContext;
import org.spongepowered.api.event.cause.EventContextKeys;
import org.spongepowered.api.service.economy.transaction.ResultType;
import org.spongepowered.api.service.economy.transaction.TransactionResult;

PluginContainer plugin = ...;
EconomyService service = ...;
Account account = ...;
BigDecimal requiredAmount = BigDecimal.valueOf(20);
EventContext eventContext = EventContext.builder().add(EventContextKeys.PLUGIN, plugin).build();

TransactionResult result = account.withdraw(service.getDefaultCurrency(), requiredAmount,
                Cause.of(eventContext, plugin));
if (result.getResult() == ResultType.SUCCESS) {
    // Success!
} else if (result.getResult() == ResultType.FAILED || result.getResult() == ResultType.ACCOUNT_NO_FUNDS) {
    // Something went wrong!
} else {
    // Handle other conditions
}