Fixed item and price formatting

This commit is contained in:
Acrobot 2012-10-21 22:45:30 +02:00
parent 1bf4651efa
commit 361724f2be
3 changed files with 28 additions and 18 deletions

View File

@ -18,8 +18,8 @@ import java.util.regex.Pattern;
* @author Acrobot * @author Acrobot
*/ */
public class MaterialUtil { public class MaterialUtil {
private static final Pattern DURABILITY = Pattern.compile(":(\\d)*"); public static final Pattern DURABILITY = Pattern.compile(":(\\d)*");
private static final Pattern ENCHANTMENT = Pattern.compile("-([0-9a-zA-Z])*"); public static final Pattern ENCHANTMENT = Pattern.compile("-([0-9a-zA-Z])*");
/** /**
* Checks if the itemStack is empty or null * Checks if the itemStack is empty or null
@ -213,7 +213,7 @@ public class MaterialUtil {
data = data.substring(1); data = data.substring(1);
return NumberUtil.isInteger(data) ? Short.valueOf(data) : 0; return NumberUtil.isShort(data) ? Short.valueOf(data) : 0;
} }
/** /**

View File

@ -207,28 +207,37 @@ public class SignChange implements Listener {
return (line.length() > 15 ? null : line); return (line.length() > 15 ? null : line);
} }
private static String formatItemLine(String line, ItemStack itemStack) { private static String formatItemLine(String line, ItemStack item) {
String formatted, data = "";
String[] split = line.split(":|-", 2); String[] split = line.split(":|-", 2);
StringBuilder formatted = new StringBuilder(15);
String itemName = MaterialUtil.getName(itemStack, false);
short dataLength = (short) (line.length() - split[0].length()); if (MaterialUtil.ENCHANTMENT.matcher(line).matches()) {
data = '-' + MaterialUtil.ENCHANTMENT.matcher(line).group();
if (itemName.length() > (15 - dataLength)) {
itemName = itemName.substring(0, 15 - dataLength);
} }
if (MaterialUtil.getItem(itemName).getType() != itemStack.getType()) { String longItemName = MaterialUtil.getName(item, true);
itemName = String.valueOf(itemStack.getTypeId());
if (longItemName.length() < (15 - data.length()) && MaterialUtil.equals(MaterialUtil.getItem(longItemName + data), item)) {
return StringUtil.capitalizeFirstLetter(longItemName + data);
}
formatted = MaterialUtil.getName(item, false);
data = (split.length == 2 ? split[1] : "");
if (formatted.length() > (15 - data.length())) {
formatted = formatted.substring(0, (15 - data.length()));
}
if (MaterialUtil.getItem(formatted).getType() != item.getType()) {
formatted = String.valueOf(item.getTypeId());
} }
formatted.append(itemName);
if (split.length == 2) { if (split.length == 2) {
int dataValuePos = line.indexOf(split[1], split[0].length()); int dataValuePos = line.indexOf(split[1], split[0].length());
formatted.append(line.charAt(dataValuePos - 1)).append(split[1]); formatted += line.charAt(dataValuePos - 1) + split[1];
} }
return StringUtil.capitalizeFirstLetter(formatted.toString()); return StringUtil.capitalizeFirstLetter(formatted);
} }
private static boolean playerCanUseName(Player player, String name) { private static boolean playerCanUseName(Player player, String name) {

View File

@ -1,11 +1,12 @@
package com.Acrobot.ChestShop.Listeners.PreTransaction; package com.Acrobot.ChestShop.Listeners.PreTransaction;
import com.Acrobot.Breeze.Utils.PriceUtil;
import com.Acrobot.ChestShop.Events.PreTransactionEvent; import com.Acrobot.ChestShop.Events.PreTransactionEvent;
import com.Acrobot.ChestShop.Events.TransactionEvent; import com.Acrobot.ChestShop.Events.TransactionEvent;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import static com.Acrobot.Breeze.Utils.PriceUtil.NO_PRICE;
import static com.Acrobot.ChestShop.Events.PreTransactionEvent.TransactionOutcome.SHOP_DOES_NOT_BUY_THIS_ITEM; import static com.Acrobot.ChestShop.Events.PreTransactionEvent.TransactionOutcome.SHOP_DOES_NOT_BUY_THIS_ITEM;
import static com.Acrobot.ChestShop.Events.PreTransactionEvent.TransactionOutcome.SHOP_DOES_NOT_SELL_THIS_ITEM; import static com.Acrobot.ChestShop.Events.PreTransactionEvent.TransactionOutcome.SHOP_DOES_NOT_SELL_THIS_ITEM;
import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType.BUY; import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType.BUY;
@ -14,7 +15,7 @@ import static com.Acrobot.ChestShop.Events.TransactionEvent.TransactionType.BUY;
* @author Acrobot * @author Acrobot
*/ */
public class PriceValidator implements Listener { public class PriceValidator implements Listener {
@EventHandler @EventHandler(priority = EventPriority.LOWEST)
public static void onPriceCheck(PreTransactionEvent event) { public static void onPriceCheck(PreTransactionEvent event) {
if (event.isCancelled()) { if (event.isCancelled()) {
return; return;
@ -23,7 +24,7 @@ public class PriceValidator implements Listener {
TransactionEvent.TransactionType transactionType = event.getTransactionType(); TransactionEvent.TransactionType transactionType = event.getTransactionType();
double price = event.getPrice(); double price = event.getPrice();
if (price == PriceUtil.NO_PRICE) { if (price == NO_PRICE) {
if (transactionType == BUY) { if (transactionType == BUY) {
event.setCancelled(SHOP_DOES_NOT_BUY_THIS_ITEM); event.setCancelled(SHOP_DOES_NOT_BUY_THIS_ITEM);
} else { } else {