summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java149
-rw-r--r--Essentials/src/com/earth2me/essentials/signs/SignTrade.java156
2 files changed, 157 insertions, 148 deletions
diff --git a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
index 4fec56f04..a6f17c8bb 100644
--- a/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
+++ b/Essentials/src/com/earth2me/essentials/signs/EssentialsSign.java
@@ -130,152 +130,7 @@ public class EssentialsSign
}
}
- 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())
- {
- throw new SignException("Empty line");
- }
- final String[] split = line.split("[ :]+");
-
- if (split.length == 1 && !amountNeeded)
- {
- final Double money = getMoney(split[0]);
- if (money != null)
- {
- sign.setLine(index, Util.formatCurrency(money) + ":0");
- return;
- }
- }
-
- if (split.length == 2 && amountNeeded)
- {
- final Double money = getMoney(split[0]);
- final Double amount = getDouble(split[1]);
- if (money != null && amount != null)
- {
- sign.setLine(index, Util.formatCurrency(money) + ":" + Util.formatCurrency(amount).substring(1));
- return;
- }
- }
-
- if (split.length == 2 && !amountNeeded)
- {
- final int amount = getInteger(split[0]);
- final ItemStack item = getItemStack(split[1], amount);
- if (amount < 1 || item.getTypeId() == 0)
- {
- throw new SignException(Util.i18n("moreThanZero"));
- }
- sign.setLine(index, amount + " " + split[1] + ":0");
- return;
- }
-
- if (split.length == 3 && amountNeeded)
- {
- final int stackamount = getInteger(split[0]);
- final ItemStack item = getItemStack(split[1], stackamount);
- int amount = getInteger(split[2]);
- amount -= amount % stackamount;
- if (amount < 1 || stackamount < 1 || item.getTypeId() == 0)
- {
- throw new SignException(Util.i18n("moreThanZero"));
- }
- sign.setLine(index, stackamount + " " + split[1] + ":" + amount);
- return;
- }
- throw new SignException(Util.format("invalidSignLine", index));
- }
-
- protected final Trade getTrade(final ISign sign, final int index, final boolean fullAmount, final IEssentials ess) throws SignException
- {
- final String line = sign.getLine(index).trim();
- if (line.isEmpty())
- {
- throw new SignException("Empty line");
- }
- final String[] split = line.split("[ :]+");
-
- if (split.length == 2)
- {
- final Double money = getMoney(split[0]);
- final Double amount = getDouble(split[1]);
- if (money != null && amount != null)
- {
- return new Trade(fullAmount ? amount : money, ess);
- }
- }
-
- if (split.length == 3)
- {
- final int stackamount = getInteger(split[0]);
- final ItemStack item = getItemStack(split[1], stackamount);
- int amount = getInteger(split[2]);
- amount -= amount % stackamount;
- if (amount < 1 || stackamount < 1 || item.getTypeId() == 0)
- {
- throw new SignException(Util.i18n("moreThanZero"));
- }
- item.setAmount(fullAmount ? amount : stackamount);
- return new Trade(item, ess);
- }
- throw new SignException(Util.format("invalidSignLine", index));
- }
-
- protected final void substractAmount(final ISign sign, final int index, final Trade trade) throws SignException
- {
- final Double money = trade.getMoney();
- if (money != null) {
- changeAmount(sign, index, -money);
- }
- final ItemStack item = trade.getItemStack();
- if (item != null) {
- changeAmount(sign, index, -item.getAmount());
- }
- }
- protected final void addAmount(final ISign sign, final int index, final Trade trade) throws SignException
- {
- final Double money = trade.getMoney();
- if (money != null) {
- changeAmount(sign, index, money);
- }
- final ItemStack item = trade.getItemStack();
- if (item != null) {
- changeAmount(sign, index, item.getAmount());
- }
- }
- private void changeAmount(final ISign sign, final int index, final double value) throws SignException
- {
- final String line = sign.getLine(index).trim();
- if (line.isEmpty())
- {
- throw new SignException("Empty line");
- }
- final String[] split = line.split("[ :]+");
-
- if (split.length == 2)
- {
- final Double money = getMoney(split[0]);
- final Double amount = getDouble(split[1]);
- if (money != null && amount != null)
- {
- sign.setLine(index, Util.formatCurrency(money) + ":" + Util.formatCurrency(amount+value).substring(1));
- return;
- }
- }
-
- if (split.length == 3)
- {
- final int stackamount = getInteger(split[0]);
- final ItemStack item = getItemStack(split[1], stackamount);
- int amount = getInteger(split[2]);
- sign.setLine(index, stackamount + " " + split[1] + ":" + (amount+Math.round(value)));
- return;
- }
- throw new SignException(Util.format("invalidSignLine", index));
- }
protected final void validateTrade(final ISign sign, final int amountIndex, final int itemIndex,
final User player, final IEssentials ess) throws SignException
@@ -342,13 +197,13 @@ public class EssentialsSign
}
}
- private final Double getMoney(final String line) throws SignException
+ protected final Double getMoney(final String line) throws SignException
{
final boolean isMoney = line.matches("^[^0-9-\\.][\\.0-9]+");
return isMoney ? getDouble(line.substring(1)) : null;
}
- private final Double getDouble(final String line) throws SignException
+ protected final Double getDouble(final String line) throws SignException
{
try
{
diff --git a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java
index 2d5f1fcb2..dd82bd09d 100644
--- a/Essentials/src/com/earth2me/essentials/signs/SignTrade.java
+++ b/Essentials/src/com/earth2me/essentials/signs/SignTrade.java
@@ -4,6 +4,8 @@ import com.earth2me.essentials.ChargeException;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
+import org.bukkit.inventory.ItemStack;
public class SignTrade extends EssentialsSign
@@ -50,7 +52,7 @@ public class SignTrade extends EssentialsSign
@Override
protected boolean onSignBreak(final ISign sign, final User player, final String username, final IEssentials ess) throws SignException
{
- if (sign.getLine(3).substring(2).equalsIgnoreCase(username))
+ if (sign.getLine(3).length() > 3 && sign.getLine(3).substring(2).equalsIgnoreCase(username))
{
final Trade stored1 = getTrade(sign, 1, true, ess);
final Trade stored2 = getTrade(sign, 2, true, ess);
@@ -63,4 +65,156 @@ public class SignTrade extends EssentialsSign
return false;
}
}
+
+ 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())
+ {
+ throw new SignException("Empty line");
+ }
+ final String[] split = line.split("[ :]+");
+
+ if (split.length == 1 && !amountNeeded)
+ {
+ final Double money = getMoney(split[0]);
+ if (money != null)
+ {
+ sign.setLine(index, Util.formatCurrency(money) + ":0");
+ return;
+ }
+ }
+
+ if (split.length == 2 && amountNeeded)
+ {
+ final Double money = getMoney(split[0]);
+ final Double amount = getDouble(split[1]);
+ if (money != null && amount != null)
+ {
+ sign.setLine(index, Util.formatCurrency(money) + ":" + Util.formatCurrency(amount).substring(1));
+ return;
+ }
+ }
+
+ if (split.length == 2 && !amountNeeded)
+ {
+ final int amount = getInteger(split[0]);
+ final ItemStack item = getItemStack(split[1], amount);
+ if (amount < 1 || item.getTypeId() == 0)
+ {
+ throw new SignException(Util.i18n("moreThanZero"));
+ }
+ sign.setLine(index, amount + " " + split[1] + ":0");
+ return;
+ }
+
+ if (split.length == 3 && amountNeeded)
+ {
+ final int stackamount = getInteger(split[0]);
+ final ItemStack item = getItemStack(split[1], stackamount);
+ int amount = getInteger(split[2]);
+ amount -= amount % stackamount;
+ if (amount < 1 || stackamount < 1 || item.getTypeId() == 0)
+ {
+ throw new SignException(Util.i18n("moreThanZero"));
+ }
+ sign.setLine(index, stackamount + " " + split[1] + ":" + amount);
+ return;
+ }
+ throw new SignException(Util.format("invalidSignLine", index));
+ }
+
+ protected final Trade getTrade(final ISign sign, final int index, final boolean fullAmount, final IEssentials ess) throws SignException
+ {
+ final String line = sign.getLine(index).trim();
+ if (line.isEmpty())
+ {
+ throw new SignException("Empty line");
+ }
+ final String[] split = line.split("[ :]+");
+
+ if (split.length == 2)
+ {
+ final Double money = getMoney(split[0]);
+ final Double amount = getDouble(split[1]);
+ if (money != null && amount != null)
+ {
+ return new Trade(fullAmount ? amount : money, ess);
+ }
+ }
+
+ if (split.length == 3)
+ {
+ final int stackamount = getInteger(split[0]);
+ final ItemStack item = getItemStack(split[1], stackamount);
+ int amount = getInteger(split[2]);
+ amount -= amount % stackamount;
+ if (amount < 1 || stackamount < 1 || item.getTypeId() == 0)
+ {
+ throw new SignException(Util.i18n("moreThanZero"));
+ }
+ item.setAmount(fullAmount ? amount : stackamount);
+ return new Trade(item, ess);
+ }
+ throw new SignException(Util.format("invalidSignLine", index));
+ }
+
+ protected final void substractAmount(final ISign sign, final int index, final Trade trade) throws SignException
+ {
+ final Double money = trade.getMoney();
+ if (money != null)
+ {
+ changeAmount(sign, index, -money);
+ }
+ final ItemStack item = trade.getItemStack();
+ if (item != null)
+ {
+ changeAmount(sign, index, -item.getAmount());
+ }
+ }
+
+ protected final void addAmount(final ISign sign, final int index, final Trade trade) throws SignException
+ {
+ final Double money = trade.getMoney();
+ if (money != null)
+ {
+ changeAmount(sign, index, money);
+ }
+ final ItemStack item = trade.getItemStack();
+ if (item != null)
+ {
+ changeAmount(sign, index, item.getAmount());
+ }
+ }
+
+ private void changeAmount(final ISign sign, final int index, final double value) throws SignException
+ {
+ final String line = sign.getLine(index).trim();
+ if (line.isEmpty())
+ {
+ throw new SignException("Empty line");
+ }
+ final String[] split = line.split("[ :]+");
+
+ if (split.length == 2)
+ {
+ final Double money = getMoney(split[0]);
+ final Double amount = getDouble(split[1]);
+ if (money != null && amount != null)
+ {
+ sign.setLine(index, Util.formatCurrency(money) + ":" + Util.formatCurrency(amount + value).substring(1));
+ return;
+ }
+ }
+
+ if (split.length == 3)
+ {
+ final int stackamount = getInteger(split[0]);
+ final ItemStack item = getItemStack(split[1], stackamount);
+ int amount = getInteger(split[2]);
+ sign.setLine(index, stackamount + " " + split[1] + ":" + (amount + Math.round(value)));
+ return;
+ }
+ throw new SignException(Util.format("invalidSignLine", index));
+ }
}