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);
}