// Path: src/main/java/org/gestern/gringotts/api/Account.java
// public interface Account {
// 
//     /**
//      * Check if this account exists in the economy system.
//      *
//      * @return true if this account exists, false otherwise.
//      */
//     boolean exists();
// 
//     /**
//      * Create this account, if it does not exist, and creation is possible.
//      * If creation was successful, the Account object returned as result of this method must return true to exists().
//      *
//      * @return Representation of this account after it has been created.
//      */
//     Account create();
// 
//     /**
//      * Delete this account from the economy system, if it exists, and account deletion is possible.
//      * If deletion was successful, the Account object returned as result of this method must return false to exists().
//      *
//      * @return Representation of this account after it has been deleted.
//      */
//     Account delete();
// 
//     /**
//      * Return the balance of this account.
//      *
//      * @return the balance of this account.
//      */
//     double balance();
// 
//     /**
//      * Return the vault balance of this account.
//      *
//      * @return the vault balance of this account.
//      */
//     double vaultBalance();
// 
//     /**
//      * Return the inventory balance of this account.
//      *
//      * @return the inventory balance of this account.
//      */
//     double invBalance();
// 
//     /**
//      * Return whether this account has at least the specified amount.
//      *
//      * @param value amount to check
//      * @return whether this account has at least the specified amount.
//      */
//     boolean has(double value);
// 
//     /**
//      * Set the balance of this account.
//      * Note: it is preferred to use the add and remove methods for any transactions that actually have
//      * the goal of adding or removing a certain amount.
//      *
//      * @param newBalance the new balance of this account.
//      * @return result of setting the balance (success or failure type).
//      */
//     TransactionResult setBalance(double newBalance);
// 
//     /**
//      * Add an amount to this account's balance.
//      *
//      * @param value amount to be added.
//      * @return result of adding (success or failure type)
//      */
//     TransactionResult add(double value);
// 
//     /**
//      * Remove an amount from this account's balance.
//      *
//      * @param value amount to be removed
//      * @return result of removing (success or failure type)
//      */
//     TransactionResult remove(double value);
// 
//     /**
//      * Send an amount to another account. If the transfer fails, both sender and recipient will
//      * have unchanged account balance. To complete the transaction, use the to(Account) method on the result of this
//      * call.
//      * Before sending, it is possible to apply taxes with the withTaxes() method.
//      *
//      * @param value amount to be transferred
//      * @return A transaction object, which may be used to complete the transaction or add additional properties.
//      */
//     Transaction send(double value);
// 
//     /**
//      * Return the type of this account. Default account types are "player" and "bank".
//      * The economy plugin specifies any other types.
//      * The method call Eco.custom(type,id) result in this account for parameters this.type() and this.id().
//      *
//      * @return the type of this account.
//      */
//     String type();
// 
//     /**
//      * Return the id of this account. For players, this is the player uuid. For banks, this is the name of the bank.
//      * The method call Eco.custom(type,id) results in this account for parameters this.type() and this.id().
//      *
//      * @return the id of this account
//      */
//     String id();
// 
//     /**
//      * Send a message to the owner or owners of this account.
//      * Depending on the type of account, no player is the owner of an account. In this case, send the message to the
//      * console.
//      *
//      * @param message Message to send.
//      */
//     void message(String message);
// 
// }
// 
// Path: src/main/java/org/gestern/gringotts/api/TransactionResult.java
// public enum TransactionResult {
//     /**
//      * Transaction was successful.
//      */
//     SUCCESS,
//     /**
//      * Transaction failed due to insufficient funds of an account that money was to be taken from.
//      */
//     INSUFFICIENT_FUNDS,
//     /**
//      * Transaction failed due to insufficient space in an account that money was to be deposited to.
//      */
//     INSUFFICIENT_SPACE,
//     /**
//      * Transaction operation not supported.
//      */
//     UNSUPPORTED,
//     /**
//      * An error occurred while trying to process the transaction.
//      */
//     ERROR
// }


