Trigger transaction message from CurrencyTransferEvent and consider tax
Triggers TransactionMessageSender from CurrencyTransferEvent, wrapping TransactionEvent inside of it. Add logic to showamount after taxes on the message.
This commit is contained in:
parent
34df7e368a
commit
9acdb41dce
|
@ -1,5 +1,6 @@
|
|||
package com.Acrobot.ChestShop.Events.Economy;
|
||||
|
||||
import com.Acrobot.ChestShop.Events.TransactionEvent;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
|
@ -25,26 +26,32 @@ public class CurrencyTransferEvent extends EconomicEvent {
|
|||
|
||||
private Direction direction;
|
||||
|
||||
private final TransactionEvent transactionEvent;
|
||||
|
||||
public CurrencyTransferEvent(BigDecimal amount, Player initiator, UUID partner, Direction direction) {
|
||||
this(amount, amount, initiator, partner, direction);
|
||||
}
|
||||
|
||||
public CurrencyTransferEvent(BigDecimal amountSent, BigDecimal amountReceived, Player initiator, UUID partner, Direction direction) {
|
||||
this(amountSent, amountReceived, initiator, partner, direction, null);
|
||||
}
|
||||
|
||||
|
||||
public CurrencyTransferEvent(BigDecimal amount, Player initiator, UUID partner, Direction direction, TransactionEvent transactionEvent) {
|
||||
this(amount, amount, initiator, partner, direction, transactionEvent);
|
||||
}
|
||||
|
||||
public CurrencyTransferEvent(BigDecimal amountSent, BigDecimal amountReceived, Player initiator, UUID partner, Direction direction, TransactionEvent transactionEvent) {
|
||||
this.amountSent = amountSent;
|
||||
this.amountReceived = amountReceived;
|
||||
this.initiator = initiator;
|
||||
|
||||
this.partner = partner;
|
||||
this.direction = direction;
|
||||
|
||||
this.transactionEvent = transactionEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {{@link #CurrencyTransferEvent(BigDecimal, Player, UUID, Direction)}
|
||||
*/
|
||||
@Deprecated
|
||||
public CurrencyTransferEvent(double amount, Player initiator, UUID partner, Direction direction) {
|
||||
this(BigDecimal.valueOf(amount), initiator, partner, direction);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Amount of currency sent
|
||||
|
@ -150,6 +157,15 @@ public class CurrencyTransferEvent extends EconomicEvent {
|
|||
return direction;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the {@link TransactionEvent} associated with this currency transfer event.
|
||||
*
|
||||
* @return the transaction event.
|
||||
*/
|
||||
public TransactionEvent getTransactionEvent() {
|
||||
return transactionEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the player who initiated this transaction
|
||||
*
|
||||
|
|
|
@ -80,7 +80,8 @@ public class ServerAccountCorrector implements Listener {
|
|||
event.getAmountReceived(),
|
||||
event.getInitiator(),
|
||||
partner,
|
||||
event.getDirection()
|
||||
event.getDirection(),
|
||||
event.getTransactionEvent()
|
||||
);
|
||||
ChestShop.callEvent(currencyTransferEvent);
|
||||
event.setHandled(currencyTransferEvent.wasHandled());
|
||||
|
|
|
@ -19,7 +19,8 @@ public class EconomicModule implements Listener {
|
|||
event.getExactPrice(),
|
||||
event.getClient(),
|
||||
event.getOwnerAccount().getUuid(),
|
||||
event.getTransactionType() == BUY ? CurrencyTransferEvent.Direction.PARTNER : CurrencyTransferEvent.Direction.INITIATOR
|
||||
event.getTransactionType() == BUY ? CurrencyTransferEvent.Direction.PARTNER : CurrencyTransferEvent.Direction.INITIATOR,
|
||||
event
|
||||
);
|
||||
ChestShop.callEvent(currencyTransferEvent);
|
||||
if (!currencyTransferEvent.wasHandled()) {
|
||||
|
|
|
@ -6,6 +6,7 @@ import com.Acrobot.ChestShop.Commands.Toggle;
|
|||
import com.Acrobot.ChestShop.Configuration.Messages;
|
||||
import com.Acrobot.ChestShop.Configuration.Properties;
|
||||
import com.Acrobot.ChestShop.Economy.Economy;
|
||||
import com.Acrobot.ChestShop.Events.Economy.CurrencyTransferEvent;
|
||||
import com.Acrobot.ChestShop.Events.TransactionEvent;
|
||||
import com.Acrobot.ChestShop.Utils.ItemUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
|
@ -15,6 +16,7 @@ import org.bukkit.event.EventHandler;
|
|||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -23,65 +25,87 @@ import java.util.Map;
|
|||
*/
|
||||
public class TransactionMessageSender implements Listener {
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public static void onTransaction(TransactionEvent event) {
|
||||
if (event.getTransactionType() == TransactionEvent.TransactionType.BUY) {
|
||||
public static void onCurrencyTransfer(CurrencyTransferEvent event) {
|
||||
if (event.getTransactionEvent() == null) {
|
||||
return;
|
||||
}
|
||||
if (event.getTransactionEvent().getTransactionType() == TransactionEvent.TransactionType.BUY) {
|
||||
sendBuyMessage(event);
|
||||
} else {
|
||||
sendSellMessage(event);
|
||||
}
|
||||
}
|
||||
|
||||
protected static void sendBuyMessage(TransactionEvent event) {
|
||||
Player player = event.getClient();
|
||||
protected static void sendBuyMessage(CurrencyTransferEvent event) {
|
||||
TransactionEvent transactionEvent = event.getTransactionEvent();
|
||||
Player player = transactionEvent.getClient();
|
||||
|
||||
if (Properties.SHOW_TRANSACTION_INFORMATION_CLIENT) {
|
||||
sendMessage(player, event.getClient().getName(), Messages.YOU_BOUGHT_FROM_SHOP, event, "owner", event.getOwnerAccount().getName());
|
||||
sendMessage(player, transactionEvent.getClient().getName(), Messages.YOU_BOUGHT_FROM_SHOP, event, MessageTarget.BUYER, "owner", transactionEvent.getOwnerAccount().getName());
|
||||
}
|
||||
|
||||
if (Properties.SHOW_TRANSACTION_INFORMATION_OWNER && !Toggle.isIgnoring(event.getOwnerAccount().getUuid())) {
|
||||
Player owner = Bukkit.getPlayer(event.getOwnerAccount().getUuid());
|
||||
sendMessage(owner, event.getOwnerAccount().getName(), Messages.SOMEBODY_BOUGHT_FROM_YOUR_SHOP, event, "buyer", player.getName());
|
||||
if (Properties.SHOW_TRANSACTION_INFORMATION_OWNER && !Toggle.isIgnoring(transactionEvent.getOwnerAccount().getUuid())) {
|
||||
Player owner = Bukkit.getPlayer(transactionEvent.getOwnerAccount().getUuid());
|
||||
sendMessage(owner, transactionEvent.getOwnerAccount().getName(), Messages.SOMEBODY_BOUGHT_FROM_YOUR_SHOP, event, MessageTarget.SELLER, "buyer", player.getName());
|
||||
}
|
||||
}
|
||||
|
||||
protected static void sendSellMessage(TransactionEvent event) {
|
||||
Player player = event.getClient();
|
||||
|
||||
protected static void sendSellMessage(CurrencyTransferEvent event) {
|
||||
TransactionEvent transactionEvent = event.getTransactionEvent();
|
||||
Player player = transactionEvent.getClient();
|
||||
|
||||
if (Properties.SHOW_TRANSACTION_INFORMATION_CLIENT) {
|
||||
sendMessage(player, event.getClient().getName(), Messages.YOU_SOLD_TO_SHOP, event, "buyer", event.getOwnerAccount().getName());
|
||||
sendMessage(player, transactionEvent.getClient().getName(), Messages.YOU_SOLD_TO_SHOP, event, MessageTarget.SELLER, "buyer", transactionEvent.getOwnerAccount().getName());
|
||||
}
|
||||
|
||||
if (Properties.SHOW_TRANSACTION_INFORMATION_OWNER && !Toggle.isIgnoring(event.getOwnerAccount().getUuid())) {
|
||||
Player owner = Bukkit.getPlayer(event.getOwnerAccount().getUuid());
|
||||
sendMessage(owner, event.getOwnerAccount().getName(), Messages.SOMEBODY_SOLD_TO_YOUR_SHOP, event, "seller", player.getName());
|
||||
if (Properties.SHOW_TRANSACTION_INFORMATION_OWNER && !Toggle.isIgnoring(transactionEvent.getOwnerAccount().getUuid())) {
|
||||
Player owner = Bukkit.getPlayer(transactionEvent.getOwnerAccount().getUuid());
|
||||
sendMessage(owner, transactionEvent.getOwnerAccount().getName(), Messages.SOMEBODY_SOLD_TO_YOUR_SHOP, event, MessageTarget.BUYER, "seller", player.getName());
|
||||
}
|
||||
}
|
||||
|
||||
private static void sendMessage(Player player, String playerName, Messages.Message rawMessage, TransactionEvent event, String... replacements) {
|
||||
Location loc = event.getSign().getLocation();
|
||||
|
||||
private static void sendMessage(Player player, String playerName, Messages.Message rawMessage, CurrencyTransferEvent event, MessageTarget messageTarget, String... replacements) {
|
||||
TransactionEvent transactionEvent = event.getTransactionEvent();
|
||||
|
||||
BigDecimal actualAmount = getTransactionActualAmount(event, messageTarget);
|
||||
|
||||
Location loc = transactionEvent.getSign().getLocation();
|
||||
Map<String, String> replacementMap = new LinkedHashMap<>();
|
||||
replacementMap.put("price", Economy.formatBalance(event.getExactPrice()));
|
||||
replacementMap.put("price", Economy.formatBalance(actualAmount));
|
||||
replacementMap.put("world", loc.getWorld().getName());
|
||||
replacementMap.put("x", String.valueOf(loc.getBlockX()));
|
||||
replacementMap.put("y", String.valueOf(loc.getBlockY()));
|
||||
replacementMap.put("z", String.valueOf(loc.getBlockZ()));
|
||||
replacementMap.put("material", "%item");
|
||||
|
||||
for (int i = 0; i + 1 < replacements.length; i+=2) {
|
||||
|
||||
for (int i = 0; i + 1 < replacements.length; i += 2) {
|
||||
replacementMap.put(replacements[i], replacements[i + 1]);
|
||||
}
|
||||
|
||||
if (Properties.SHOWITEM_MESSAGE && MaterialUtil.Show.sendMessage(player, playerName, rawMessage, event.getStock(), replacementMap)) {
|
||||
if (Properties.SHOWITEM_MESSAGE && MaterialUtil.Show.sendMessage(player, playerName, rawMessage, transactionEvent.getStock(), replacementMap)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (player != null) {
|
||||
replacementMap.put("item", ItemUtil.getItemList(event.getStock()));
|
||||
replacementMap.put("item", ItemUtil.getItemList(transactionEvent.getStock()));
|
||||
rawMessage.sendWithPrefix(player, replacementMap);
|
||||
} else if (playerName != null) {
|
||||
replacementMap.put("item", ItemUtil.getItemList(event.getStock()));
|
||||
replacementMap.put("item", ItemUtil.getItemList(transactionEvent.getStock()));
|
||||
ChestShop.sendBungeeMessage(playerName, rawMessage, replacementMap);
|
||||
}
|
||||
}
|
||||
|
||||
private static BigDecimal getTransactionActualAmount(CurrencyTransferEvent event, MessageTarget messageTarget) {
|
||||
if (messageTarget == MessageTarget.SELLER) {
|
||||
return event.getAmountReceived();
|
||||
} else {
|
||||
return event.getAmountSent();
|
||||
}
|
||||
}
|
||||
|
||||
private enum MessageTarget {
|
||||
BUYER,
|
||||
SELLER
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue