SaneEconomy/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/Currency.java

115 lines
3.5 KiB
Java
Raw Normal View History

2016-06-14 05:06:58 +02:00
package org.appledash.saneeconomy.economy;
import com.google.common.base.Strings;
2017-07-03 06:17:18 +02:00
import org.appledash.sanelib.messages.MessageUtils;
2017-07-11 00:11:46 +02:00
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
2016-06-14 05:06:58 +02:00
2019-11-04 10:43:33 +01:00
import java.math.BigDecimal;
2016-06-14 05:06:58 +02:00
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
2016-06-14 05:06:58 +02:00
/**
* Created by AppleDash on 6/13/2016.
* Blackjack is still best pony.
*
* Represents an in-game currency.
*/
public class Currency {
2016-06-14 10:59:16 +02:00
private final String nameSingular;
private final String namePlural;
private final DecimalFormat format;
2017-06-14 16:39:43 +02:00
private final String balanceFormat;
2016-06-14 05:06:58 +02:00
public Currency(String nameSingular, String namePlural, DecimalFormat format) {
2017-06-14 16:39:43 +02:00
this(nameSingular, namePlural, format, "{1} {2}");
2017-06-08 00:38:48 +02:00
}
2017-06-14 16:39:43 +02:00
public Currency(String nameSingular, String namePlural, DecimalFormat format, String balanceFormat) {
2017-06-08 00:38:48 +02:00
this.nameSingular = nameSingular;
this.namePlural = namePlural;
this.format = format;
2017-06-14 16:39:43 +02:00
this.balanceFormat = balanceFormat;
2019-11-04 10:43:33 +01:00
this.format.setParseBigDecimal(true);
2016-06-14 05:06:58 +02:00
}
public static Currency fromConfig(ConfigurationSection config) {
DecimalFormat format = new DecimalFormat(config.getString("format", "0.00"));
if (config.getInt("grouping", 0) > 0) {
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
if (symbols.getDecimalSeparator() == ',') { // French
symbols.setGroupingSeparator(' ');
} else {
symbols.setGroupingSeparator(',');
}
String groupingSeparator = config.getString("grouping-separator", null);
if (!Strings.isNullOrEmpty(groupingSeparator)) {
symbols.setGroupingSeparator(groupingSeparator.charAt(0));
}
2018-10-05 11:31:37 +02:00
String decimalSeparator = config.getString("decimal-separator", ".");
if (!Strings.isNullOrEmpty(decimalSeparator)) {
symbols.setDecimalSeparator(decimalSeparator.charAt(0));
}
format.setDecimalFormatSymbols(symbols);
format.setGroupingUsed(true);
format.setGroupingSize(3);
}
2016-06-14 05:06:58 +02:00
return new Currency(
2019-11-04 18:08:24 +01:00
config.getString("name.singular", "dollar"),
config.getString("name.plural", "dollars"),
format,
config.getString("balance-format", "{1} {2}")
);
2016-06-14 05:06:58 +02:00
}
/**
* Format a money amount with this currency's format.
* @param amount Money amount.
* @return Formatted amount string.
*/
2019-11-04 10:43:33 +01:00
public String formatAmount(BigDecimal amount) {
2017-07-11 00:11:46 +02:00
String formatted;
2019-11-04 10:43:33 +01:00
if (amount.equals(BigDecimal.ONE)) {
2017-07-11 00:11:46 +02:00
formatted = MessageUtils.indexedFormat(balanceFormat, format.format(amount), nameSingular);
} else {
formatted = MessageUtils.indexedFormat(balanceFormat, format.format(amount), namePlural);
2016-06-14 05:06:58 +02:00
}
2017-06-14 16:39:43 +02:00
2017-07-11 00:11:46 +02:00
return ChatColor.translateAlternateColorCodes('&', formatted);
2016-06-14 05:06:58 +02:00
}
/**
* Get this currency's singular name.
* Example: "Dollar"
* @return Singular name.
*/
public String getSingularName() {
return nameSingular;
}
/**
* Get this currency's plural name.
* Example: "Dollars"
* @return Plural name.
*/
public String getPluralName() {
return namePlural;
}
/**
* Get this currency's number format.
* @return DecimalFormat instance
*/
public DecimalFormat getFormat() {
return format;
}
2016-06-14 05:06:58 +02:00
}