Allow players to recharge trade signs without breaking them.

Also don't give out items, if their inventory is full.
This commit is contained in:
snowleo 2011-10-09 22:52:11 +02:00
parent 75a0164ea0
commit 4c69412501

View File

@ -38,7 +38,8 @@ public class SignTrade extends EssentialsSign
final Trade stored = getTrade(sign, 1, true, true, ess); final Trade stored = getTrade(sign, 1, true, true, ess);
substractAmount(sign, 1, stored, ess); substractAmount(sign, 1, stored, ess);
stored.pay(player); stored.pay(player);
Trade.log("Sign", "Trade", "OwnerInteract", username, null, username, stored, sign.getBlock().getLocation(), ess); final Trade store = rechargeSign(sign, ess, player);
Trade.log("Sign", "Trade", "OwnerInteract", username, store, username, stored, sign.getBlock().getLocation(), ess);
} }
catch (SignException e) catch (SignException e)
{ {
@ -50,8 +51,11 @@ public class SignTrade extends EssentialsSign
final Trade charge = getTrade(sign, 1, false, false, ess); final Trade charge = getTrade(sign, 1, false, false, ess);
final Trade trade = getTrade(sign, 2, false, true, ess); final Trade trade = getTrade(sign, 2, false, true, ess);
charge.isAffordableFor(player); charge.isAffordableFor(player);
if (!trade.pay(player, false))
{
throw new ChargeException("Full inventory");
}
substractAmount(sign, 2, trade, ess); substractAmount(sign, 2, trade, ess);
trade.pay(player);
addAmount(sign, 1, charge, ess); addAmount(sign, 1, charge, ess);
charge.charge(player); charge.charge(player);
Trade.log("Sign", "Trade", "Interact", sign.getLine(3), charge, username, trade, sign.getBlock().getLocation(), ess); Trade.log("Sign", "Trade", "Interact", sign.getLine(3), charge, username, trade, sign.getBlock().getLocation(), ess);
@ -60,6 +64,25 @@ public class SignTrade extends EssentialsSign
return true; return true;
} }
private Trade rechargeSign(final ISign sign, final IEssentials ess, final User player) throws SignException, ChargeException
{
final Trade trade = getTrade(sign, 2, false, false, ess);
if (trade.getItemStack() != null && player.getItemInHand() != null &&
trade.getItemStack().getTypeId() == player.getItemInHand().getTypeId() &&
trade.getItemStack().getDurability() == player.getItemInHand().getDurability())
{
int amount = player.getItemInHand().getAmount();
amount -= amount % trade.getItemStack().getAmount();
if (amount > 0) {
final Trade store = new Trade(new ItemStack(player.getItemInHand().getTypeId(), amount, player.getItemInHand().getDurability()), ess);
addAmount(sign, 2, store, ess);
store.charge(player);
return store;
}
}
return null;
}
@Override @Override
protected boolean onSignBreak(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException protected boolean onSignBreak(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
{ {