diff --git a/api/src/main/java/me/blackvein/quests/config/ISettings.java b/api/src/main/java/me/blackvein/quests/config/ISettings.java index f8bc1b110..4994bff93 100644 --- a/api/src/main/java/me/blackvein/quests/config/ISettings.java +++ b/api/src/main/java/me/blackvein/quests/config/ISettings.java @@ -53,6 +53,8 @@ public interface ISettings { void setEffect(final String effect); String getRedoEffect(); void setRedoEffect(final String redoEffect); + boolean canShowCompletedObjs(); + void setShowCompletedObjs(final boolean showCompletedObjs); boolean canShowQuestReqs(); void setShowQuestReqs(final boolean showQuestReqs); boolean canShowQuestTitles(); diff --git a/core/src/main/java/me/blackvein/quests/Quests.java b/core/src/main/java/me/blackvein/quests/Quests.java index 2910e4c37..5c87ca1ec 100644 --- a/core/src/main/java/me/blackvein/quests/Quests.java +++ b/core/src/main/java/me/blackvein/quests/Quests.java @@ -1081,7 +1081,7 @@ public class Quests extends JavaPlugin implements QuestsAPI { } /** - * Show all of a player's objectives for the current stage of a quest.

+ * Show applicable objectives for the current stage of a player's quest.

* * Respects PlaceholderAPI and translations, when enabled. * @@ -1120,6 +1120,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { for (final ItemStack e2 : data.blocksBroken) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "break"); if (message.contains("")) { message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); @@ -1142,6 +1145,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { for (final ItemStack e2 : data.blocksDamaged) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "damage"); if (message.contains("")) { message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); @@ -1164,6 +1170,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { for (final ItemStack e2 : data.blocksPlaced) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "place"); if (message.contains("")) { message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); @@ -1186,6 +1195,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { for (final ItemStack e2 : data.blocksUsed) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "use"); if (message.contains("")) { message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); @@ -1208,6 +1220,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { for (final ItemStack e2 : data.blocksCut) { if (e2.getType().equals(e.getType()) && e2.getDurability() == e.getDurability()) { final ChatColor color = e2.getAmount() < e.getAmount() ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "cut"); if (message.contains("")) { message = message.replace("", "" + color + e2.getAmount() + "/" + e.getAmount()); @@ -1234,6 +1249,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int amt = is.getAmount(); final ChatColor color = crafted < amt ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "craftItem"); if (message.contains("")) { message = message.replace("", "" + color + crafted + "/" + is.getAmount()); @@ -1260,6 +1278,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int amt = is.getAmount(); final ChatColor color = smelted < amt ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "smeltItem"); if (message.contains("")) { message = message.replace("", "" + color + smelted + "/" + is.getAmount()); @@ -1286,6 +1307,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int amt = is.getAmount(); final ChatColor color = enchanted < amt ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "enchItem"); if (message.contains("")) { message = message.replace("", "" + color + enchanted + "/" + is.getAmount()); @@ -1329,6 +1353,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int amt = is.getAmount(); final ChatColor color = brewed < amt ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "brewItem"); if (message.contains("")) { message = message.replace("", "" + color + brewed + "/" + is.getAmount()); @@ -1361,6 +1388,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int amt = is.getAmount(); final ChatColor color = consumed < amt ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "consumeItem"); if (message.contains("")) { message = message.replace("", "" + color + consumed + "/" + is.getAmount()); @@ -1394,6 +1424,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { final int toDeliver = is.getAmount(); final UUID npc = stage.getItemDeliveryTargets().get(deliverIndex); final ChatColor color = delivered < toDeliver ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "deliver") .replace("", depends.getNPCName(npc)); if (message.contains("")) { @@ -1420,6 +1453,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { interacted = data.npcsInteracted.get(interactIndex); } final ChatColor color = !interacted ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "talkTo") .replace("", depends.getNPCName(uuid)); if (depends.getPlaceholderApi() != null) { @@ -1436,6 +1472,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int toNpcKill = stage.getNpcNumToKill().get(npcKillIndex); final ChatColor color = npcKilled < toNpcKill ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "kill"); if (message.contains("")) { message = message.replace("", depends.getNPCName(uuid)); @@ -1462,6 +1501,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int toMobKill = stage.getMobNumToKill().get(mobKillIndex); final ChatColor color = mobKilled < toMobKill ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- "; if (stage.getLocationsToKillWithin().isEmpty()) { message += Lang.get(quester.getPlayer(), "kill"); @@ -1497,6 +1539,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { tamed = data.mobsTamed.get(tameIndex); } final ChatColor color = tamed < toTame ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "tame"); if (!message.contains("")) { message += " "; @@ -1517,31 +1562,37 @@ public class Quests extends JavaPlugin implements QuestsAPI { } if (stage.getFishToCatch() != null) { final ChatColor color = data.getFishCaught() < stage.getFishToCatch() ? ChatColor.GREEN : ChatColor.GRAY; - String message = color + "- " + Lang.get(quester.getPlayer(), "catchFish"); - if (message.contains("")) { - message = message.replace("", "" + color + data.getFishCaught() + "/" + stage.getFishToCatch()); - } else { - // Legacy - message += color + ": " + data.getFishCaught() + "/" + stage.getFishToCatch(); + if (settings.canShowCompletedObjs() + || (!settings.canShowCompletedObjs() && color.equals(ChatColor.GREEN))) { + String message = color + "- " + Lang.get(quester.getPlayer(), "catchFish"); + if (message.contains("")) { + message = message.replace("", "" + color + data.getFishCaught() + "/" + stage.getFishToCatch()); + } else { + // Legacy + message += color + ": " + data.getFishCaught() + "/" + stage.getFishToCatch(); + } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); + } + quester.sendMessage(message); } - if (depends.getPlaceholderApi() != null) { - message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); - } - quester.sendMessage(message); } if (stage.getCowsToMilk() != null) { final ChatColor color = data.getCowsMilked() < stage.getCowsToMilk() ? ChatColor.GREEN : ChatColor.GRAY; - String message = color + "- " + Lang.get(quester.getPlayer(), "milkCow"); - if (message.contains("")) { - message = message.replace("", "" + color + data.getCowsMilked() + "/" + stage.getCowsToMilk()); - } else { - // Legacy - message += color + ": " + data.getCowsMilked() + "/" + stage.getCowsToMilk(); + if (settings.canShowCompletedObjs() + || (!settings.canShowCompletedObjs() && color.equals(ChatColor.GREEN))) { + String message = color + "- " + Lang.get(quester.getPlayer(), "milkCow"); + if (message.contains("")) { + message = message.replace("", "" + color + data.getCowsMilked() + "/" + stage.getCowsToMilk()); + } else { + // Legacy + message += color + ": " + data.getCowsMilked() + "/" + stage.getCowsToMilk(); + } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); + } + quester.sendMessage(message); } - if (depends.getPlaceholderApi() != null) { - message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); - } - quester.sendMessage(message); } int shearIndex = 0; for (final int toShear : stage.getSheepNumToShear()) { @@ -1550,6 +1601,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { sheared = data.sheepSheared.get(shearIndex); } final ChatColor color = sheared < toShear ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "shearSheep"); message = message.replace("", MiscUtil.getPrettyDyeColorName(stage.getSheepToShear() .get(shearIndex))); @@ -1565,22 +1619,28 @@ public class Quests extends JavaPlugin implements QuestsAPI { if (stage.getPlayersToKill() != null) { final ChatColor color = data.getPlayersKilled() < stage.getPlayersToKill() ? ChatColor.GREEN : ChatColor.GRAY; - String message = color + "- " + Lang.get(quester.getPlayer(), "killPlayer"); - if (message.contains("")) { - message = message.replace("", "" + color + data.getPlayersKilled() + "/" - + stage.getPlayersToKill()); - } else { - // Legacy - message += color + ": " + data.getPlayersKilled() + "/" + stage.getPlayersToKill(); + if (settings.canShowCompletedObjs() + || (!settings.canShowCompletedObjs() && color.equals(ChatColor.GREEN))) { + String message = color + "- " + Lang.get(quester.getPlayer(), "killPlayer"); + if (message.contains("")) { + message = message.replace("", "" + color + data.getPlayersKilled() + "/" + + stage.getPlayersToKill()); + } else { + // Legacy + message += color + ": " + data.getPlayersKilled() + "/" + stage.getPlayersToKill(); + } + if (depends.getPlaceholderApi() != null) { + message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); + } + quester.sendMessage(message); } - if (depends.getPlaceholderApi() != null) { - message = PlaceholderAPI.setPlaceholders(quester.getPlayer(), message); - } - quester.sendMessage(message); } for (int i = 0 ; i < stage.getLocationsToReach().size(); i++) { if (i < data.locationsReached.size()) { final ChatColor color = !data.locationsReached.get(i) ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + Lang.get(quester.getPlayer(), "goTo"); message = message.replace("", stage.getLocationNames().get(i)); quester.sendMessage(message); @@ -1593,6 +1653,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { said = data.passwordsSaid.get(passIndex); } final ChatColor color = !said ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } final String message = color + "- " + s; quester.sendMessage(message); passIndex++; @@ -1605,6 +1668,9 @@ public class Quests extends JavaPlugin implements QuestsAPI { } final int toClear = stage.getCustomObjectiveCounts().get(customIndex); final ChatColor color = cleared < toClear ? ChatColor.GREEN : ChatColor.GRAY; + if (!settings.canShowCompletedObjs() && color.equals(ChatColor.GRAY)) { + continue; + } String message = color + "- " + co.getDisplay(); for (final Entry prompt : co.getData()) { final String replacement = "%" + prompt.getKey() + "%"; diff --git a/core/src/main/java/me/blackvein/quests/Settings.java b/core/src/main/java/me/blackvein/quests/Settings.java index 070826df9..1d4ed0e0d 100644 --- a/core/src/main/java/me/blackvein/quests/Settings.java +++ b/core/src/main/java/me/blackvein/quests/Settings.java @@ -42,6 +42,7 @@ public class Settings implements ISettings { private boolean npcEffects = true; private String effect = "note"; private String redoEffect = "angry_villager"; + private boolean showCompletedObjs = true; private boolean showQuestReqs = true; private boolean showQuestTitles = true; private int strictPlayerMovement = 0; @@ -175,6 +176,12 @@ public class Settings implements ISettings { public void setRedoEffect(final String redoEffect) { this.redoEffect = redoEffect; } + public boolean canShowCompletedObjs() { + return showCompletedObjs; + } + public void setShowCompletedObjs(final boolean showCompletedObjs) { + this.showCompletedObjs = showCompletedObjs; + } public boolean canShowQuestReqs() { return showQuestReqs; } @@ -255,6 +262,7 @@ public class Settings implements ISettings { npcEffects = config.getBoolean("npc-effects.enabled", true); effect = config.getString("npc-effects.new-quest", "note"); redoEffect = config.getString("npc-effects.redo-quest", "angry_villager"); + showCompletedObjs = config.getBoolean("show-completed-objectives", true); showQuestReqs = config.getBoolean("show-requirements", true); showQuestTitles = config.getBoolean("show-titles", true); strictPlayerMovement = config.getInt("strict-player-movement", 0); diff --git a/core/src/main/java/me/blackvein/quests/item/QuestJournal.java b/core/src/main/java/me/blackvein/quests/item/QuestJournal.java index 80a1e9e04..f142972ef 100644 --- a/core/src/main/java/me/blackvein/quests/item/QuestJournal.java +++ b/core/src/main/java/me/blackvein/quests/item/QuestJournal.java @@ -75,6 +75,10 @@ public class QuestJournal { title.setBold(true); final BookUtil.PageBuilder builder = new BookUtil.PageBuilder().add(title).newLine(); for (final BukkitObjective obj : ((Quester)owner).getCurrentObjectivesTemp(quest, false, false)) { + if (!plugin.getSettings().canShowCompletedObjs() + && obj.getMessage().startsWith(ChatColor.GRAY.toString())) { + continue; + } if (obj.getMessage() != null) { String[] split = null; if (obj.getMessage().contains("") && obj.getGoalAsItem() != null) { diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index bda769cff..65037f1c5 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -19,6 +19,7 @@ npc-effects: enabled: true new-quest: note redo-quest: heart +show-completed-objectives: true show-requirements: true show-titles: true storage-data: