From 914c55a0246fe04e8256ac0083351e9569518056 Mon Sep 17 00:00:00 2001 From: PikaMug <2267126+PikaMug@users.noreply.github.com> Date: Thu, 25 Feb 2021 00:06:07 -0500 Subject: [PATCH] Update format of objectives for external calls --- .../java/me/blackvein/quests/Quester.java | 560 ++++++++++-------- .../main/java/me/blackvein/quests/Quests.java | 4 + 2 files changed, 318 insertions(+), 246 deletions(-) diff --git a/main/src/main/java/me/blackvein/quests/Quester.java b/main/src/main/java/me/blackvein/quests/Quester.java index 283fe06ca..aa26d1f90 100644 --- a/main/src/main/java/me/blackvein/quests/Quester.java +++ b/main/src/main/java/me/blackvein/quests/Quester.java @@ -880,294 +880,375 @@ public class Quester implements Comparable { */ @SuppressWarnings("deprecation") public LinkedList getCurrentObjectives(final Quest quest, final boolean ignoreOverrides) { - if (!ignoreOverrides) { - if (getCurrentStage(quest) != null) { - if (getCurrentStage(quest).objectiveOverrides.isEmpty() == false) { - final LinkedList objectives = new LinkedList(); - for (final String s: getCurrentStage(quest).objectiveOverrides) { - String message = ChatColor.GREEN + ConfigUtil.parseString( - ChatColor.translateAlternateColorCodes('&', s), quest, getPlayer()); - if (plugin.getDependencies().getPlaceholderApi() != null) { - message = PlaceholderAPI.setPlaceholders(getPlayer(), message); - } - objectives.add(message); - } - return objectives; - } - } - } - if (getQuestData(quest) == null || getCurrentStage(quest) == null) { + if (quest == null) { + plugin.getLogger().severe("Quest was null when getting objectives for " + getLastKnownName()); return new LinkedList(); } - final LinkedList unfinishedObjectives = new LinkedList(); - final LinkedList finishedObjectives = new LinkedList(); + if (getQuestData(quest) == null) { + plugin.getLogger().warning("Quest data was null when getting objectives for " + quest.getName()); + return new LinkedList(); + } + if (getCurrentStage(quest) == null) { + plugin.getLogger().warning("Current stage was null when getting objectives for " + quest.getName()); + return new LinkedList(); + } + final Dependencies depends = plugin.getDependencies(); + if (!ignoreOverrides && !getCurrentStage(quest).objectiveOverrides.isEmpty()) { + final LinkedList objectives = new LinkedList(); + for (final String s: getCurrentStage(quest).objectiveOverrides) { + String message = ChatColor.GREEN + ConfigUtil.parseString( + ChatColor.translateAlternateColorCodes('&', s), quest, getPlayer()); + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message); + } + return objectives; + } + final QuestData data = getQuestData(quest); + final Stage stage = getCurrentStage(quest); final LinkedList objectives = new LinkedList(); - for (final ItemStack e : getCurrentStage(quest).blocksToBreak) { - for (final ItemStack e2 : getQuestData(quest).blocksBroken) { + for (final ItemStack e : stage.blocksToBreak) { + for (final ItemStack e2 : data.blocksBroken) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { - if (e2.getAmount() < e.getAmount()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "break") + " " - + ItemUtil.getName(e2) + ChatColor.GREEN + ": " + e2.getAmount() + "/" + e.getAmount()); + final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "break"); + if (message.contains("")) { + message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "break") + " " - + ItemUtil.getName(e2) + ChatColor.GRAY + ": " + e2.getAmount() + "/" + e.getAmount()); + // Legacy + message += " " + color + color + ": " + e2.getAmount() + "/" + e.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(e2))); } } } - for (final ItemStack e : getCurrentStage(quest).blocksToDamage) { - for (final ItemStack e2 : getQuestData(quest).blocksDamaged) { + for (final ItemStack e : stage.blocksToDamage) { + for (final ItemStack e2 : data.blocksDamaged) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { - if (e2.getAmount() < e.getAmount()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "damage") + " " - + ItemUtil.getName(e2) + ChatColor.GREEN + ": " + e2.getAmount() + "/" + e.getAmount()); + final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "damage"); + if (message.contains("")) { + message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "damage") + " " - + ItemUtil.getName(e2) + ChatColor.GRAY + ": " + e2.getAmount() + "/" + e.getAmount()); + // Legacy + message += " " + color + color + ": " + e2.getAmount() + "/" + e.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(e2))); } } } - for (final ItemStack e : getCurrentStage(quest).blocksToPlace) { - for (final ItemStack e2 : getQuestData(quest).blocksPlaced) { + for (final ItemStack e : stage.blocksToPlace) { + for (final ItemStack e2 : data.blocksPlaced) { + final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "place"); if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { - if (e2.getAmount() < e.getAmount()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "place") + " " - + ItemUtil.getName(e2) + ChatColor.GREEN + ": " + e2.getAmount() + "/" + e.getAmount()); + if (message.contains("")) { + message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "place") + " " - + ItemUtil.getName(e2) + ChatColor.GRAY + ": " + e2.getAmount() + "/" + e.getAmount()); + // Legacy + message += " " + color + color + ": " + e2.getAmount() + "/" + e.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(e2))); } } } - for (final ItemStack e : getCurrentStage(quest).blocksToUse) { - for (final ItemStack e2 : getQuestData(quest).blocksUsed) { + for (final ItemStack e : stage.blocksToUse) { + for (final ItemStack e2 : data.blocksUsed) { + final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "use"); if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { - if (e2.getAmount() < e.getAmount()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "use") + " " - + ItemUtil.getName(e2) + ChatColor.GREEN + ": " + e2.getAmount() + "/" + e.getAmount()); + if (message.contains("")) { + message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "use") + " " - + ItemUtil.getName(e2) + ChatColor.GRAY + ": " + e2.getAmount() + "/" + e.getAmount()); + // Legacy + message += " " + color + ": " + e2.getAmount() + "/" + e.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(e2))); } } } - for (final ItemStack e : getCurrentStage(quest).blocksToCut) { - for (final ItemStack e2 : getQuestData(quest).blocksCut) { + for (final ItemStack e : stage.blocksToCut) { + for (final ItemStack e2 : data.blocksCut) { + final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "cut"); if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { - if (e2.getAmount() < e.getAmount()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "cut") + " " - + ItemUtil.getName(e2) + ChatColor.GREEN + ": " + e2.getAmount() + "/" + e.getAmount()); + if (message.contains("")) { + message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "cut") + " " - + ItemUtil.getName(e2) + ChatColor.GRAY + ": " + e2.getAmount() + "/" + e.getAmount()); + // Legacy + message += " " + color + ": " + e2.getAmount() + "/" + e.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(e2))); } } } - for (final ItemStack is : getCurrentStage(quest).itemsToCraft) { + for (final ItemStack is : stage.itemsToCraft) { int crafted = 0; - if (getQuestData(quest).itemsCrafted.containsKey(is)) { - crafted = getQuestData(quest).itemsCrafted.get(is); + if (data.itemsCrafted.containsKey(is)) { + crafted = data.itemsCrafted.get(is); } final int amt = is.getAmount(); - if (crafted < amt) { - final String obj = Lang.get(getPlayer(), "craftItem").replace("", ItemUtil.getName(is)); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + crafted + "/" + amt); + final ChatColor color = crafted < amt ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "craftItem"); + if (message.contains("")) { + message = message.replace("", "" + color + crafted + "/" + is.getAmount()); } else { - final String obj = Lang.get(getPlayer(), "craftItem").replace("", ItemUtil.getName(is)); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + crafted + "/" + amt); + // Legacy + message += color + ": " + crafted + "/" + is.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(is))); } - for (final ItemStack is : getCurrentStage(quest).itemsToSmelt) { + for (final ItemStack is : stage.itemsToSmelt) { int smelted = 0; - if (getQuestData(quest).itemsSmelted.containsKey(is)) { - smelted = getQuestData(quest).itemsSmelted.get(is); + if (data.itemsSmelted.containsKey(is)) { + smelted = data.itemsSmelted.get(is); } final int amt = is.getAmount(); - if (smelted < amt) { - final String obj = Lang.get(getPlayer(), "smeltItem").replace("", ItemUtil.getName(is)); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + smelted + "/" + amt); + final ChatColor color = smelted < amt ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "smeltItem"); + if (message.contains("")) { + message = message.replace("", "" + color + smelted + "/" + is.getAmount()); } else { - final String obj = Lang.get(getPlayer(), "smeltItem").replace("", ItemUtil.getName(is)); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + smelted + "/" + amt); + // Legacy + message += color + ": " + smelted + "/" + is.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(is))); } - for (final ItemStack is : getCurrentStage(quest).itemsToEnchant) { + for (final ItemStack is : stage.itemsToEnchant) { int enchanted = 0; - if (getQuestData(quest).itemsEnchanted.containsKey(is)) { - enchanted = getQuestData(quest).itemsEnchanted.get(is); + if (data.itemsEnchanted.containsKey(is)) { + enchanted = data.itemsEnchanted.get(is); } final int amt = is.getAmount(); - if (enchanted < amt) { - final String obj = Lang.get(getPlayer(), "enchItem").replace("", ItemUtil.getName(is)); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + enchanted + "/" + amt); + final ChatColor color = enchanted < amt ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "enchItem"); + if (message.contains("")) { + message = message.replace("", "" + color + enchanted + "/" + is.getAmount()); } else { - final String obj = Lang.get(getPlayer(), "enchItem").replace("", ItemUtil.getName(is)); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + enchanted + "/" + amt); + // Legacy + message += color + ": " + enchanted + "/" + is.getAmount(); + } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + if (is.getEnchantments().isEmpty()) { + objectives.add(message.replace("", ItemUtil.getName(is)) + .replace("", "") + .replace("", "") + .replaceAll("\\s+", " ")); + } else { + for (final Entry e : is.getEnchantments().entrySet()) { + objectives.add(message.replace("", ItemUtil.getName(is)) + .replace("", ItemUtil.getPrettyEnchantmentName(e.getKey())) + .replace("", RomanNumeral.getNumeral(e.getValue()))); + } } } - for (final ItemStack is : getCurrentStage(quest).itemsToBrew) { + for (final ItemStack is : stage.itemsToBrew) { int brewed = 0; - if (getQuestData(quest).itemsBrewed.containsKey(is)) { - brewed = getQuestData(quest).itemsBrewed.get(is); + if (data.itemsBrewed.containsKey(is)) { + brewed = data.itemsBrewed.get(is); } final int amt = is.getAmount(); - if (brewed < amt) { - final String obj = Lang.get(getPlayer(), "brewItem").replace("", ItemUtil.getName(is)); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + brewed + "/" + amt); + final ChatColor color = brewed < amt ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "brewItem"); + if (message.contains("")) { + message = message.replace("", "" + color + brewed + "/" + is.getAmount()); } else { - final String obj = Lang.get(getPlayer(), "brewItem").replace("", ItemUtil.getName(is)); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + brewed + "/" + amt); + // Legacy + message += color + ": " + brewed + "/" + is.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(is))); } - for (final ItemStack is : getCurrentStage(quest).itemsToConsume) { + for (final ItemStack is : stage.itemsToConsume) { int consumed = 0; - if (getQuestData(quest).itemsConsumed.containsKey(is)) { - consumed = getQuestData(quest).itemsConsumed.get(is); + if (data.itemsConsumed.containsKey(is)) { + consumed = data.itemsConsumed.get(is); } final int amt = is.getAmount(); - if (consumed < amt) { - final String obj = Lang.get(getPlayer(), "consumeItem").replace("", ItemUtil.getName(is)); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + consumed + "/" + amt); + final ChatColor color = consumed < amt ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "consumeItem"); + if (message.contains("")) { + message = message.replace("", "" + color + consumed + "/" + is.getAmount()); } else { - final String obj = Lang.get(getPlayer(), "consumeItem").replace("", ItemUtil.getName(is)); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + consumed + "/" + amt); + // Legacy + message += color + ": " + consumed + "/" + is.getAmount(); } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(is))); } - if (getCurrentStage(quest).cowsToMilk != null) { - if (getQuestData(quest).getCowsMilked() < getCurrentStage(quest).cowsToMilk) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "milkCow") + ChatColor.GREEN + ": " - + getQuestData(quest).getCowsMilked() + "/" + getCurrentStage(quest).cowsToMilk); + if (stage.cowsToMilk != null) { + final ChatColor color = data.getCowsMilked() < stage.cowsToMilk ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "milkCow"); + if (message.contains("")) { + message = message.replace("", "" + color + data.getCowsMilked() + "/" + stage.cowsToMilk); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "milkCow") + ChatColor.GRAY + ": " - + getQuestData(quest).getCowsMilked() + "/" + getCurrentStage(quest).cowsToMilk); + // Legacy + message += color + ": " + data.getCowsMilked() + "/" + stage.cowsToMilk; } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message); } if (getCurrentStage(quest).fishToCatch != null) { - if (getQuestData(quest).getFishCaught() < getCurrentStage(quest).fishToCatch) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "catchFish") + ChatColor.GREEN + ": " - + getQuestData(quest).getFishCaught() + "/" + getCurrentStage(quest).fishToCatch); + final ChatColor color = data.getFishCaught() < stage.fishToCatch ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "catchFish"); + if (message.contains("")) { + message = message.replace("", "" + color + data.getFishCaught() + "/" + stage.fishToCatch); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "catchFish") + ChatColor.GRAY + ": " - + getQuestData(quest).getFishCaught() + "/" + getCurrentStage(quest).fishToCatch); + // Legacy + message += color + ": " + data.getFishCaught() + "/" + stage.fishToCatch; } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message); } for (final EntityType e : getCurrentStage(quest).mobsToKill) { for (final EntityType e2 : getQuestData(quest).mobsKilled) { if (e == e2) { - if (getQuestData(quest).mobNumKilled.size() > getQuestData(quest).mobsKilled.indexOf(e2) - && getCurrentStage(quest).mobNumToKill.size() > getCurrentStage(quest).mobsToKill - .indexOf(e)) { - if (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled.indexOf(e2)) - < getCurrentStage(quest).mobNumToKill.get(getCurrentStage(quest).mobsToKill - .indexOf(e))) { - if (getCurrentStage(quest).locationsToKillWithin.isEmpty()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "kill") + " " - + ChatColor.DARK_AQUA + MiscUtil.getPrettyMobName(e) + ChatColor.GREEN + ": " - + (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled - .indexOf(e2))) + "/" + (getCurrentStage(quest).mobNumToKill - .get(getCurrentStage(quest).mobsToKill.indexOf(e)))); + if (data.mobNumKilled.size() > data.mobsKilled.indexOf(e2) + && stage.mobNumToKill.size() > stage.mobsToKill.indexOf(e)) { + final ChatColor color = data.mobNumKilled.get(data.mobsKilled.indexOf(e2)) + < stage.mobNumToKill.get(stage.mobsToKill.indexOf(e)) + ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + ""; + if (stage.locationsToKillWithin.isEmpty()) { + message += Lang.get(getPlayer(), "kill"); + if (message.contains("")) { + message = message.replace("", "" + color + + (data.mobNumKilled.get(data.mobsKilled.indexOf(e2))) + "/" + + (stage.mobNumToKill.get(stage.mobsToKill.indexOf(e)))); } else { - String obj = Lang.get(getPlayer(), "killAtLocation"); - obj = obj.replace("", ChatColor.LIGHT_PURPLE + MiscUtil.getPrettyMobName(e)); - obj = obj.replace("", getCurrentStage(quest).killNames - .get(getCurrentStage(quest).mobsToKill.indexOf(e))); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " - + (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled - .indexOf(e2))) + "/" + (getCurrentStage(quest).mobNumToKill - .get(getCurrentStage(quest).mobsToKill.indexOf(e)))); + // Legacy + message += ChatColor.AQUA + " " + color + ": " + + (data.mobNumKilled.get(data.mobsKilled.indexOf(e2))) + "/" + + (stage.mobNumToKill.get(stage.mobsToKill.indexOf(e))); } } else { - if (getCurrentStage(quest).locationsToKillWithin.isEmpty()) { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "kill") + " " - + ChatColor.DARK_AQUA + MiscUtil.getPrettyMobName(e) + ChatColor.GRAY + ": " - + (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled - .indexOf(e2))) + "/" + (getCurrentStage(quest).mobNumToKill - .get(getCurrentStage(quest).mobsToKill.indexOf(e)))); + message += Lang.get(getPlayer(), "killAtLocation").replace("", + stage.killNames.get(stage.mobsToKill.indexOf(e))); + if (message.contains("")) { + message = message.replace("", "" + color + + (data.mobNumKilled.get(data.mobsKilled.indexOf(e2))) + "/" + + (stage.mobNumToKill.get(stage.mobsToKill.indexOf(e)))); } else { - String obj = Lang.get(getPlayer(), "killAtLocation"); - obj = obj.replace("", ChatColor.DARK_AQUA + MiscUtil.getPrettyMobName(e)); - obj = obj.replace("", getCurrentStage(quest).killNames - .get(getCurrentStage(quest).mobsToKill.indexOf(e))); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " - + (getQuestData(quest).mobNumKilled.get(getQuestData(quest).mobsKilled - .indexOf(e2))) + "/" + (getCurrentStage(quest).mobNumToKill - .get(getCurrentStage(quest).mobsToKill.indexOf(e)))); + message += color + ": " + (data.mobNumKilled.get(data.mobsKilled.indexOf(e2))) + "/" + + (stage.mobNumToKill.get(stage.mobsToKill.indexOf(e))); } } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", MiscUtil.getProperMobName(e))); } } } } - if (getCurrentStage(quest).playersToKill != null) { - if (getQuestData(quest).getPlayersKilled() < getCurrentStage(quest).playersToKill) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "killPlayer") + ChatColor.GREEN + ": " - + getQuestData(quest).getPlayersKilled() + "/" + getCurrentStage(quest).playersToKill); + if (stage.playersToKill != null) { + final ChatColor color = data.getPlayersKilled() < stage.playersToKill ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "killPlayer"); + if (message.contains("")) { + message = message.replace("", "" + color + data.getPlayersKilled() + "/" + stage.playersToKill); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "killPlayer") + ChatColor.GRAY + ": " - + getQuestData(quest).getPlayersKilled() + "/" + getCurrentStage(quest).playersToKill); + // Legacy + message += color + ": " + data.getPlayersKilled() + "/" + stage.playersToKill; } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message); } int index = 0; - for (final ItemStack is : getCurrentStage(quest).itemsToDeliver) { + for (final ItemStack is : stage.itemsToDeliver) { int delivered = 0; - if (index < getQuestData(quest).itemsDelivered.size()) { - delivered = getQuestData(quest).itemsDelivered.get(index).getAmount(); + if (data.itemsDelivered.size() > index) { + delivered = data.itemsDelivered.get(index).getAmount(); } final int toDeliver = is.getAmount(); - final Integer npc = getCurrentStage(quest).itemDeliveryTargets.get(index); + final Integer npc = stage.itemDeliveryTargets.get(index); index++; - if (delivered < toDeliver) { - String obj = Lang.get(getPlayer(), "deliver"); - obj = obj.replace("", ItemUtil.getName(is) + ChatColor.GREEN); - obj = obj.replace("", plugin.getDependencies().getNPCName(npc)); - unfinishedObjectives.add(ChatColor.GREEN + obj + ": " + delivered + "/" + toDeliver); + final ChatColor color = delivered < toDeliver ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "deliver").replace("", depends.getNPCName(npc)); + if (message.contains("")) { + message = message.replace("", "" + color + delivered + "/" + toDeliver); } else { - String obj = Lang.get(getPlayer(), "deliver"); - obj = obj.replace("", ItemUtil.getName(is) + ChatColor.GRAY); - obj = obj.replace("", plugin.getDependencies().getNPCName(npc)); - finishedObjectives.add(ChatColor.GRAY + obj + ": " + delivered + "/" + toDeliver); + // Legacy + message += color + ": " + delivered + "/" + toDeliver; } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message.replace("", ItemUtil.getName(is))); } - for (final Integer n : getCurrentStage(quest).citizensToInteract) { + for (final Integer n : stage.citizensToInteract) { for (final Entry e : getQuestData(quest).citizensInteracted.entrySet()) { if (e.getKey().equals(n)) { - if (e.getValue() == false) { - String obj = Lang.get(getPlayer(), "talkTo"); - obj = obj.replace("", plugin.getDependencies().getNPCName(n)); - unfinishedObjectives.add(ChatColor.GREEN + obj); - } else { - String obj = Lang.get(getPlayer(), "talkTo"); - obj = obj.replace("", plugin.getDependencies().getNPCName(n)); - finishedObjectives.add(ChatColor.GRAY + obj); + final ChatColor color = e.getValue() == false ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "talkTo") + .replace("", depends.getNPCName(n)); + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); } + objectives.add(message); } } } for (final Integer n : getCurrentStage(quest).citizensToKill) { for (final Integer n2 : getQuestData(quest).citizensKilled) { if (n.equals(n2)) { - if (getQuestData(quest).citizenNumKilled.size() > getQuestData(quest).citizensKilled.indexOf(n2) - && getCurrentStage(quest).citizenNumToKill.size() > getCurrentStage(quest).citizensToKill - .indexOf(n)) { - if (getQuestData(quest).citizenNumKilled.get(getQuestData(quest).citizensKilled.indexOf(n2)) - < getCurrentStage(quest).citizenNumToKill.get(getCurrentStage(quest).citizensToKill - .indexOf(n))) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "kill") + " " - + plugin.getDependencies().getNPCName(n) + ChatColor.GREEN + " " - + getQuestData(quest).citizenNumKilled.get(getCurrentStage(quest).citizensToKill - .indexOf(n)) + "/" + getCurrentStage(quest).citizenNumToKill - .get(getCurrentStage(quest).citizensToKill.indexOf(n))); + if (data.citizenNumKilled.size() > data.citizensKilled.indexOf(n2) + && stage.citizenNumToKill.size() > stage.citizensToKill.indexOf(n)) { + final ChatColor color = data.citizenNumKilled.get(data.citizensKilled.indexOf(n2)) + < stage.citizenNumToKill.get(stage.citizensToKill.indexOf(n)) == false + ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "kill"); + if (message.contains("")) { + message = message.replace("", depends.getNPCName(n)); } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "kill") + " " - + plugin.getDependencies().getNPCName(n) + ChatColor.GRAY + " " - + getCurrentStage(quest).citizenNumToKill.get(getCurrentStage(quest).citizensToKill - .indexOf(n)) + "/" + getCurrentStage(quest).citizenNumToKill - .get(getCurrentStage(quest).citizensToKill.indexOf(n))); + message += " " + depends.getNPCName(n); } + if (message.contains("")) { + message = message.replace("", "" + color + + data.citizenNumKilled.get(stage.citizensToKill.indexOf(n)) + "/" + + stage.citizenNumToKill.get(stage.citizensToKill.indexOf(n))); + } else { + // Legacy + message += color + ": " + data.citizenNumKilled.get(stage.citizensToKill.indexOf(n)) + "/" + + stage.citizenNumToKill.get(stage.citizensToKill.indexOf(n)); + } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(getPlayer(), message); + } + objectives.add(message); } } } @@ -1175,83 +1256,74 @@ public class Quester implements Comparable { for (final Entry e : getCurrentStage(quest).mobsToTame.entrySet()) { for (final Entry e2 : getQuestData(quest).mobsTamed.entrySet()) { if (e.getKey().equals(e2.getKey())) { - if (e2.getValue() < e.getValue()) { - unfinishedObjectives.add(ChatColor.GREEN + Lang.get(getPlayer(), "tame") + " " - + MiscUtil.getCapitalized(e.getKey().name()) - + ChatColor.GREEN + ": " + e2.getValue() + "/" + e.getValue()); - } else { - finishedObjectives.add(ChatColor.GRAY + Lang.get(getPlayer(), "tame") + " " - + MiscUtil.getCapitalized(e.getKey().name()) + ChatColor.GRAY + ": " + e2.getValue() - + "/" + e.getValue()); + final ChatColor color = e2.getValue() < e.getValue() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "tame"); + if (!message.contains("")) { + message += " "; } + if (message.contains("")) { + message = message.replace("", "" + color + e2.getValue() + "/" + e.getValue()); + } else { + // Legacy + message += color + ": " + e2.getValue() + "/" + e.getValue(); + } + objectives.add(message.replace("", MiscUtil.getProperMobName(e.getKey()))); } } } for (final Entry e : getCurrentStage(quest).sheepToShear.entrySet()) { for (final Entry e2 : getQuestData(quest).sheepSheared.entrySet()) { if (e.getKey().equals(e2.getKey())) { - if (e2.getValue() < e.getValue()) { - String obj = Lang.get(getPlayer(), "shearSheep"); - obj = obj.replace("", e.getKey().name().toLowerCase()); - unfinishedObjectives.add(ChatColor.GREEN + obj + ChatColor.GREEN + ": " + e2.getValue() + "/" - + e.getValue()); + final ChatColor color = e2.getValue() < e.getValue() ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "shearSheep"); + message = message.replace("", MiscUtil.getPrettyDyeColorName(e.getKey())); + if (message.contains("")) { + message = message.replace("", "" + color + e2.getValue() + "/" + e.getValue()); } else { - String obj = Lang.get(getPlayer(), "shearSheep"); - obj = obj.replace("", e.getKey().name().toLowerCase()); - finishedObjectives.add(ChatColor.GRAY + obj + ChatColor.GRAY + ": " + e2.getValue() + "/" - + e.getValue()); + // Legacy + message += color + ": " + e2.getValue() + "/" + e.getValue(); } + objectives.add(message); } } } for (final Location l : getCurrentStage(quest).locationsToReach) { for (final Location l2 : getQuestData(quest).locationsReached) { if (l.equals(l2)) { - if (getQuestData(quest) != null && getQuestData(quest).hasReached != null) { - if (!getQuestData(quest).hasReached.isEmpty()) { - final int r = getQuestData(quest).locationsReached.indexOf(l2); - if (r < getQuestData(quest).hasReached.size() - && getQuestData(quest).hasReached.get(r) == false) { - String obj = Lang.get(getPlayer(), "goTo"); - obj = obj.replace("", getCurrentStage(quest).locationNames - .get(getCurrentStage(quest).locationsToReach.indexOf(l))); - unfinishedObjectives.add(ChatColor.GREEN + obj); - } else { - String obj = Lang.get(getPlayer(), "goTo"); - obj = obj.replace("", getCurrentStage(quest).locationNames - .get(getCurrentStage(quest).locationsToReach.indexOf(l))); - finishedObjectives.add(ChatColor.GRAY + obj); - } - } + if (!data.hasReached.isEmpty()) { + final ChatColor color = data.hasReached.get(data.locationsReached.indexOf(l2)) == false + ? ChatColor.GREEN : ChatColor.GRAY; + String message = color + Lang.get(getPlayer(), "goTo"); + message = message.replace("", + stage.locationNames.get(stage.locationsToReach.indexOf(l))); + objectives.add(message); } } } } for (final String s : getCurrentStage(quest).passwordDisplays) { - if (getQuestData(quest).passwordsSaid.containsKey(s)) { - final Boolean b = getQuestData(quest).passwordsSaid.get(s); - if (b != null && !b) { - unfinishedObjectives.add(ChatColor.GREEN + s); - } else { - finishedObjectives.add(ChatColor.GRAY + s); - } + if (data.passwordsSaid.containsKey(s)) { + final Boolean b = data.passwordsSaid.get(s); + final ChatColor color = b != null && !b == false ? ChatColor.GREEN : ChatColor.GRAY; + final String message = color + s; + objectives.add(message); } } for (final CustomObjective co : getCurrentStage(quest).customObjectives) { int countsIndex = 0; String display = co.getDisplay(); - boolean addUnfinished = false; - boolean addFinished = false; + final List unfinished = new LinkedList(); + final List finished = new LinkedList(); for (final Entry entry : getQuestData(quest).customObjectiveCounts.entrySet()) { if (co.getName().equals(entry.getKey())) { - int dataIndex = 0; for (final Entry prompt : co.getData()) { final String replacement = "%" + prompt.getKey() + "%"; try { - if (display.contains(replacement)) { - if (dataIndex < getCurrentStage(quest).customObjectiveData.size()) { - display = display.replace(replacement, ((String) getCurrentStage(quest) - .customObjectiveData.get(dataIndex).getValue())); + for (final Entry e : stage.customObjectiveData) { + if (e.getKey().equals(prompt.getKey())) { + if (display.contains(replacement)) { + display = display.replace(replacement, ((String) e.getValue())); + } } } } catch (final NullPointerException ne) { @@ -1259,34 +1331,30 @@ public class Quester implements Comparable { + quest.getName()); ne.printStackTrace(); } - dataIndex++; } - if (entry.getValue() < getCurrentStage(quest).customObjectiveCounts.get(countsIndex)) { + if (entry.getValue() < stage.customObjectiveCounts.get(countsIndex)) { if (co.canShowCount()) { - display = display.replace("%count%", entry.getValue() + "/" + getCurrentStage(quest) - .customObjectiveCounts.get(countsIndex)); + display = display.replace("%count%", entry.getValue() + "/" + + stage.customObjectiveCounts.get(countsIndex)); } - addUnfinished = true; + unfinished.add(ChatColor.translateAlternateColorCodes('&', display)); } else { if (co.canShowCount()) { - display = display.replace("%count%", getCurrentStage(quest).customObjectiveCounts - .get(countsIndex) + "/" + getCurrentStage(quest).customObjectiveCounts - .get(countsIndex)); + display = display.replace("%count%", stage.customObjectiveCounts.get(countsIndex) + + "/" + stage.customObjectiveCounts.get(countsIndex)); } - addFinished = true; + finished.add(ChatColor.translateAlternateColorCodes('&', display)); } - countsIndex++; } + countsIndex++; } - if (addUnfinished) { - unfinishedObjectives.add(ChatColor.GREEN + display); + for (final String s : unfinished) { + objectives.add(ChatColor.GREEN + s); } - if (addFinished) { - finishedObjectives.add(ChatColor.GRAY + display); + for (final String s : finished) { + objectives.add(ChatColor.GRAY + s); } } - objectives.addAll(unfinishedObjectives); - objectives.addAll(finishedObjectives); return objectives; } diff --git a/main/src/main/java/me/blackvein/quests/Quests.java b/main/src/main/java/me/blackvein/quests/Quests.java index 874202b3e..e9206a7dd 100644 --- a/main/src/main/java/me/blackvein/quests/Quests.java +++ b/main/src/main/java/me/blackvein/quests/Quests.java @@ -879,6 +879,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener */ @SuppressWarnings("deprecation") public void showObjectives(final Quest quest, final Quester quester, final boolean ignoreOverrides) { + if (quest == null) { + getLogger().severe("Quest was null when getting objectives for " + quester.getLastKnownName()); + return; + } if (quester.getQuestData(quest) == null) { getLogger().warning("Quest data was null when showing objectives for " + quest.getName()); return;