import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.gestern.gringotts.api.Account;
import org.gestern.gringotts.api.TransactionResult;
import static org.gestern.gringotts.Language.LANG;
import static org.gestern.gringotts.api.TransactionResult.SUCCESS;
            } else {
                target = eco.account(targetAccountHolderStr);
            }

            if (!target.exists()) {
                sendInvalidAccountMessage(sender, targetAccountHolderStr);
                return false;
            }

            String formattedBalance = eco.currency().format(target.balance());
            String senderMessage = LANG.moneyadmin_b
                    .replace(TAG_BALANCE, formattedBalance)
                    .replace(TAG_PLAYER, targetAccountHolderStr);

            sender.sendMessage(senderMessage);
            return true;
        }

        // moneyadmin add/remove
        if (args.length >= 3) {
            String amountStr = args[1];
            double value;

            try {
                value = Double.parseDouble(amountStr);
            } catch (NumberFormatException ignored) {
                return false;
            }

            String targetAccountHolderStr = args[2];
// Path: src/main/java/org/gestern/gringotts/api/Account.java
// public interface Account {
// 
//     /**
//      * Check if this account exists in the economy system.
//      *
//      * @return true if this account exists, false otherwise.
//      */
//     boolean exists();
// 
//     /**
//      * Create this account, if it does not exist, and creation is possible.
//      * If creation was successful, the Account object returned as result of this method must return true to exists().
//      *
//      * @return Representation of this account after it has been created.
//      */
//     Account create();
// 
//     /**
//      * Delete this account from the economy system, if it exists, and account deletion is possible.
//      * If deletion was successful, the Account object returned as result of this method must return false to exists().
//      *
//      * @return Representation of this account after it has been deleted.
//      */
//     Account delete();
// 
//     /**
//      * Return the balance of this account.
//      *
//      * @return the balance of this account.
//      */
//     double balance();
// 
//     /**
//      * Return the vault balance of this account.
//      *
//      * @return the vault balance of this account.
//      */
//     double vaultBalance();
// 
//     /**
//      * Return the inventory balance of this account.
//      *
//      * @return the inventory balance of this account.
//      */
//     double invBalance();
// 
//     /**
//      * Return whether this account has at least the specified amount.
//      *
//      * @param value amount to check
//      * @return whether this account has at least the specified amount.
//      */
//     boolean has(double value);
// 
//     /**
//      * Set the balance of this account.
//      * Note: it is preferred to use the add and remove methods for any transactions that actually have
//      * the goal of adding or removing a certain amount.
//      *
//      * @param newBalance the new balance of this account.
//      * @return result of setting the balance (success or failure type).
//      */
//     TransactionResult setBalance(double newBalance);
// 
//     /**
//      * Add an amount to this account's balance.
//      *
//      * @param value amount to be added.
//      * @return result of adding (success or failure type)
//      */
//     TransactionResult add(double value);
// 
//     /**
//      * Remove an amount from this account's balance.
//      *
//      * @param value amount to be removed
//      * @return result of removing (success or failure type)
//      */
//     TransactionResult remove(double value);
// 
//     /**
//      * Send an amount to another account. If the transfer fails, both sender and recipient will
//      * have unchanged account balance. To complete the transaction, use the to(Account) method on the result of this
//      * call.
//      * Before sending, it is possible to apply taxes with the withTaxes() method.
//      *
//      * @param value amount to be transferred
//      * @return A transaction object, which may be used to complete the transaction or add additional properties.
//      */
//     Transaction send(double value);
// 
//     /**
//      * Return the type of this account. Default account types are "player" and "bank".
//      * The economy plugin specifies any other types.
//      * The method call Eco.custom(type,id) result in this account for parameters this.type() and this.id().
//      *
//      * @return the type of this account.
//      */
//     String type();
// 
//     /**
//      * Return the id of this account. For players, this is the player uuid. For banks, this is the name of the bank.
//      * The method call Eco.custom(type,id) results in this account for parameters this.type() and this.id().
//      *
//      * @return the id of this account
//      */
//     String id();
// 
//     /**
//      * Send a message to the owner or owners of this account.
//      * Depending on the type of account, no player is the owner of an account. In this case, send the message to the
//      * console.
//      *
//      * @param message Message to send.
//      */
//     void message(String message);
// 
// }
// 
// Path: src/main/java/org/gestern/gringotts/api/TransactionResult.java
// public enum TransactionResult {
//     /**
//      * Transaction was successful.
//      */
//     SUCCESS,
//     /**
//      * Transaction failed due to insufficient funds of an account that money was to be taken from.
//      */
//     INSUFFICIENT_FUNDS,
//     /**
//      * Transaction failed due to insufficient space in an account that money was to be deposited to.
//      */
//     INSUFFICIENT_SPACE,
//     /**
//      * Transaction operation not supported.
//      */
//     UNSUPPORTED,
//     /**
//      * An error occurred while trying to process the transaction.
//      */
//     ERROR
// }


// Path: src/main/java/org/gestern/gringotts/commands/MoneyadminExecutor.java
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.gestern.gringotts.api.Account;
import org.gestern.gringotts.api.TransactionResult;
import static org.gestern.gringotts.Language.LANG;
import static org.gestern.gringotts.api.TransactionResult.SUCCESS;

            } else {
                target = eco.account(targetAccountHolderStr);
            }

            if (!target.exists()) {
                sendInvalidAccountMessage(sender, targetAccountHolderStr);
                return false;
            }

            String formattedBalance = eco.currency().format(target.balance());
            String senderMessage = LANG.moneyadmin_b
                    .replace(TAG_BALANCE, formattedBalance)
                    .replace(TAG_PLAYER, targetAccountHolderStr);

            sender.sendMessage(senderMessage);
            return true;
        }

        // moneyadmin add/remove
        if (args.length >= 3) {
            String amountStr = args[1];
            double value;

            try {
                value = Double.parseDouble(amountStr);
            } catch (NumberFormatException ignored) {
                return false;
            }

            String targetAccountHolderStr = args[2];
            Account target;