Skip to content

Commit

Permalink
Formats balances of 1 million or more using units, e.g., 1M, 2T, etc.
Browse files Browse the repository at this point in the history
  • Loading branch information
tastybento committed Nov 14, 2020
1 parent eb0dc86 commit cc8ecf9
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package world.bentobox.bank.commands;

import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.Collections;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.apache.commons.lang.math.NumberUtils;
import org.eclipse.jdt.annotation.Nullable;

import world.bentobox.bank.Bank;
import world.bentobox.bentobox.api.commands.CompositeCommand;
Expand All @@ -20,10 +24,23 @@
*/
public abstract class AbstractBankCommand extends CompositeCommand {

private static final BigInteger THOUSAND = BigInteger.valueOf(1000);
private static final TreeMap<BigInteger, String> LEVELS;
static {
LEVELS = new TreeMap<>();

LEVELS.put(THOUSAND, "k");
LEVELS.put(THOUSAND.pow(2), "M");
LEVELS.put(THOUSAND.pow(3), "G");
LEVELS.put(THOUSAND.pow(4), "T");
}

protected AbstractBankCommand(CompositeCommand parent, String string) {
super(parent, string);
this.addon = ((Bank)getAddon());
}

protected Bank addon;
protected Island island;
protected double value;
protected User target;
Expand Down Expand Up @@ -127,4 +144,23 @@ protected boolean parseValue(User user, String arg) {
}
return true;
}

