diff --git a/pom.xml b/pom.xml index 53a6dfba2..4604847f5 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ me.blackvein.quests quests - 3.4.6 + 3.4.7 quests https://github.com/FlyingPikachu/Quests/ jar diff --git a/src/main/java/me/blackvein/quests/NpcListener.java b/src/main/java/me/blackvein/quests/NpcListener.java index ce5e460a8..0fc48d232 100644 --- a/src/main/java/me/blackvein/quests/NpcListener.java +++ b/src/main/java/me/blackvein/quests/NpcListener.java @@ -32,7 +32,6 @@ import org.bukkit.inventory.meta.EnchantmentStorageMeta; import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.Lang; -import me.blackvein.quests.util.MiscUtil; import me.blackvein.quests.util.RomanNumeral; import net.citizensnpcs.api.CitizensAPI; import net.citizensnpcs.api.event.NPCDeathEvent; diff --git a/src/main/java/me/blackvein/quests/Quests.java b/src/main/java/me/blackvein/quests/Quests.java index 43a1d2d68..c13ab35d3 100644 --- a/src/main/java/me/blackvein/quests/Quests.java +++ b/src/main/java/me/blackvein/quests/Quests.java @@ -2600,22 +2600,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener return exists; } - @SuppressWarnings("deprecation") - private ItemStack processItemStack(String questName, String material, int amount, short durability) { - try { - return new ItemStack(Material.matchMaterial(material), amount, durability); - } catch (Exception e) { - try { - getLogger().warning(material + " is invalid for quest " + questName + "! You may need to update your quests.yml " - + "in accordance with https://github.com/FlyingPikachu/Quests/wiki/Item-Formatting#list"); - return new ItemStack(Material.matchMaterial(material, true), amount, durability); - } catch (Exception e2) { - getLogger().severe("Unable to use LEGACY_" + material + " for quest " + questName); - e2.printStackTrace(); - return null; - } - } - } + private void processStages(Quest quest, FileConfiguration config, String questName) throws StageFailedException { ConfigurationSection questStages = config.getConfigurationSection("quests." + questName + ".stages.ordered"); @@ -2681,10 +2666,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener for (String s : breaknames) { ItemStack is; if (breakdurability.get(breaknames.indexOf(s)) != -1) { - is = processItemStack(questName, s, breakamounts.get(breaknames.indexOf(s)), breakdurability.get(breaknames.indexOf(s))); + is = ItemUtil.processItemStack(s, breakamounts.get(breaknames.indexOf(s)), breakdurability.get(breaknames.indexOf(s))); } else { // Legacy - is = processItemStack(questName, s, breakamounts.get(breaknames.indexOf(s)), (short) 0); + is = ItemUtil.processItemStack(s, breakamounts.get(breaknames.indexOf(s)), (short) 0); } if (Material.matchMaterial(s) != null) { oStage.blocksToBreak.add(is); @@ -2720,10 +2705,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener for (String s : damagenames) { ItemStack is; if (damagedurability.get(damagenames.indexOf(s)) != -1) { - is = processItemStack(questName, s, damageamounts.get(damagenames.indexOf(s)), damagedurability.get(damagenames.indexOf(s))); + is = ItemUtil.processItemStack(s, damageamounts.get(damagenames.indexOf(s)), damagedurability.get(damagenames.indexOf(s))); } else { // Legacy - is = processItemStack(questName, s, damageamounts.get(damagenames.indexOf(s)), (short) 0); + is = ItemUtil.processItemStack(s, damageamounts.get(damagenames.indexOf(s)), (short) 0); } if (Material.matchMaterial(s) != null) { oStage.blocksToDamage.add(is); @@ -2759,10 +2744,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener for (String s : placenames) { ItemStack is; if (placedurability.get(placenames.indexOf(s)) != -1) { - is = processItemStack(questName, s, placeamounts.get(placenames.indexOf(s)), placedurability.get(placenames.indexOf(s))); + is = ItemUtil.processItemStack(s, placeamounts.get(placenames.indexOf(s)), placedurability.get(placenames.indexOf(s))); } else { // Legacy - is = processItemStack(questName, s, placeamounts.get(placenames.indexOf(s)), (short) 0); + is = ItemUtil.processItemStack(s, placeamounts.get(placenames.indexOf(s)), (short) 0); } if (Material.matchMaterial(s) != null) { oStage.blocksToPlace.add(is); @@ -2798,10 +2783,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener for (String s : usenames) { ItemStack is; if (usedurability.get(usenames.indexOf(s)) != -1) { - is = processItemStack(questName, s, useamounts.get(usenames.indexOf(s)), usedurability.get(usenames.indexOf(s))); + is = ItemUtil.processItemStack(s, useamounts.get(usenames.indexOf(s)), usedurability.get(usenames.indexOf(s))); } else { // Legacy - is = processItemStack(questName, s, useamounts.get(usenames.indexOf(s)), (short) 0); + is = ItemUtil.processItemStack(s, useamounts.get(usenames.indexOf(s)), (short) 0); } if (Material.matchMaterial(s) != null) { oStage.blocksToUse.add(is); @@ -2837,10 +2822,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener for (String s : cutnames) { ItemStack is; if (cutdurability.get(cutnames.indexOf(s)) != -1) { - is = processItemStack(questName, s, cutamounts.get(cutnames.indexOf(s)), cutdurability.get(cutnames.indexOf(s))); + is = ItemUtil.processItemStack(s, cutamounts.get(cutnames.indexOf(s)), cutdurability.get(cutnames.indexOf(s))); } else { // Legacy - is = processItemStack(questName, s, cutamounts.get(cutnames.indexOf(s)), (short) 0); + is = ItemUtil.processItemStack(s, cutamounts.get(cutnames.indexOf(s)), (short) 0); } if (Material.matchMaterial(s) != null) { oStage.blocksToCut.add(is); diff --git a/src/main/java/me/blackvein/quests/util/ItemUtil.java b/src/main/java/me/blackvein/quests/util/ItemUtil.java index a1a6dbe89..b7cdb4981 100644 --- a/src/main/java/me/blackvein/quests/util/ItemUtil.java +++ b/src/main/java/me/blackvein/quests/util/ItemUtil.java @@ -96,6 +96,32 @@ public class ItemUtil { } return 0; } + + /** + * Returns an ItemStack based on given values. Checks for legacy pre-1.13 names. Other traits such as + * enchantments and lore cannot be added via this method and must be done separately. + * + * @param material Item name suitable for Material.matchMaterial() + * @param amount The number of items in the stack + * @param durability The data value of the item, default of 0 + * @return ItemStack, or null if invalid format + */ + @SuppressWarnings("deprecation") + public static ItemStack processItemStack(String material, int amount, short durability) { + try { + return new ItemStack(Material.matchMaterial(material), amount, durability); + } catch (Exception e) { + try { + Bukkit.getLogger().warning(material + " is invalid! You may need to update your quests.yml or events.yml " + + "in accordance with https://github.com/FlyingPikachu/Quests/wiki/Item-Formatting#list"); + return new ItemStack(Material.matchMaterial(material, true), amount, durability); + } catch (Exception e2) { + Bukkit.getLogger().severe("Unable to use LEGACY_" + material + " for as item name"); + e2.printStackTrace(); + return null; + } + } + } /** * Get ItemStack from formatted string. See serialize() for reverse function. @@ -112,27 +138,24 @@ public class ItemUtil { } ItemStack stack = null; String[] args = data.split(":"); - ItemMeta meta = null; - EnchantmentStorageMeta esmeta = null; + String name = null; + int amount = 0; + short durability = 0; Map enchs = new HashMap(); String display = null; LinkedList lore = new LinkedList(); LinkedHashMap stored = new LinkedHashMap(); LinkedHashMap extra = new LinkedHashMap(); + ItemMeta meta = null; + EnchantmentStorageMeta esmeta = null; for (String targ : args) { String arg = targ.replace("minecraft|", "minecraft:"); if (arg.startsWith("name-")) { - try { - stack = new ItemStack(Material.matchMaterial(arg.substring(5).toUpperCase())); - } catch (Exception e) { - Bukkit.getLogger().severe("[Quests] The item name \'" + arg.substring(5).toUpperCase() + "\' is invalid. Make sure quests.yml is UTF-8 encoded"); - return null; - } - meta = stack.getItemMeta(); + name = arg.substring(5).toUpperCase(); } else if (arg.startsWith("amount-")) { - stack.setAmount(Integer.parseInt(arg.substring(7))); + amount = Integer.parseInt(arg.substring(7)); } else if (arg.startsWith("data-")) { - stack.setDurability(Short.parseShort(arg.substring(5))); + durability = Short.parseShort(arg.substring(5)); } else if (arg.startsWith("enchantment-")) { String[] temp = arg.substring(12).split(" "); try { @@ -196,7 +219,11 @@ public class ItemUtil { return null; } } - + stack = processItemStack(name, amount, durability); + if (stack == null) { + return null; + } + meta = stack.getItemMeta(); if (!extra.isEmpty()) { meta = ItemUtil.deserializeItemMeta(meta.getClass(), (Map) extra); }