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