/**
* Get the string representation of money. May be converted to shorthand notation, e.g., 104556 = 10.5k
* @param lvl - value to represent
* @return string of the value.
*/
public String format(@Nullable double value) {
String level = addon.getVault().format(value);
// If balance is greater than 1 million use shorthand version
if(value > 999999) {
BigInteger levelValue = BigInteger.valueOf((long)value);

Map.Entry<BigInteger, String> stage = LEVELS.floorEntry(levelValue);
if (stage != null) {
level = new DecimalFormat("#.#").format(levelValue.divide(stage.getKey().divide(THOUSAND)).doubleValue()/1000.0) + stage.getValue();
}
}
return level;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.util.List;

import world.bentobox.bank.Bank;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
Expand Down Expand Up @@ -31,11 +30,9 @@ public boolean canExecute(User user, String label, List<String> args) {

@Override
public boolean execute(User user, String label, List<String> args) {
user.sendMessage("bank.balance.island-balance", TextVariables.NUMBER, ((Bank)getAddon())
.getVault()
.format(((Bank)getAddon())
.getBankManager()
.getBalance(island)));
user.sendMessage("bank.balance.island-balance", TextVariables.NUMBER, format(addon
.getBankManager()
.getBalance(island)));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.hooks.VaultHook;

/**
* @author tastybento
Expand All @@ -35,15 +34,14 @@ public boolean canExecute(User user, String label, List<String> args) {
@Override
public boolean execute(User user, String label, List<String> args) {
// Success
((Bank)getAddon())
addon
.getBankManager()
.deposit(user, island, value, TxType.GIVE)
.thenAccept(result -> {
if (result == BankResponse.SUCCESS) {
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.admin.give.success",
TextVariables.NAME, this.target.getName(),
TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
TextVariables.NUMBER, format(((Bank)getAddon()).getBankManager().getBalance(island)));
} else {
user.sendMessage("bank.errors.bank-error");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@

import java.util.List;

import world.bentobox.bank.Bank;
import world.bentobox.bank.BankResponse;
import world.bentobox.bank.data.TxType;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.hooks.VaultHook;

/**
* @author tastybento
Expand All @@ -35,13 +33,12 @@ public boolean canExecute(User user, String label, List<String> args) {
@Override
public boolean execute(User user, String label, List<String> args) {
// Success
((Bank)getAddon())
addon
.getBankManager()
.set(user, island.getUniqueId(), value, value, TxType.SET)
.thenAccept(result -> {
if (result == BankResponse.SUCCESS) {
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.admin.set.success", TextVariables.NAME, target.getName(), TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
user.sendMessage("bank.admin.set.success", TextVariables.NAME, target.getName(), TextVariables.NUMBER, format(addon.getBankManager().getBalance(island)));
} else {
user.sendMessage("bank.errors.bank-error");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import java.util.List;

import world.bentobox.bank.Bank;
import world.bentobox.bank.data.TxType;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.hooks.VaultHook;

/**
* @author tastybento
Expand All @@ -34,7 +32,7 @@ public boolean canExecute(User user, String label, List<String> args) {
@Override
public boolean execute(User user, String label, List<String> args) {
// Success
((Bank)getAddon())
addon
.getBankManager()
.withdraw(user, island, value, TxType.TAKE)
.thenAccept(result -> {
Expand All @@ -43,10 +41,9 @@ public boolean execute(User user, String label, List<String> args) {
user.sendMessage("bank.errors.too-low");
break;
case SUCCESS:
VaultHook vault = ((Bank)this.getAddon()).getVault();
user.sendMessage("bank.admin.give.success",
TextVariables.NAME, this.target.getName(),
TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
TextVariables.NUMBER, format(addon.getBankManager().getBalance(island)));
break;
default:
user.sendMessage("bank.errors.bank-error");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import java.util.List;

import world.bentobox.bank.Bank;
import world.bentobox.bank.commands.AbstractBankCommand;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
Expand Down Expand Up @@ -33,11 +32,9 @@ public boolean canExecute(User user, String label, List<String> args) {

@Override
public boolean execute(User user, String label, List<String> args) {
user.sendMessage("bank.balance.island-balance", TextVariables.NUMBER, ((Bank)getAddon())
.getVault()
.format(((Bank)getAddon())
.getBankManager()
.getBalance(island)));
user.sendMessage("bank.balance.island-balance", TextVariables.NUMBER, format(addon
.getBankManager()
.getBalance(island)));
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public boolean execute(User user, String label, List<String> args) {
// Success
EconomyResponse response = vault.withdraw(user, value, getWorld());
if (response.type == ResponseType.SUCCESS) {
((Bank)getAddon()).getBankManager().deposit(user, value, getWorld()).thenAccept(result -> {
addon.getBankManager().deposit(user, value, getWorld()).thenAccept(result -> {
switch (result) {
case FAILURE_LOAD_ERROR:
user.sendMessage("bank.errors.bank-error");
Expand All @@ -58,7 +58,7 @@ public boolean execute(User user, String label, List<String> args) {
user.sendMessage("general.errors.no-island");
break;
case SUCCESS:
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
user.sendMessage("bank.deposit.success", TextVariables.NUMBER, format(addon.getBankManager().getBalance(island)));
break;
default:
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@

import java.util.List;

import world.bentobox.bank.Bank;
import world.bentobox.bank.commands.AbstractBankCommand;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.hooks.VaultHook;

/**
* @author tastybento
Expand All @@ -34,7 +32,7 @@ public boolean canExecute(User user, String label, List<String> args) {
return false;
}
// Check if the player has the balance
double balance = ((Bank)getAddon()).getBankManager().getBalance(user, getWorld());
double balance = addon.getBankManager().getBalance(user, getWorld());
if (balance < value) {
user.sendMessage("bank.errors.low-balance");
return false;
Expand All @@ -44,9 +42,9 @@ public boolean canExecute(User user, String label, List<String> args) {

@Override
public boolean execute(User user, String label, List<String> args) {
VaultHook vault = ((Bank)this.getAddon()).getVault();

// Success
((Bank)getAddon()).getBankManager().withdraw(user, value, getWorld()).thenAccept(result -> {
addon.getBankManager().withdraw(user, value, getWorld()).thenAccept(result -> {
switch (result) {
case FAILURE_LOAD_ERROR:
user.sendMessage("bank.errors.bank-error");
Expand All @@ -58,8 +56,8 @@ public boolean execute(User user, String label, List<String> args) {
user.sendMessage("general.errors.no-island");
break;
default:
vault.deposit(user, value, getWorld());
user.sendMessage("bank.withdraw.success", TextVariables.NUMBER, vault.format(((Bank)getAddon()).getBankManager().getBalance(island)));
addon.getVault().deposit(user, value, getWorld());
user.sendMessage("bank.withdraw.success", TextVariables.NUMBER, format(addon.getBankManager().getBalance(island)));
break;

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,34 @@ public void testExecuteUserStringListOfString() {
verify(user).sendMessage(eq("bank.balance.island-balance"), eq(TextVariables.NUMBER), eq("0.0"));
}

/**
* Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
*/
@Test
public void testExecuteUserStringListOfStringLargeBalance() {
when(bankManager.getBalance(any())).thenReturn(Double.MAX_VALUE);
assertTrue(bc.execute(user, "balance", Collections.emptyList()));
verify(user).sendMessage(eq("bank.balance.island-balance"), eq(TextVariables.NUMBER), eq("9223372T"));
}

/**
* Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
*/
@Test
public void testExecuteUserStringListOfStringLargeBalance999999() {
when(bankManager.getBalance(any())).thenReturn(999999D);
assertTrue(bc.execute(user, "balance", Collections.emptyList()));
verify(user).sendMessage(eq("bank.balance.island-balance"), eq(TextVariables.NUMBER), eq("999999.0"));
}

/**
* Test method for {@link world.bentobox.bank.commands.user.BalanceCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
*/
@Test
public void testExecuteUserStringListOfStringLargeBalance1M() {
when(bankManager.getBalance(any())).thenReturn(1000000D);
assertTrue(bc.execute(user, "balance", Collections.emptyList()));
verify(user).sendMessage(eq("bank.balance.island-balance"), eq(TextVariables.NUMBER), eq("1M"));
}

}

0 comments on commit cc8ecf9

Please sign in to comment.