diff --git a/Essentials/src/com/earth2me/essentials/MetaItemStack.java b/Essentials/src/com/earth2me/essentials/MetaItemStack.java index f751adb95..2f6ca2ab2 100644 --- a/Essentials/src/com/earth2me/essentials/MetaItemStack.java +++ b/Essentials/src/com/earth2me/essentials/MetaItemStack.java @@ -3,7 +3,9 @@ package com.earth2me.essentials; import com.earth2me.essentials.textreader.BookInput; import com.earth2me.essentials.textreader.BookPager; import com.earth2me.essentials.textreader.IText; +import com.earth2me.essentials.utils.EnumUtil; import com.earth2me.essentials.utils.FormatUtil; +import com.earth2me.essentials.utils.MaterialUtil; import com.earth2me.essentials.utils.NumberUtil; import com.google.common.base.Joiner; import net.ess3.api.IEssentials; @@ -103,10 +105,6 @@ public class MetaItemStack { completePotion = true; } - private boolean isPotion(Material type) { - return type.name().endsWith("POTION"); - } - public boolean canSpawn(final IEssentials ess) { try { ess.getServer().getUnsafe().modifyItemStack(stack.clone(), "{}"); @@ -164,16 +162,8 @@ public class MetaItemStack { return; } - Material banner = null; - Material shield = null; - - try { - // 1.8 - banner = Material.valueOf("BANNER"); - - // 1.9 - shield = Material.valueOf("SHIELD"); - } catch(IllegalArgumentException ignored){} + Material WRITTEN_BOOK = EnumUtil.getMaterial("WRITTEN_BOOK"); + Material SHIELD = EnumUtil.getMaterial("SHIELD"); // 1.9 if (split.length > 1 && split[0].equalsIgnoreCase("name") && hasMetaPermission(sender, "name", false, true, ess)) { final String displayName = FormatUtil.replaceFormat(split[1].replace('_', ' ')); @@ -191,16 +181,16 @@ public class MetaItemStack { } else if (split[0].equalsIgnoreCase("unbreakable") && hasMetaPermission(sender, "unbreakable", false, true, ess)) { boolean value = split.length > 1 ? Boolean.valueOf(split[1]) : true; setUnbreakable(stack, value); - } else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && (stack.getType() == Material.SKELETON_SKULL || stack.getType() == Material.WITHER_SKELETON_SKULL) && hasMetaPermission(sender, "head", false, true, ess)) { - if (stack.getDurability() == 3) { + } else if (split.length > 1 && (split[0].equalsIgnoreCase("player") || split[0].equalsIgnoreCase("owner")) && hasMetaPermission(sender, "head", false, true, ess)) { + if (MaterialUtil.isPlayerHead(stack.getType(), stack.getDurability())) { final String owner = split[1]; final SkullMeta meta = (SkullMeta) stack.getItemMeta(); - meta.setOwner(owner); + meta.setOwningPlayer(ess.getServer().getOfflinePlayer(owner)); stack.setItemMeta(meta); } else { throw new Exception(tl("onlyPlayerSkulls")); } - } else if (split.length > 1 && split[0].equalsIgnoreCase("book") && stack.getType() == Material.WRITTEN_BOOK && (hasMetaPermission(sender, "book", true, true, ess) || hasMetaPermission(sender, "chapter-" + split[1].toLowerCase(Locale.ENGLISH), true, true, ess))) { + } else if (split.length > 1 && split[0].equalsIgnoreCase("book") && stack.getType() == WRITTEN_BOOK && (hasMetaPermission(sender, "book", true, true, ess) || hasMetaPermission(sender, "chapter-" + split[1].toLowerCase(Locale.ENGLISH), true, true, ess))) { final BookMeta meta = (BookMeta) stack.getItemMeta(); final IText input = new BookInput("book", true, ess); final BookPager pager = new BookPager(input); @@ -208,42 +198,44 @@ public class MetaItemStack { List pages = pager.getPages(split[1]); meta.setPages(pages); stack.setItemMeta(meta); - } else if (split.length > 1 && split[0].equalsIgnoreCase("author") && stack.getType() == Material.WRITTEN_BOOK && hasMetaPermission(sender, "author", false, true, ess)) { + } else if (split.length > 1 && split[0].equalsIgnoreCase("author") && stack.getType() == WRITTEN_BOOK && hasMetaPermission(sender, "author", false, true, ess)) { final String author = FormatUtil.replaceFormat(split[1]); final BookMeta meta = (BookMeta) stack.getItemMeta(); meta.setAuthor(author); stack.setItemMeta(meta); - } else if (split.length > 1 && split[0].equalsIgnoreCase("title") && stack.getType() == Material.WRITTEN_BOOK && hasMetaPermission(sender, "title", false, true, ess)) { + } else if (split.length > 1 && split[0].equalsIgnoreCase("title") && stack.getType() == WRITTEN_BOOK && hasMetaPermission(sender, "title", false, true, ess)) { final String title = FormatUtil.replaceFormat(split[1].replace('_', ' ')); final BookMeta meta = (BookMeta) stack.getItemMeta(); meta.setTitle(title); stack.setItemMeta(meta); - } else if (split.length > 1 && split[0].equalsIgnoreCase("power") && (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR)&& hasMetaPermission(sender, "firework-power", false, true, ess)) { + } else if (split.length > 1 && split[0].equalsIgnoreCase("power") && (MaterialUtil.isFirework(stack.getType()))&& hasMetaPermission(sender, "firework-power", false, true, ess)) { final int power = NumberUtil.isInt(split[1]) ? Integer.parseInt(split[1]) : 0; final FireworkMeta meta = (FireworkMeta) stack.getItemMeta(); meta.setPower(power > 3 ? 4 : power); stack.setItemMeta(meta); } else if (split.length > 1 && split[0].equalsIgnoreCase("itemflags") && hasMetaPermission(sender, "itemflags", false, true, ess)) { addItemFlags(string); - } else if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) {//WARNING - Meta for fireworks will be ignored after this point. + } else if (MaterialUtil.isFirework(stack.getType())) {//WARNING - Meta for fireworks will be ignored after this point. addFireworkMeta(sender, false, string, ess); - } else if (isPotion(stack.getType())) { //WARNING - Meta for potions will be ignored after this point. + } else if (MaterialUtil.isPotion(stack.getType())) { //WARNING - Meta for potions will be ignored after this point. addPotionMeta(sender, false, string, ess); - } else if (banner != null && stack.getType() == banner) { //WARNING - Meta for banners will be ignored after this point. + } else if (MaterialUtil.isBanner(stack.getType())) { + //WARNING - Meta for banners will be ignored after this point. addBannerMeta(sender, false, string, ess); - } else if (shield != null && stack.getType() == shield) { //WARNING - Meta for shields will be ignored after this point. + } else if (SHIELD != null && stack.getType() == SHIELD) { //WARNING - Meta for shields will be ignored after this point. addBannerMeta(sender, false, string, ess); - } else if (split.length > 1 && (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour")) && (stack.getType() == Material.LEATHER_BOOTS || stack.getType() == Material.LEATHER_CHESTPLATE || stack.getType() == Material.LEATHER_HELMET || stack.getType() == Material.LEATHER_LEGGINGS)) { + } else if (split.length > 1 && (split[0].equalsIgnoreCase("color") || split[0].equalsIgnoreCase("colour")) && MaterialUtil.isLeatherArmor(stack.getType())) { final String[] color = split[1].split("(\\||,)"); - if(color.length == 1 && (NumberUtil.isInt(color[0]) || color[0].startsWith("#"))) { // int rgb and hex + if (color.length == 1 && (NumberUtil.isInt(color[0]) || color[0].startsWith("#"))) { + // Either integer or hexadecimal final LeatherArmorMeta meta = (LeatherArmorMeta) stack.getItemMeta(); String input = color[0]; - if(input.startsWith("#")) { + if (input.startsWith("#")) { // Hex meta.setColor(Color.fromRGB( Integer.valueOf(input.substring(1, 3), 16), Integer.valueOf(input.substring(3, 5), 16), Integer.valueOf(input.substring(5, 7), 16))); - } else { + } else { // Int meta.setColor(Color.fromRGB(Integer.parseInt(input))); } stack.setItemMeta(meta); @@ -287,7 +279,7 @@ public class MetaItemStack { } public void addFireworkMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { - if (stack.getType() == Material.FIREWORK_ROCKET || stack.getType() == Material.FIREWORK_STAR) { + if (MaterialUtil.isFirework(stack.getType())) { final String[] split = splitPattern.split(string, 2); if (split.length < 2) { return; @@ -359,7 +351,7 @@ public class MetaItemStack { } public void addPotionMeta(final CommandSource sender, final boolean allowShortName, final String string, final IEssentials ess) throws Exception { - if (isPotion(stack.getType())) { + if (MaterialUtil.isPotion(stack.getType())) { final String[] split = splitPattern.split(string, 2); if (split.length < 2) {