diff --git a/.gitignore b/.gitignore index 10969cc..f0105f2 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ RemoteSystemsTempFiles/.project out/ target/ dependency-reduced-pom.xml +SaneEconomySignShop/ + diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/SaneEconomy.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/SaneEconomy.java index 7a6f385..d67e5e5 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/SaneEconomy.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/SaneEconomy.java @@ -142,6 +142,10 @@ public class SaneEconomy extends JavaPlugin implements ISaneEconomy { */ @Override public TransactionLogger getTransactionLogger() { + if (!shouldLogTransactions()) { + throw new IllegalStateException("TransactionLogger should not be retrieved if we aren't logging transactions!"); + } + return transactionLogger; } diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/command/type/EconomyAdminCommand.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/command/type/EconomyAdminCommand.java index 586b55b..feb6a6a 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/command/type/EconomyAdminCommand.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/command/type/EconomyAdminCommand.java @@ -81,7 +81,7 @@ public class EconomyAdminCommand extends SaneEconomyCommand { } if (subCommand.equalsIgnoreCase("give")) { - Transaction transaction = new Transaction(Economable.wrap(sender), Economable.wrap(targetPlayer), amount, TransactionReason.ADMIN); + Transaction transaction = new Transaction(Economable.wrap(sender), Economable.wrap(targetPlayer), amount, TransactionReason.ADMIN_GIVE); TransactionResult result = ecoMan.transact(transaction); double newAmount = result.getToBalance(); @@ -117,12 +117,12 @@ public class EconomyAdminCommand extends SaneEconomyCommand { // FIXME: This is a silly hack to get it to log. if (oldBal > 0.0) { saneEconomy.getTransactionLogger().logTransaction(new Transaction( - economable, Economable.CONSOLE, oldBal, TransactionReason.ADMIN + economable, Economable.CONSOLE, oldBal, TransactionReason.ADMIN_GIVE )); } saneEconomy.getTransactionLogger().logTransaction(new Transaction( - Economable.CONSOLE, economable, amount, TransactionReason.ADMIN + Economable.CONSOLE, economable, amount, TransactionReason.ADMIN_GIVE )); } diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java index 1035d7a..bc57f88 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java @@ -4,7 +4,6 @@ import org.appledash.saneeconomy.ISaneEconomy; import org.appledash.saneeconomy.economy.backend.EconomyStorageBackend; import org.appledash.saneeconomy.economy.economable.Economable; import org.appledash.saneeconomy.economy.transaction.Transaction; -import org.appledash.saneeconomy.economy.transaction.TransactionReason; import org.appledash.saneeconomy.economy.transaction.TransactionResult; import org.appledash.saneeconomy.utils.NumberUtils; import org.bukkit.Bukkit; @@ -165,17 +164,15 @@ public class EconomyManager { Economable receiver = transaction.getReceiver(); double amount = transaction.getAmount(); // This amount is validated upon creation of Transaction - if (!transaction.isFree()) { // If the transaction is occurring because of another plugin or because of an admin. - // If the sender doesn't have the balance AND we're not testing, throw an error. - // I don't really know why we check if they're testing, but it breaks if we don't. FIXME. - if (!hasBalance(sender, amount) && transaction.getReason() != TransactionReason.TEST && transaction.getReason() != TransactionReason.ADMIN_TAKE) { + if (transaction.isSenderAffected()) { // Sender should have balance taken from them + if (!hasBalance(sender, amount)) { return new TransactionResult(transaction, TransactionResult.Status.ERR_NOT_ENOUGH_FUNDS); } subtractBalance(sender, amount); } - if (transaction.getReason() != TransactionReason.ADMIN_TAKE) { + if (transaction.isReceiverAffected()) { // Receiver should have balance added to them addBalance(receiver, amount); } diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/Transaction.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/Transaction.java index dad35fe..1007ef4 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/Transaction.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/Transaction.java @@ -1,6 +1,7 @@ package org.appledash.saneeconomy.economy.transaction; import org.appledash.saneeconomy.economy.economable.Economable; +import org.appledash.saneeconomy.economy.transaction.TransactionReason.AffectedParties; /** * Created by appledash on 9/21/16. @@ -39,7 +40,11 @@ public class Transaction { return reason; } - public boolean isFree() { - return (sender == Economable.CONSOLE) || (sender == Economable.PLUGIN) || (reason == TransactionReason.ADMIN); + public boolean isSenderAffected() { + return (reason.getAffectedParties() == AffectedParties.SENDER) || (reason.getAffectedParties() == AffectedParties.BOTH); + } + + public boolean isReceiverAffected() { + return (reason.getAffectedParties() == AffectedParties.RECEIVER) || (reason.getAffectedParties() == AffectedParties.BOTH); } } diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/TransactionReason.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/TransactionReason.java index 79bf9ce..c4c778d 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/TransactionReason.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/transaction/TransactionReason.java @@ -8,22 +8,40 @@ public enum TransactionReason { /** * A player paying another player. */ - PLAYER_PAY, + PLAYER_PAY(AffectedParties.BOTH), /** * An admin giving a player money. */ - ADMIN, - ADMIN_TAKE, + ADMIN_GIVE(AffectedParties.RECEIVER), + ADMIN_TAKE(AffectedParties.SENDER), /** * Another plugin using the API. */ - PLUGIN, + PLUGIN_GIVE(AffectedParties.RECEIVER), + PLUGIN_TAKE(AffectedParties.SENDER), /** * Initial starting balance on join. */ - STARTING_BALANCE, + STARTING_BALANCE(AffectedParties.RECEIVER), /** * Used in unit tests. */ - TEST + TEST_GIVE(AffectedParties.RECEIVER), + TEST_TAKE(AffectedParties.SENDER); + + private final AffectedParties affectedParties; + + TransactionReason(AffectedParties affectedParties) { + this.affectedParties = affectedParties; + } + + public AffectedParties getAffectedParties() { + return affectedParties; + } + + public enum AffectedParties { + SENDER, + RECEIVER, + BOTH + } } diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/vault/EconomySaneEconomy.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/vault/EconomySaneEconomy.java index 897fc88..35b92fe 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/vault/EconomySaneEconomy.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/vault/EconomySaneEconomy.java @@ -149,7 +149,7 @@ public class EconomySaneEconomy implements Economy { } return transact(new Transaction( - economable, Economable.PLUGIN, v, TransactionReason.PLUGIN + economable, Economable.PLUGIN, v, TransactionReason.PLUGIN_TAKE )); } @@ -164,7 +164,7 @@ public class EconomySaneEconomy implements Economy { } return transact(new Transaction( - Economable.wrap(offlinePlayer), Economable.PLUGIN, v, TransactionReason.PLUGIN + Economable.wrap(offlinePlayer), Economable.PLUGIN, v, TransactionReason.PLUGIN_TAKE )); } @@ -192,7 +192,7 @@ public class EconomySaneEconomy implements Economy { } return transact(new Transaction( - Economable.PLUGIN, economable, v, TransactionReason.PLUGIN + Economable.PLUGIN, economable, v, TransactionReason.PLUGIN_GIVE )); } @@ -203,7 +203,7 @@ public class EconomySaneEconomy implements Economy { } return transact(new Transaction( - Economable.PLUGIN, Economable.wrap(offlinePlayer), v, TransactionReason.PLUGIN + Economable.PLUGIN, Economable.wrap(offlinePlayer), v, TransactionReason.PLUGIN_GIVE )); } diff --git a/SaneEconomyCore/src/test/java/org/appledash/saneeconomy/test/EconomyManagerTest.java b/SaneEconomyCore/src/test/java/org/appledash/saneeconomy/test/EconomyManagerTest.java index f24eef5..2c9ba28 100644 --- a/SaneEconomyCore/src/test/java/org/appledash/saneeconomy/test/EconomyManagerTest.java +++ b/SaneEconomyCore/src/test/java/org/appledash/saneeconomy/test/EconomyManagerTest.java @@ -37,8 +37,8 @@ public class EconomyManagerTest { // Accounts should not exist Assert.assertFalse(economyManager.accountExists(playerOne)); Assert.assertFalse(economyManager.accountExists(playerTwo)); - Assert.assertEquals(economyManager.getBalance(playerOne), 0.0D, 0.0); - Assert.assertEquals(economyManager.getBalance(playerTwo), 0.0D, 0.0); + Assert.assertEquals(0.0D, economyManager.getBalance(playerOne), 0.0); + Assert.assertEquals(0.0D, economyManager.getBalance(playerTwo), 0.0); economyManager.setBalance(playerOne, 100.0D); @@ -47,28 +47,28 @@ public class EconomyManagerTest { Assert.assertFalse(economyManager.accountExists(playerTwo)); // One should have balance, two should not - Assert.assertEquals(economyManager.getBalance(playerOne), 100.0, 0.0); - Assert.assertEquals(economyManager.getBalance(playerTwo), 0.0, 0.0); + Assert.assertEquals(100.0, economyManager.getBalance(playerOne), 0.0); + Assert.assertEquals(0.0, economyManager.getBalance(playerTwo), 0.0); // One should be able to transfer to two Assert.assertTrue(economyManager.transact(new Transaction(playerOne, playerTwo, 50.0, TransactionReason.PLAYER_PAY)).getStatus() == TransactionResult.Status.SUCCESS); // One should now have only 50 left, two should have 50 now - Assert.assertEquals(economyManager.getBalance(playerOne), 50.0, 0.0); - Assert.assertEquals(economyManager.getBalance(playerTwo), 50.0, 0.0); + Assert.assertEquals(50.0, economyManager.getBalance(playerOne), 0.0); + Assert.assertEquals(50.0, economyManager.getBalance(playerTwo), 0.0); // Ensure that balance addition and subtraction works... - Assert.assertEquals(economyManager.transact( - new Transaction(playerOne, Economable.CONSOLE, 25.0, TransactionReason.TEST) - ).getFromBalance(), 25.0, 0.0); + Assert.assertEquals(25.0, economyManager.transact( + new Transaction(playerOne, Economable.CONSOLE, 25.0, TransactionReason.TEST_TAKE) + ).getFromBalance(), 0.0); - Assert.assertEquals(economyManager.transact( - new Transaction(Economable.CONSOLE, playerOne, 25.0, TransactionReason.TEST) - ).getToBalance(), 50.0, 0.0); + Assert.assertEquals(50.0, economyManager.transact( + new Transaction(Economable.CONSOLE, playerOne, 25.0, TransactionReason.TEST_GIVE) + ).getToBalance(), 0.0); - Assert.assertEquals(economyManager.transact( - new Transaction(playerTwo, Economable.CONSOLE, Double.MAX_VALUE, TransactionReason.TEST) - ).getFromBalance(), 0.0, 0.0); + Assert.assertEquals(TransactionResult.Status.ERR_NOT_ENOUGH_FUNDS, economyManager.transact( + new Transaction(playerTwo, Economable.CONSOLE, Double.MAX_VALUE, TransactionReason.TEST_TAKE) + ).getStatus()); // Ensure that hasBalance works Assert.assertTrue(economyManager.hasBalance(playerOne, 50.0)); diff --git a/pom.xml b/pom.xml index ec025f9..c70e61c 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ SaneEconomyCore + SaneEconomySignShop