diff options
Diffstat (limited to 'Essentials/src/com/earth2me/essentials/Trade.java')
-rw-r--r-- | Essentials/src/com/earth2me/essentials/Trade.java | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/Essentials/src/com/earth2me/essentials/Trade.java b/Essentials/src/com/earth2me/essentials/Trade.java index 45c3d49a3..8c082be3e 100644 --- a/Essentials/src/com/earth2me/essentials/Trade.java +++ b/Essentials/src/com/earth2me/essentials/Trade.java @@ -18,22 +18,22 @@ public class Trade private final transient Double money; private final transient ItemStack itemStack; private final transient IEssentials ess; - + public Trade(final String command, final IEssentials ess) { this(command, null, null, ess); } - + public Trade(final double money, final IEssentials ess) { this(null, money, null, ess); } - + public Trade(final ItemStack items, final IEssentials ess) { this(null, null, items, ess); } - + private Trade(final String command, final Double money, final ItemStack item, final IEssentials ess) { this.command = command; @@ -41,7 +41,7 @@ public class Trade this.itemStack = item; this.ess = ess; } - + public void isAffordableFor(final IUser user) throws ChargeException { final double mon = user.getMoney(); @@ -52,13 +52,13 @@ public class Trade { throw new ChargeException(Util.i18n("notEnoughMoney")); } - + if (getItemStack() != null && !InventoryWorkaround.containsItem(user.getInventory(), true, itemStack)) { throw new ChargeException(Util.format("missingItems", getItemStack().getAmount(), getItemStack().getType().toString().toLowerCase().replace("_", " "))); } - + if (command != null && !command.isEmpty() && !user.isAuthorized("essentials.nocommandcost.all") && !user.isAuthorized("essentials.nocommandcost." + command) @@ -69,24 +69,38 @@ public class Trade throw new ChargeException(Util.i18n("notEnoughMoney")); } } - + public void pay(final IUser user) { + pay(user, true); + } + + public boolean pay(final IUser user, final boolean dropItems) + { + boolean success = true; if (getMoney() != null && getMoney() > 0) { user.giveMoney(getMoney()); } if (getItemStack() != null) { - final Map<Integer, ItemStack> leftOver = InventoryWorkaround.addItem(user.getInventory(), true, getItemStack()); - for (ItemStack itemStack : leftOver.values()) + if (dropItems) + { + final Map<Integer, ItemStack> leftOver = InventoryWorkaround.addItem(user.getInventory(), true, getItemStack()); + for (ItemStack itemStack : leftOver.values()) + { + InventoryWorkaround.dropItem(user.getLocation(), itemStack); + } + } + else { - InventoryWorkaround.dropItem(user.getLocation(), itemStack); + success = InventoryWorkaround.addAllItems(user.getInventory(), true, getItemStack()); } user.updateInventory(); } + return success; } - + public void charge(final IUser user) throws ChargeException { if (getMoney() != null) @@ -120,18 +134,18 @@ public class Trade user.takeMoney(cost); } } - + public Double getMoney() { return money; } - + public ItemStack getItemStack() { return itemStack; } private static FileWriter fw = null; - + public static void log(String type, String subtype, String event, String sender, Trade charge, String receiver, Trade pay, Location loc, IEssentials ess) { if (!ess.getSettings().isEcoLogEnabled()) @@ -225,10 +239,11 @@ public class Trade Logger.getLogger("Minecraft").log(Level.SEVERE, null, ex); } } - + public static void closeLog() { - if (fw != null) { + if (fw != null) + { try { fw.close(); |