2016-06-14 05:06:58 +02:00
|
|
|
package org.appledash.saneeconomy.economy;
|
|
|
|
|
|
|
|
import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend;
|
2016-06-15 01:47:14 +02:00
|
|
|
import org.appledash.saneeconomy.utils.NumberUtils;
|
2016-06-15 01:19:00 +02:00
|
|
|
import org.bukkit.OfflinePlayer;
|
2016-06-14 05:06:58 +02:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Created by AppleDash on 6/13/2016.
|
|
|
|
* Blackjack is still best pony.
|
|
|
|
*
|
|
|
|
* Represents our EconomyManager, which manages players' balances.
|
|
|
|
*/
|
|
|
|
public class EconomyManager {
|
2016-06-14 10:59:16 +02:00
|
|
|
private final Currency currency;
|
|
|
|
private final EconomyStorageBackend backend;
|
2016-06-14 05:06:58 +02:00
|
|
|
|
|
|
|
public EconomyManager(Currency currency, EconomyStorageBackend backend) {
|
|
|
|
this.currency = currency;
|
|
|
|
this.backend = backend;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Currency we're using/
|
|
|
|
* @return Currency
|
|
|
|
*/
|
|
|
|
public Currency getCurrency() {
|
|
|
|
return currency;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the balance of a player, formatted according to our Currency's format.
|
|
|
|
* @param player Player
|
|
|
|
* @return Formatted balance
|
|
|
|
*/
|
|
|
|
public String getFormattedBalance(Player player) {
|
|
|
|
return currency.formatAmount(backend.getBalance(player));
|
|
|
|
}
|
|
|
|
|
2016-06-14 05:29:26 +02:00
|
|
|
/**
|
|
|
|
* Check whether a player has used the economy system before.
|
|
|
|
* @param player Player to check
|
|
|
|
* @return True if they have used the economy system before, false otherwise
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public boolean accountExists(OfflinePlayer player) {
|
2016-06-14 05:29:26 +02:00
|
|
|
return backend.accountExists(player);
|
|
|
|
}
|
|
|
|
|
2016-06-14 05:06:58 +02:00
|
|
|
/**
|
|
|
|
* Get a player's balance.
|
|
|
|
* @param targetPlayer Player to get balance of
|
|
|
|
* @return Player's balance
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public double getBalance(OfflinePlayer targetPlayer) {
|
2016-06-14 05:06:58 +02:00
|
|
|
return backend.getBalance(targetPlayer);
|
|
|
|
}
|
|
|
|
|
2016-06-15 01:19:00 +02:00
|
|
|
|
2016-06-14 05:06:58 +02:00
|
|
|
/**
|
|
|
|
* Check if a player has a certain amount of money.
|
|
|
|
* @param targetPlayer Player to check balance of
|
|
|
|
* @param requiredBalance How much money we're checking for
|
|
|
|
* @return True if they have requiredBalance or more, false otherwise
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public boolean hasBalance(OfflinePlayer targetPlayer, double requiredBalance) {
|
2016-06-14 05:06:58 +02:00
|
|
|
return getBalance(targetPlayer) >= requiredBalance;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add to a player's balance.
|
|
|
|
* @param targetPlayer Player to add to
|
|
|
|
* @param amount Amount to add
|
|
|
|
* @return Player's new balance
|
|
|
|
* @throws IllegalArgumentException If amount is negative
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public double addBalance(OfflinePlayer targetPlayer, double amount) {
|
2016-06-15 01:47:14 +02:00
|
|
|
amount = NumberUtils.filterAmount(amount);
|
|
|
|
|
2016-06-14 05:06:58 +02:00
|
|
|
if (amount < 0) {
|
|
|
|
throw new IllegalArgumentException("Cannot add a negative amount!");
|
|
|
|
}
|
|
|
|
|
|
|
|
return backend.addBalance(targetPlayer, amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Subtract from a player's balance.
|
|
|
|
* If the subtraction would result in a negative balance, the balance is instead set to 0.
|
|
|
|
* @param targetPlayer Player to subtract from
|
|
|
|
* @param amount Amount to subtract
|
|
|
|
* @return Player's new balance
|
|
|
|
* @throws IllegalArgumentException If amount is negative
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public double subtractBalance(OfflinePlayer targetPlayer, double amount) {
|
2016-06-15 01:47:14 +02:00
|
|
|
amount = NumberUtils.filterAmount(amount);
|
|
|
|
|
2016-06-14 05:06:58 +02:00
|
|
|
if (amount < 0) {
|
|
|
|
throw new IllegalArgumentException("Cannot subtract a negative amount!");
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Subtracting that much would result in a negative balance - don't do that */
|
|
|
|
if (backend.getBalance(targetPlayer) - amount <= 0.0D) {
|
|
|
|
backend.setBalance(targetPlayer, 0.0D);
|
|
|
|
return 0.0D;
|
|
|
|
}
|
|
|
|
|
|
|
|
return backend.subtractBalance(targetPlayer, amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set a player's balance.
|
|
|
|
* @param targetPlayer Player to set balance of
|
|
|
|
* @param amount Amount to set balance to
|
|
|
|
* @throws IllegalArgumentException If amount is negative
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public void setBalance(OfflinePlayer targetPlayer, double amount) {
|
2016-06-15 01:47:14 +02:00
|
|
|
amount = NumberUtils.filterAmount(amount);
|
|
|
|
|
2016-06-14 05:06:58 +02:00
|
|
|
if (amount < 0) {
|
|
|
|
throw new IllegalArgumentException("Cannot set balance to a negative value!");
|
|
|
|
}
|
|
|
|
|
|
|
|
backend.setBalance(targetPlayer, amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Transfer money from one player to another.
|
|
|
|
* @param fromPlayer Player to transfer from
|
|
|
|
* @param toPlayer Player to transfer to
|
|
|
|
* @param amount Amount to transfer
|
|
|
|
* @return True if success, false if fromPlayer has insufficient funds.
|
|
|
|
* @throws IllegalArgumentException If amount is negative
|
|
|
|
*/
|
2016-06-15 01:19:00 +02:00
|
|
|
public boolean transfer(OfflinePlayer fromPlayer, Player toPlayer, double amount) {
|
2016-06-15 01:47:14 +02:00
|
|
|
amount = NumberUtils.filterAmount(amount);
|
|
|
|
|
2016-06-14 05:06:58 +02:00
|
|
|
if (amount < 0) {
|
|
|
|
throw new IllegalArgumentException("Cannot transfer a negative amount!");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!hasBalance(fromPlayer, amount)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Perform the actual transfer. TODO: Maybe return their new balances in some way? */
|
|
|
|
subtractBalance(fromPlayer, amount);
|
|
|
|
addBalance(toPlayer, amount);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2016-06-14 14:31:52 +02:00
|
|
|
|
|
|
|
public EconomyStorageBackend getBackend() {
|
|
|
|
return backend;
|
|
|
|
}
|
2016-06-14 05:06:58 +02:00
|
|
|
}
|