diff --git a/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java b/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java index 07a84b61..1332e93e 100644 --- a/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/ConfigManager.java @@ -955,8 +955,6 @@ public class ConfigManager { // Translating unicode jobFullName = StringEscapeUtils.unescapeJava(jobFullName); - String jobDisplayName = jobSection.getString("displayName"); - int maxLevel = jobSection.getInt("max-level"); if (maxLevel < 0) maxLevel = 0; @@ -1294,35 +1292,6 @@ public class ConfigManager { continue; } - List lore = itemSection.getStringList("lore"); - - for (int a = 0; a < lore.size(); a++) { - lore.set(a, CMIChatColor.translate(lore.get(a))); - } - - Map enchants = new HashMap<>(); - if (itemSection.isList("enchants")) - for (String eachLine : itemSection.getStringList("enchants")) { - if (!eachLine.contains("=")) - continue; - - String[] split = eachLine.split("=", 2); - Enchantment ench = CMIEnchantment.getEnchantment(split[0]); - if (ench == null) - continue; - - int level = -1; - try { - level = Integer.parseInt(split[1]); - } catch (NumberFormatException e) { - } - - if (level != -1) - enchants.put(ench, level); - } - - String node = itemKey.toLowerCase(); - CMIMaterial mat = null; if (itemSection.isInt("id")) { @@ -1336,11 +1305,40 @@ public class ConfigManager { continue; } + List lore = itemSection.getStringList("lore"); + + for (int a = 0; a < lore.size(); a++) { + lore.set(a, CMIChatColor.translate(lore.get(a))); + } + + Map enchants = new HashMap<>(); + for (String eachLine : itemSection.getStringList("enchants")) { + if (!eachLine.contains("=")) + continue; + + String[] split = eachLine.split("=", 2); + Enchantment ench = CMIEnchantment.getEnchantment(split[0]); + if (ench == null) + continue; + + int level = -1; + try { + level = Integer.parseInt(split[1]); + } catch (NumberFormatException e) { + } + + if (level != -1) + enchants.put(ench, level); + } + + String node = itemKey.toLowerCase(); + jobLimitedItems.put(node, new JobLimitedItems(node, mat, 1, itemSection.getString("name"), lore, enchants, itemSection.getInt("level"))); } } - Job job = new Job(jobKey, jobDisplayName, jobFullName, jobShortName, description, color, maxExpEquation, displayMethod, maxLevel, vipmaxLevel, maxSlots, jobPermissions, jobCommand, + Job job = new Job(jobKey, jobSection.getString("displayName"), jobFullName, jobShortName, description, + color, maxExpEquation, displayMethod, maxLevel, vipmaxLevel, maxSlots, jobPermissions, jobCommand, jobConditions, jobItems, jobLimitedItems, jobSection.getStringList("cmd-on-join"), jobSection.getStringList("cmd-on-leave"), guiItem, guiSlot, bossbar, rejoinCd, jobSection.getStringList("world-blacklist")); @@ -1355,21 +1353,24 @@ public class ConfigManager { job.setIgnoreMaxJobs(jobSection.getBoolean("ignore-jobs-max")); job.setReversedWorldBlacklist(jobSection.getBoolean("reverse-world-blacklist-functionality")); - if (jobSection.isConfigurationSection("Quests")) { + ConfigurationSection qsection = jobSection.getConfigurationSection("Quests"); + if (qsection != null) { List quests = new ArrayList<>(); - ConfigurationSection qsection = jobSection.getConfigurationSection("Quests"); for (String one : qsection.getKeys(false)) { try { ConfigurationSection sqsection = qsection.getConfigurationSection(one); - if (sqsection == null) { + if (sqsection == null) continue; - } Quest quest = new Quest(sqsection.getString("Name", one), job); if (sqsection.isString("Target")) { ActionType actionType = ActionType.getByName(sqsection.getString("Action")); + + if (actionType == null) + continue; + KeyValues kv = getKeyValue(sqsection.getString("Target").toUpperCase(), actionType, jobFullName); if (kv != null) { int amount = sqsection.getInt("Amount", 1); @@ -1380,6 +1381,7 @@ public class ConfigManager { if (sqsection.isList("Objectives")) { for (String oneObjective : sqsection.getStringList("Objectives")) { String[] split = oneObjective.split(";", 3); + if (split.length < 2) { log.warning("Job " + jobKey + " has incorrect quest objective (" + oneObjective + ")!"); continue; @@ -1387,6 +1389,9 @@ public class ConfigManager { try { ActionType actionType = ActionType.getByName(split[0]); + if (actionType == null) + continue; + String mats = split[1].toUpperCase(); String[] co = mats.split(","); @@ -1524,16 +1529,14 @@ public class ConfigManager { subType = keyValue.getSubType(), meta = keyValue.getMeta(); - double income = section.getDouble("income", 0.0); + double income = section.getDouble("income"); income = updateValue(CurrencyType.MONEY, income); - double points = section.getDouble("points", 0.0); + double points = section.getDouble("points"); points = updateValue(CurrencyType.POINTS, points); - double experience = section.getDouble("experience", 0.0); + double experience = section.getDouble("experience"); experience = updateValue(CurrencyType.EXP, experience); - int fromlevel = 1; - if (section.isInt("from-level")) - fromlevel = section.getInt("from-level"); + int fromlevel = section.getInt("from-level", 1); int untilLevel = -1; if (section.isInt("until-level")) { diff --git a/src/main/java/com/gamingmesh/jobs/config/RestrictedAreaManager.java b/src/main/java/com/gamingmesh/jobs/config/RestrictedAreaManager.java index 431e48db..fba19e1e 100644 --- a/src/main/java/com/gamingmesh/jobs/config/RestrictedAreaManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/RestrictedAreaManager.java @@ -198,20 +198,20 @@ public class RestrictedAreaManager { ConfigurationSection areaSection = conf.getConfigurationSection("restrictedareas"); if (areaSection != null) { for (String areaKey : areaSection.getKeys(false)) { - double multiplier = conf.getDouble("restrictedareas." + areaKey + ".multiplier"); + double multiplier = areaSection.getDouble(areaKey + ".multiplier"); - if (conf.isBoolean("restrictedareas." + areaKey + ".WG")) { + if (areaSection.isBoolean(areaKey + ".WG")) { addNew(new RestrictedArea(areaKey, areaKey, multiplier)); worldGuardArea = true; } else { - World world = Bukkit.getServer().getWorld(conf.getString("restrictedareas." + areaKey + ".world", "")); + World world = Bukkit.getServer().getWorld(areaSection.getString(areaKey + ".world", "")); if (world == null) continue; - Location point1 = new Location(world, conf.getDouble("restrictedareas." + areaKey + ".point1.x"), conf.getDouble("restrictedareas." + areaKey - + ".point1.y"), conf.getDouble("restrictedareas." + areaKey + ".point1.z")); + Location point1 = new Location(world, areaSection.getDouble(areaKey + ".point1.x"), areaSection.getDouble(areaKey + + ".point1.y"), areaSection.getDouble(areaKey + ".point1.z")); - Location point2 = new Location(world, conf.getDouble("restrictedareas." + areaKey + ".point2.x"), conf.getDouble("restrictedareas." + areaKey - + ".point2.y"), conf.getDouble("restrictedareas." + areaKey + ".point2.z")); + Location point2 = new Location(world, areaSection.getDouble(areaKey + ".point2.x"), areaSection.getDouble(areaKey + + ".point2.y"), areaSection.getDouble(areaKey + ".point2.z")); addNew(new RestrictedArea(areaKey, new CuboidArea(point1, point2), multiplier)); } } diff --git a/src/main/java/com/gamingmesh/jobs/config/ShopManager.java b/src/main/java/com/gamingmesh/jobs/config/ShopManager.java index 53dc1213..bb721e59 100644 --- a/src/main/java/com/gamingmesh/jobs/config/ShopManager.java +++ b/src/main/java/com/gamingmesh/jobs/config/ShopManager.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.Map.Entry; import org.bukkit.Bukkit; @@ -34,7 +35,6 @@ import com.gamingmesh.jobs.container.Job; import com.gamingmesh.jobs.container.JobItems; import com.gamingmesh.jobs.container.JobProgression; import com.gamingmesh.jobs.container.JobsPlayer; -import com.gamingmesh.jobs.container.PlayerPoints; import com.gamingmesh.jobs.container.ShopItem; import com.gamingmesh.jobs.stuff.GiveItem; @@ -110,10 +110,7 @@ public class ShopManager { JobsPlayer jPlayer = Jobs.getPlayerManager().getJobsPlayer(player); - PlayerPoints pointsInfo = jPlayer.getPointsData(); - double points = 0D; - if (pointsInfo != null) - points = (int) (pointsInfo.getCurrentPoints() * 100.0) / 100.0; + double points = (int) (jPlayer.getPointsData().getCurrentPoints() * 100.0) / 100.0; for (int i = 0; i < ls.size(); i++) { ShopItem item = ls.get(i); @@ -201,8 +198,13 @@ public class ShopManager { if (item.isHeadOwner()) { Jobs.getNms().setSkullOwner(skullMeta, jPlayer.getPlayer()); } else { - Jobs.getNms().setSkullOwner(skullMeta, Bukkit.getOfflinePlayer(item.getCustomHead())); + try { + Jobs.getNms().setSkullOwner(skullMeta, Bukkit.getOfflinePlayer(UUID.fromString(item.getCustomHead()))); + } catch (IllegalArgumentException ex) { + Jobs.getNms().setSkullOwner(skullMeta, Bukkit.getOfflinePlayer(item.getCustomHead())); + } } + guiItem.setItemMeta(skullMeta); } else guiItem.setItemMeta(meta); @@ -231,13 +233,14 @@ public class ShopManager { } } - if (pointsInfo == null || pointsInfo.getCurrentPoints() < item.getPrice()) { + if (jPlayer.getPointsData().getCurrentPoints() < item.getPrice()) { player.sendMessage(Jobs.getLanguage().getMessage("command.shop.info.NoPoints")); return; } - if (item.getRequiredTotalLevels() != -1 && jPlayer.getTotalLevels() < item.getRequiredTotalLevels()) { - player.sendMessage(Jobs.getLanguage().getMessage("command.shop.info.NoTotalLevel", "%totalLevel%", jPlayer.getTotalLevels())); + int totalLevels = jPlayer.getTotalLevels(); + if (item.getRequiredTotalLevels() != -1 && totalLevels < item.getRequiredTotalLevels()) { + player.sendMessage(Jobs.getLanguage().getMessage("command.shop.info.NoTotalLevel", "%totalLevel%", totalLevels)); return; } @@ -260,7 +263,7 @@ public class ShopManager { GiveItem.giveItemForPlayer(player, one.getItemStack(player)); } - pointsInfo.takePoints(item.getPrice()); + jPlayer.getPointsData().takePoints(item.getPrice()); Jobs.getJobsDAO().savePoints(jPlayer); player.sendMessage(Jobs.getLanguage().getMessage("command.shop.info.Paid", "%amount%", item.getPrice())); } @@ -437,8 +440,10 @@ public class ShopManager { Object potionData = null; if (itemSection.contains("potion-type")) { - PotionType type = PotionType.valueOf(itemSection.getString("potion-type", "speed").toUpperCase()); - if (type == null) { + PotionType type; + try { + type = PotionType.valueOf(itemSection.getString("potion-type", "speed").toUpperCase()); + } catch (IllegalArgumentException ex) { type = PotionType.SPEED; } diff --git a/src/main/java/com/gamingmesh/jobs/container/Quest.java b/src/main/java/com/gamingmesh/jobs/container/Quest.java index 328b8c4a..3fae9ee1 100644 --- a/src/main/java/com/gamingmesh/jobs/container/Quest.java +++ b/src/main/java/com/gamingmesh/jobs/container/Quest.java @@ -18,7 +18,7 @@ public class Quest { private Long validUntil = 0L; private int chance = 100, minLvl = 0; - private Integer maxLvl = null; + private Integer maxLvl; private final List rewardCmds = new ArrayList<>(), rewards = new ArrayList<>(), area = new ArrayList<>();