TF-EssentialsX/Essentials/src/com/earth2me/essentials/api/Economy.java

443 lines
12 KiB
Java
Raw Normal View History

package com.earth2me.essentials.api;
import com.earth2me.essentials.EssentialsConf;
import static com.earth2me.essentials.I18n._;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
2013-06-08 21:31:19 +00:00
import com.earth2me.essentials.utils.StringUtil;
import com.earth2me.essentials.utils.NumberUtil;
import java.io.File;
2013-05-05 03:13:17 +00:00
import java.math.BigDecimal;
2013-05-05 09:41:19 +00:00
import java.math.MathContext;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
2013-05-05 09:41:19 +00:00
* Instead of using this api directly, we recommend to use the register plugin: http://bit.ly/RegisterMethod
*/
public final class Economy
{
private Economy()
{
}
private static final Logger logger = Logger.getLogger("Minecraft");
private static IEssentials ess;
private static final String noCallBeforeLoad = "Essentials API is called before Essentials is loaded.";
2013-05-05 09:41:19 +00:00
public static final MathContext MATH_CONTEXT = MathContext.DECIMAL128;
/**
* @param aEss the ess to set
*/
public static void setEss(IEssentials aEss)
{
ess = aEss;
}
private static void createNPCFile(String name)
{
File folder = new File(ess.getDataFolder(), "userdata");
if (!folder.exists())
{
folder.mkdirs();
}
2013-06-08 21:31:19 +00:00
EssentialsConf npcConfig = new EssentialsConf(new File(folder, StringUtil.sanitizeFileName(name) + ".yml"));
npcConfig.load();
npcConfig.setProperty("npc", true);
npcConfig.setProperty("money", ess.getSettings().getStartingBalance());
2013-04-22 22:47:45 +00:00
npcConfig.forceSave();
}
private static void deleteNPC(String name)
{
File folder = new File(ess.getDataFolder(), "userdata");
if (!folder.exists())
{
folder.mkdirs();
}
2013-06-08 21:31:19 +00:00
File config = new File(folder, StringUtil.sanitizeFileName(name) + ".yml");
EssentialsConf npcConfig = new EssentialsConf(config);
npcConfig.load();
if (npcConfig.hasProperty("npc") && npcConfig.getBoolean("npc", false))
{
if (!config.delete())
{
logger.log(Level.WARNING, _("deleteFileError", config));
}
ess.getUserMap().removeUser(name);
}
}
private static User getUserByName(String name)
{
if (ess == null)
{
throw new RuntimeException(noCallBeforeLoad);
}
2012-10-26 20:34:36 +00:00
return ess.getUser(name);
}
/**
* Returns the balance of a user
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @return balance
2013-05-05 09:41:19 +00:00
* @throws UserDoesNotExistException
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static double getMoney(String name) throws UserDoesNotExistException
2013-05-05 09:41:19 +00:00
{
return getMoneyExact(name).doubleValue();
}
public static BigDecimal getMoneyExact(String name) throws UserDoesNotExistException
{
User user = getUserByName(name);
if (user == null)
{
throw new UserDoesNotExistException(name);
}
2013-05-05 09:41:19 +00:00
return user.getMoney();
}
/**
* Sets the balance of a user
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @param balance The balance you want to set
* @throws UserDoesNotExistException If a user by that name does not exists
* @throws NoLoanPermittedException If the user is not allowed to have a negative balance
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static void setMoney(String name, double balance) throws UserDoesNotExistException, NoLoanPermittedException
2013-05-05 09:41:19 +00:00
{
try
{
setMoney(name, BigDecimal.valueOf(balance));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to set balance of " + name + " to " + balance + ": " + e.getMessage(), e);
}
}
public static void setMoney(String name, BigDecimal balance) throws UserDoesNotExistException, NoLoanPermittedException
{
User user = getUserByName(name);
if (user == null)
{
throw new UserDoesNotExistException(name);
}
2013-05-05 09:41:19 +00:00
if (balance.compareTo(ess.getSettings().getMinMoney()) < 0)
{
throw new NoLoanPermittedException();
}
2013-05-05 09:41:19 +00:00
if (balance.signum() < 0 && !user.isAuthorized("essentials.eco.loan"))
{
throw new NoLoanPermittedException();
}
2013-05-05 09:41:19 +00:00
user.setMoney(balance);
}
/**
* Adds money to the balance of a user
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @param amount The money you want to add
* @throws UserDoesNotExistException If a user by that name does not exists
* @throws NoLoanPermittedException If the user is not allowed to have a negative balance
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static void add(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException
{
2013-05-05 09:41:19 +00:00
try
{
add(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to add " + amount + " to balance of " + name + ": " + e.getMessage(), e);
}
}
public static void add(String name, BigDecimal amount) throws UserDoesNotExistException, NoLoanPermittedException, ArithmeticException
{
BigDecimal result = getMoneyExact(name).add(amount, MATH_CONTEXT);
setMoney(name, result);
}
/**
* Substracts money from the balance of a user
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @param amount The money you want to substract
* @throws UserDoesNotExistException If a user by that name does not exists
* @throws NoLoanPermittedException If the user is not allowed to have a negative balance
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static void subtract(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException
{
2013-05-05 09:41:19 +00:00
try
{
substract(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to substract " + amount + " of balance of " + name + ": " + e.getMessage(), e);
}
}
public static void substract(String name, BigDecimal amount) throws UserDoesNotExistException, NoLoanPermittedException, ArithmeticException
{
BigDecimal result = getMoneyExact(name).subtract(amount, MATH_CONTEXT);
setMoney(name, result);
}
/**
* Divides the balance of a user by a value
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @param value The balance is divided by this value
* @throws UserDoesNotExistException If a user by that name does not exists
* @throws NoLoanPermittedException If the user is not allowed to have a negative balance
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static void divide(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException
{
try
{
divide(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to divide balance of " + name + " by " + amount + ": " + e.getMessage(), e);
}
}
public static void divide(String name, BigDecimal amount) throws UserDoesNotExistException, NoLoanPermittedException, ArithmeticException
{
2013-05-05 09:41:19 +00:00
BigDecimal result = getMoneyExact(name).divide(amount, MATH_CONTEXT);
setMoney(name, result);
}
/**
* Multiplies the balance of a user by a value
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @param value The balance is multiplied by this value
* @throws UserDoesNotExistException If a user by that name does not exists
* @throws NoLoanPermittedException If the user is not allowed to have a negative balance
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static void multiply(String name, double amount) throws UserDoesNotExistException, NoLoanPermittedException
{
try
{
multiply(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to multiply balance of " + name + " by " + amount + ": " + e.getMessage(), e);
}
}
public static void multiply(String name, BigDecimal amount) throws UserDoesNotExistException, NoLoanPermittedException, ArithmeticException
{
2013-05-05 09:41:19 +00:00
BigDecimal result = getMoneyExact(name).multiply(amount, MATH_CONTEXT);
setMoney(name, result);
}
/**
* Resets the balance of a user to the starting balance
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @throws UserDoesNotExistException If a user by that name does not exists
* @throws NoLoanPermittedException If the user is not allowed to have a negative balance
*/
public static void resetBalance(String name) throws UserDoesNotExistException, NoLoanPermittedException
{
if (ess == null)
{
throw new RuntimeException(noCallBeforeLoad);
}
setMoney(name, ess.getSettings().getStartingBalance());
}
/**
* @param name Name of the user
* @param amount The amount of money the user should have
* @return true, if the user has more or an equal amount of money
* @throws UserDoesNotExistException If a user by that name does not exists
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static boolean hasEnough(String name, double amount) throws UserDoesNotExistException
{
2013-05-05 09:41:19 +00:00
try
{
return hasEnough(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to compare balance of " + name + " with " + amount + ": " + e.getMessage(), e);
return false;
}
}
public static boolean hasEnough(String name, BigDecimal amount) throws UserDoesNotExistException, ArithmeticException
{
return amount.compareTo(getMoneyExact(name)) <= 0;
}
/**
* @param name Name of the user
* @param amount The amount of money the user should have
* @return true, if the user has more money
* @throws UserDoesNotExistException If a user by that name does not exists
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static boolean hasMore(String name, double amount) throws UserDoesNotExistException
{
2013-05-05 09:41:19 +00:00
try
{
return hasMore(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to compare balance of " + name + " with " + amount + ": " + e.getMessage(), e);
return false;
}
}
public static boolean hasMore(String name, BigDecimal amount) throws UserDoesNotExistException, ArithmeticException
{
return amount.compareTo(getMoneyExact(name)) < 0;
}
/**
* @param name Name of the user
* @param amount The amount of money the user should not have
* @return true, if the user has less money
* @throws UserDoesNotExistException If a user by that name does not exists
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static boolean hasLess(String name, double amount) throws UserDoesNotExistException
{
2013-05-05 09:41:19 +00:00
try
{
return hasLess(name, BigDecimal.valueOf(amount));
}
catch (ArithmeticException e)
{
logger.log(Level.WARNING, "Failed to compare balance of " + name + " with " + amount + ": " + e.getMessage(), e);
return false;
}
}
public static boolean hasLess(String name, BigDecimal amount) throws UserDoesNotExistException, ArithmeticException
{
return amount.compareTo(getMoneyExact(name)) > 0;
}
/**
* Test if the user has a negative balance
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @return true, if the user has a negative balance
* @throws UserDoesNotExistException If a user by that name does not exists
*/
public static boolean isNegative(String name) throws UserDoesNotExistException
{
2013-05-05 09:41:19 +00:00
return getMoneyExact(name).signum() < 0;
}
/**
2013-05-05 09:41:19 +00:00
* Formats the amount of money like all other Essentials functions. Example: $100000 or $12345.67
*
* @param amount The amount of money
* @return Formatted money
*/
2013-05-05 09:41:19 +00:00
@Deprecated
public static String format(double amount)
2013-05-05 09:41:19 +00:00
{
try
{
return format(BigDecimal.valueOf(amount));
}
catch (NumberFormatException e)
{
2013-06-17 13:05:45 +00:00
logger.log(Level.WARNING, "Failed to display " + amount + ": " + e.getMessage(), e);
2013-05-05 09:41:19 +00:00
return "NaN";
}
}
public static String format(BigDecimal amount)
{
if (ess == null)
{
throw new RuntimeException(noCallBeforeLoad);
}
2013-06-08 21:31:19 +00:00
return NumberUtil.displayCurrency(amount, ess);
}
/**
* Test if a player exists to avoid the UserDoesNotExistException
2013-05-05 09:41:19 +00:00
*
* @param name Name of the user
* @return true, if the user exists
*/
public static boolean playerExists(String name)
{
return getUserByName(name) != null;
}
/**
* Test if a player is a npc
2013-05-05 09:41:19 +00:00
*
* @param name Name of the player
* @return true, if it's a npc
2013-05-05 09:41:19 +00:00
* @throws UserDoesNotExistException
*/
public static boolean isNPC(String name) throws UserDoesNotExistException
{
User user = getUserByName(name);
if (user == null)
{
throw new UserDoesNotExistException(name);
}
return user.isNPC();
}
/**
* Creates dummy files for a npc, if there is no player yet with that name.
2013-05-05 09:41:19 +00:00
*
* @param name Name of the player
* @return true, if a new npc was created
*/
public static boolean createNPC(String name)
{
User user = getUserByName(name);
if (user == null)
{
createNPCFile(name);
return true;
}
return false;
}
/**
2013-05-05 09:41:19 +00:00
* Deletes a user, if it is marked as npc.
*
* @param name Name of the player
2013-05-05 09:41:19 +00:00
* @throws UserDoesNotExistException
*/
public static void removeNPC(String name) throws UserDoesNotExistException
{
User user = getUserByName(name);
if (user == null)
{
throw new UserDoesNotExistException(name);
}
deleteNPC(name);
}
}