From 6f5d0f7616582e24b51e7b73e15b0138490e1d60 Mon Sep 17 00:00:00 2001 From: kukelekuuk00 Date: Sun, 13 Apr 2014 22:59:17 +0200 Subject: [PATCH] [feature][api] Added Sign and Player Transaction events For buy/sell/trade signs, and /sell and /pay --- .../src/com/earth2me/essentials/User.java | 7 ++ .../essentials/commands/Commandsell.java | 8 ++ .../earth2me/essentials/signs/SignBuy.java | 7 ++ .../earth2me/essentials/signs/SignSell.java | 7 ++ .../earth2me/essentials/signs/SignTrade.java | 8 ++ .../api/events/PlayerTransactionEvent.java | 44 ++++++++++ .../ess3/api/events/SignTransactionEvent.java | 44 ++++++++++ .../net/ess3/api/events/TransactionEvent.java | 83 +++++++++++++++++++ 8 files changed, 208 insertions(+) create mode 100644 Essentials/src/net/ess3/api/events/PlayerTransactionEvent.java create mode 100644 Essentials/src/net/ess3/api/events/SignTransactionEvent.java create mode 100644 Essentials/src/net/ess3/api/events/TransactionEvent.java diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java index ebae1681fb..d060920f8d 100644 --- a/Essentials/src/com/earth2me/essentials/User.java +++ b/Essentials/src/com/earth2me/essentials/User.java @@ -15,6 +15,7 @@ import net.ess3.api.IEssentials; import net.ess3.api.MaxMoneyException; import net.ess3.api.events.AfkStatusChangeEvent; +import net.ess3.api.events.PlayerTransactionEvent; import net.ess3.api.events.UserBalanceUpdateEvent; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -164,6 +165,12 @@ public void payUser(final User reciever, final BigDecimal value) throws ChargeEx } if (canAfford(value)) { + final PlayerTransactionEvent transactionEvent = new PlayerTransactionEvent(this, new Trade(value, ess), reciever, new Trade(value ,ess), this.getLocation(), ess ); + ess.getServer().getPluginManager().callEvent(transactionEvent); + if(transactionEvent.isCancelled()) + { + return; + } setMoney(getMoney().subtract(value)); reciever.setMoney(reciever.getMoney().add(value)); sendMessage(tl("moneySentTo", NumberUtil.displayCurrency(value, ess), reciever.getDisplayName())); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java index c5722df26c..14d156d9b9 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandsell.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandsell.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.Locale; import java.util.logging.Level; + +import net.ess3.api.events.PlayerTransactionEvent; import org.bukkit.Server; import org.bukkit.inventory.ItemStack; @@ -100,6 +102,12 @@ private BigDecimal sellItem(User user, ItemStack is, String[] args, boolean isBu // This should never happen. throw new IllegalStateException("Trying to remove more items than are available."); } + final PlayerTransactionEvent transactionEvent = new PlayerTransactionEvent(null, new Trade(ris, ess), user, new Trade(result ,ess), user.getLocation(), ess ); + ess.getServer().getPluginManager().callEvent(transactionEvent); + if(transactionEvent.isCancelled()) + { + throw new QuietAbortException(); + } user.getInventory().removeItem(ris); user.updateInventory(); Trade.log("Command", "Sell", "Item", user.getName(), new Trade(ris, ess), user.getName(), new Trade(result, ess), user.getLocation(), ess); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignBuy.java b/Essentials/src/com/earth2me/essentials/signs/SignBuy.java index 13c7799c7c..cdc6c58e5c 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignBuy.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignBuy.java @@ -4,6 +4,7 @@ import com.earth2me.essentials.Trade; import com.earth2me.essentials.User; import net.ess3.api.IEssentials; +import net.ess3.api.events.SignTransactionEvent; import net.ess3.api.MaxMoneyException; @@ -32,6 +33,12 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri { throw new ChargeException("Inventory full"); //TODO: TL } + final SignTransactionEvent signEvent = new SignTransactionEvent(player, charge, null, items, player.getLocation(), ess); + ess.getServer().getPluginManager().callEvent(signEvent); + if (signEvent.isCancelled()) + { + return false; + } charge.charge(player); Trade.log("Sign", "Buy", "Interact", username, charge, username, items, sign.getBlock().getLocation(), ess); return true; diff --git a/Essentials/src/com/earth2me/essentials/signs/SignSell.java b/Essentials/src/com/earth2me/essentials/signs/SignSell.java index 45fee196ea..1ac9f3c7d0 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignSell.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignSell.java @@ -5,6 +5,7 @@ import com.earth2me.essentials.Trade.OverflowType; import com.earth2me.essentials.User; import net.ess3.api.IEssentials; +import net.ess3.api.events.SignTransactionEvent; import net.ess3.api.MaxMoneyException; @@ -29,6 +30,12 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri final Trade charge = getTrade(sign, 1, 2, player, ess); final Trade money = getTrade(sign, 3, ess); charge.isAffordableFor(player); + final SignTransactionEvent signEvent = new SignTransactionEvent(null, charge, player, money, player.getLocation(), ess); + ess.getServer().getPluginManager().callEvent(signEvent); + if (signEvent.isCancelled()) + { + return false; + } money.pay(player, OverflowType.DROP); charge.charge(player); Trade.log("Sign", "Sell", "Interact", username, charge, username, money, sign.getBlock().getLocation(), ess); diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java index f51611aafd..0e6d129224 100644 --- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java +++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java @@ -8,6 +8,7 @@ import java.math.BigDecimal; import java.util.Map; import net.ess3.api.IEssentials; +import net.ess3.api.events.SignTransactionEvent; import net.ess3.api.MaxMoneyException; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -77,6 +78,13 @@ protected boolean onSignInteract(final ISign sign, final User player, final Stri final Trade charge = getTrade(sign, 1, AmountType.COST, false, ess); final Trade trade = getTrade(sign, 2, AmountType.COST, true, ess); charge.isAffordableFor(player); + final SignTransactionEvent signEvent = new SignTransactionEvent(player, charge, ess.getUser(sign.getLine(3)), trade, player.getLocation(), ess); + ess.getServer().getPluginManager().callEvent(signEvent); + if (signEvent.isCancelled()) + { + return false; + } + addAmount(sign, 1, charge, ess); subtractAmount(sign, 2, trade, ess); if (!trade.pay(player)) diff --git a/Essentials/src/net/ess3/api/events/PlayerTransactionEvent.java b/Essentials/src/net/ess3/api/events/PlayerTransactionEvent.java new file mode 100644 index 0000000000..ad97293885 --- /dev/null +++ b/Essentials/src/net/ess3/api/events/PlayerTransactionEvent.java @@ -0,0 +1,44 @@ +package net.ess3.api.events; + +import com.earth2me.essentials.Trade; +import net.ess3.api.IEssentials; +import net.ess3.api.IUser; +import org.bukkit.Location; +import org.bukkit.event.HandlerList; + + +public class PlayerTransactionEvent extends TransactionEvent +{ + + + private static final HandlerList handlers = new HandlerList(); + + + // if /pay, sender and receiver not null. + // if /sell, sender null, receiver not null + + /** + * + * @param sender Sender of the transaction, null if not from a user. (ie, /sell) + * @param charge The charge of the transaction. + * @param receiver Receiver of the transaction + * @param pay The received pay in the transaction. + * @param loc Location of the sender. If sender is null, location of receiver. + * @param ess IEssentials + */ + public PlayerTransactionEvent( IUser sender, Trade charge, IUser receiver, Trade pay, Location loc, IEssentials ess ) + { + super(sender, charge, receiver, pay, loc, ess); + } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } +} diff --git a/Essentials/src/net/ess3/api/events/SignTransactionEvent.java b/Essentials/src/net/ess3/api/events/SignTransactionEvent.java new file mode 100644 index 0000000000..991c4cc97d --- /dev/null +++ b/Essentials/src/net/ess3/api/events/SignTransactionEvent.java @@ -0,0 +1,44 @@ +package net.ess3.api.events; + +import com.earth2me.essentials.Trade; +import net.ess3.api.IEssentials; +import net.ess3.api.IUser; +import org.bukkit.Location; +import org.bukkit.event.HandlerList; + + +public class SignTransactionEvent extends TransactionEvent +{ + + + private static final HandlerList handlers = new HandlerList(); + + + // if /pay, sender and receiver not null. + // if /sell, sender null, receiver not null + + /** + * + * @param sender Sender of the transaction. Null if not a user. (sell signs) + * @param charge The charge of the transaction. + * @param receiver Receiver of the transaction. Null if not a user. (buy signs) + * @param pay The received pay in the transaction. + * @param loc Location of the sender. If sender is null, location of receiver. + * @param ess IEssentials + */ + public SignTransactionEvent( IUser sender, Trade charge, IUser receiver, Trade pay, Location loc, IEssentials ess ) + { + super(sender, charge, receiver, pay, loc, ess); + } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } +} diff --git a/Essentials/src/net/ess3/api/events/TransactionEvent.java b/Essentials/src/net/ess3/api/events/TransactionEvent.java new file mode 100644 index 0000000000..1600bdb53f --- /dev/null +++ b/Essentials/src/net/ess3/api/events/TransactionEvent.java @@ -0,0 +1,83 @@ +package net.ess3.api.events; + +import com.earth2me.essentials.Trade; +import net.ess3.api.IEssentials; +import net.ess3.api.IUser; +import org.bukkit.Location; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + + +public class TransactionEvent extends Event implements Cancellable +{ + + private boolean cancelled = false; + private static final HandlerList handlers = new HandlerList(); + private final IUser sender; + private final Trade charge; + private final IUser receiver; + private final Trade pay; + private final Location loc; + private final IEssentials ess; + + public TransactionEvent( IUser sender, Trade charge, IUser receiver, Trade pay, Location loc, IEssentials ess ) + { + super(); + this.sender = sender; + this.charge = charge; + this.receiver = receiver; + this.pay = pay; + this.loc = loc; + this.ess = ess; + } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public IUser getSender() + { + return sender; + } + + public Trade getCharge() + { + return charge; + } + + public IUser getReceiver() + { + return receiver; + } + + public Trade getPay() + { + return pay; + } + + public Location getLoc() + { + return loc; + } + + public IEssentials getEss() + { + return ess; + } + + @Override + public boolean isCancelled() + { + return cancelled; + } + + @Override + public void setCancelled( boolean cancelled ) + { + this.cancelled = cancelled; + } +} +