diff options
-rw-r--r-- | Essentials/src/com/earth2me/essentials/ItemDb.java | 64 |
1 files changed, 42 insertions, 22 deletions
diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 5086a3825..8ab7d8616 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -4,8 +4,10 @@ import static com.earth2me.essentials.I18n._; import com.earth2me.essentials.utils.NumberUtil; import com.earth2me.essentials.utils.StringUtil; import java.util.*; +import java.util.regex.Matcher; import java.util.regex.Pattern; import net.ess3.api.IEssentials; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; @@ -18,13 +20,13 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb private final transient Map<ItemData, String> primaryName = new HashMap<ItemData, String>(); private final transient Map<String, Short> durabilities = new HashMap<String, Short>(); private final transient ManagedFile file; - private final transient Pattern splitPattern = Pattern.compile("[:+',;.]"); + private final transient Pattern splitPattern = Pattern.compile("((.*)[:+',;.](\\d+))"); - public ItemDb(final IEssentials ess) - { - this.ess = ess; - file = new ManagedFile("items.csv", ess); - } + public ItemDb(final IEssentials ess) + { + this.ess = ess; + file = new ManagedFile("items.csv", ess); + } @Override public void reloadConfig() @@ -93,27 +95,31 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb int itemid = 0; String itemname = null; short metaData = 0; - String[] parts = splitPattern.split(id); - if (id.matches("^\\d+[:+',;.]\\d+$")) + Matcher parts = splitPattern.matcher(id); + if (parts.matches()) { - itemid = Integer.parseInt(parts[0]); - metaData = Short.parseShort(parts[1]); + itemname = parts.group(2); + metaData = Short.parseShort(parts.group(3)); } - else if (NumberUtil.isInt(id)) + else { - itemid = Integer.parseInt(id); + itemname = id; } - else if (id.matches("^[^:+',;.]+[:+',;.]\\d+$")) + + if (NumberUtil.isInt(itemname)) + { + itemid = Integer.parseInt(itemname); + } + else if (NumberUtil.isInt(id)) { - itemname = parts[0].toLowerCase(Locale.ENGLISH); - metaData = Short.parseShort(parts[1]); + itemid = Integer.parseInt(id); } else { - itemname = id.toLowerCase(Locale.ENGLISH); + itemname = itemname.toLowerCase(Locale.ENGLISH); } - if (itemname != null) + if (itemid < 1) { if (items.containsKey(itemname)) { @@ -125,15 +131,28 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb } else if (Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)) != null) { - itemid = Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)).getId(); - metaData = 0; + Material bMaterial = Material.getMaterial(itemname.toUpperCase(Locale.ENGLISH)); + itemid = bMaterial.getId(); } else { - throw new Exception(_("unknownItemName", id)); + try + { + Material bMaterial = Bukkit.getUnsafe().getMaterialFromInternalName(itemname.toLowerCase(Locale.ENGLISH)); + itemid = bMaterial.getId(); + } + catch (Throwable throwable) + { + throw new Exception(_("unknownItemName", itemname), throwable); + } } } + if (itemid < 1) + { + throw new Exception(_("unknownItemName", itemname)); + } + final Material mat = Material.getMaterial(itemid); if (mat == null) { @@ -193,7 +212,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb return is; } -@Override + @Override public String names(ItemStack item) { ItemData itemData = new ItemData(item.getTypeId(), item.getDurability()); @@ -215,7 +234,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb return StringUtil.joinList(", ", nameList); } -@Override + @Override public String name(ItemStack item) { ItemData itemData = new ItemData(item.getTypeId(), item.getDurability()); @@ -232,6 +251,7 @@ public class ItemDb implements IConf, net.ess3.api.IItemDb return name; } + static class ItemData { final private int itemNo; |