mirror of
https://github.com/TotalFreedomMC/TF-EssentialsX.git
synced 2024-09-28 04:45:00 +00:00
Fix various trade sign issues (#4056)
Fixes various bugs with line length validation and fixes issues with overfilled stacks.
This commit is contained in:
parent
195148a2a2
commit
5171215817
|
@ -18,6 +18,8 @@ import static com.earth2me.essentials.I18n.tl;
|
|||
|
||||
//TODO: TL exceptions
|
||||
public class SignTrade extends EssentialsSign {
|
||||
private static int MAX_STOCK_LINE_LENGTH = 15;
|
||||
|
||||
public SignTrade() {
|
||||
super("Trade");
|
||||
}
|
||||
|
@ -82,9 +84,8 @@ public class SignTrade extends EssentialsSign {
|
|||
private Trade rechargeSign(final ISign sign, final IEssentials ess, final User player) throws SignException, ChargeException {
|
||||
final Trade trade = getTrade(sign, 2, AmountType.COST, false, true, ess);
|
||||
if (trade.getItemStack() != null && player.getBase().getItemInHand() != null && trade.getItemStack().getType() == player.getBase().getItemInHand().getType() && trade.getItemStack().getDurability() == player.getBase().getItemInHand().getDurability() && trade.getItemStack().getEnchantments().equals(player.getBase().getItemInHand().getEnchantments())) {
|
||||
int amount = player.getBase().getItemInHand().getAmount();
|
||||
amount -= amount % trade.getItemStack().getAmount();
|
||||
if (amount > 0) {
|
||||
final int amount = trade.getItemStack().getAmount();
|
||||
if (player.getBase().getInventory().containsAtLeast(trade.getItemStack(), amount)) {
|
||||
final ItemStack stack = player.getBase().getItemInHand().clone();
|
||||
stack.setAmount(amount);
|
||||
final Trade store = new Trade(stack, ess);
|
||||
|
@ -141,6 +142,12 @@ public class SignTrade extends EssentialsSign {
|
|||
}
|
||||
}
|
||||
|
||||
private void validateSignLength(final String newLine) throws SignException {
|
||||
if (newLine.length() > MAX_STOCK_LINE_LENGTH) {
|
||||
throw new SignException("This sign is full!");
|
||||
}
|
||||
}
|
||||
|
||||
protected final void validateTrade(final ISign sign, final int index, final boolean amountNeeded, final IEssentials ess) throws SignException {
|
||||
final String line = sign.getLine(index).trim();
|
||||
if (line.isEmpty()) {
|
||||
|
@ -151,10 +158,9 @@ public class SignTrade extends EssentialsSign {
|
|||
if (split.length == 1 && !amountNeeded) {
|
||||
final BigDecimal money = getMoney(split[0], ess);
|
||||
if (money != null) {
|
||||
if (NumberUtil.shortCurrency(money, ess).length() * 2 > 15) {
|
||||
throw new SignException("Line can be too long!");
|
||||
}
|
||||
sign.setLine(index, NumberUtil.shortCurrency(money, ess) + ":0");
|
||||
final String newLine = NumberUtil.shortCurrency(money, ess) + ":0";
|
||||
validateSignLength(newLine);
|
||||
sign.setLine(index, newLine);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -167,7 +173,9 @@ public class SignTrade extends EssentialsSign {
|
|||
if (amount.compareTo(MINTRANSACTION) < 0 || money.compareTo(MINTRANSACTION) < 0) {
|
||||
throw new SignException(tl("moreThanZero"));
|
||||
}
|
||||
sign.setLine(index, NumberUtil.shortCurrency(money, ess) + ":" + NumberUtil.shortCurrency(amount, ess).substring(1));
|
||||
final String newLine = NumberUtil.shortCurrency(money, ess) + ":" + NumberUtil.shortCurrency(amount, ess).substring(1);
|
||||
validateSignLength(newLine);
|
||||
sign.setLine(index, newLine);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -182,9 +190,7 @@ public class SignTrade extends EssentialsSign {
|
|||
throw new SignException(tl("moreThanZero"));
|
||||
}
|
||||
final String newline = amount + " " + split[1] + ":0";
|
||||
if ((newline + amount).length() > 15) {
|
||||
throw new SignException("Line can be too long!");
|
||||
}
|
||||
validateSignLength(newline);
|
||||
sign.setLine(index, newline);
|
||||
return;
|
||||
}
|
||||
|
@ -321,9 +327,7 @@ public class SignTrade extends EssentialsSign {
|
|||
final BigDecimal amount = getBigDecimal(split[1], ess);
|
||||
if (money != null && amount != null) {
|
||||
final String newline = NumberUtil.shortCurrency(money, ess) + ":" + NumberUtil.shortCurrency(value, ess).substring(1);
|
||||
if (newline.length() > 15) {
|
||||
throw new SignException("This sign is full: Line too long!");
|
||||
}
|
||||
validateSignLength(newline);
|
||||
sign.setLine(index, newline);
|
||||
return;
|
||||
}
|
||||
|
@ -333,18 +337,14 @@ public class SignTrade extends EssentialsSign {
|
|||
if (split[1].equalsIgnoreCase("exp") || split[1].equalsIgnoreCase("xp")) {
|
||||
final int stackamount = getIntegerPositive(split[0]);
|
||||
final String newline = stackamount + " " + split[1] + ":" + value.intValueExact();
|
||||
if (newline.length() > 15) {
|
||||
throw new SignException("This sign is full: Line too long!");
|
||||
}
|
||||
validateSignLength(newline);
|
||||
sign.setLine(index, newline);
|
||||
return;
|
||||
} else {
|
||||
final int stackamount = getIntegerPositive(split[0]);
|
||||
getItemStack(split[1], stackamount, ess);
|
||||
final String newline = stackamount + " " + split[1] + ":" + value.intValueExact();
|
||||
if (newline.length() > 15) {
|
||||
throw new SignException("This sign is full: Line too long!");
|
||||
}
|
||||
validateSignLength(newline);
|
||||
sign.setLine(index, newline);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue