diff --git a/dist/pom.xml b/dist/pom.xml index 65af54815..905e43e13 100644 --- a/dist/pom.xml +++ b/dist/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 3.8.5 + 3.8.6 quests-dist pom diff --git a/main/pom.xml b/main/pom.xml index 966ec1695..35ca4ec13 100644 --- a/main/pom.xml +++ b/main/pom.xml @@ -4,7 +4,7 @@ me.blackvein.quests quests-parent - 3.8.5 + 3.8.6 quests-main diff --git a/main/src/main/java/me/blackvein/quests/Quest.java b/main/src/main/java/me/blackvein/quests/Quest.java index e96c23a26..fc0dc6f96 100644 --- a/main/src/main/java/me/blackvein/quests/Quest.java +++ b/main/src/main/java/me/blackvein/quests/Quest.java @@ -801,28 +801,25 @@ public class Quest { /** * Force player to quit quest and inform them of their failure * - * @param q The quester to be ejected + * @param quester The quester to be ejected */ @SuppressWarnings("deprecation") - public void failQuest(Quester q) { - QuesterPreFailQuestEvent preEvent = new QuesterPreFailQuestEvent(q, this); + public void failQuest(Quester quester) { + QuesterPreFailQuestEvent preEvent = new QuesterPreFailQuestEvent(quester, this); plugin.getServer().getPluginManager().callEvent(preEvent); if (preEvent.isCancelled()) { return; } - if (plugin.getServer().getPlayer(q.getUUID()) != null) { - Player player = plugin.getServer().getPlayer(q.getUUID()); - player.sendMessage(ChatColor.GOLD + Lang.get(player, "questObjectivesTitle").replace("", name)); - player.sendMessage(ChatColor.RED + Lang.get(player, "questFailed")); - q.hardQuit(this); - q.saveData(); + Player player = quester.getPlayer(); + String[] messages = { + ChatColor.GOLD + Lang.get(player, "questObjectivesTitle").replace("", name), + ChatColor.RED + Lang.get(player, "questFailed") + }; + quester.quitQuest(this, messages); + if (player.isOnline()) { player.updateInventory(); - } else { - q.hardQuit(this); - q.saveData(); } - q.updateJournal(); - QuesterPostFailQuestEvent postEvent = new QuesterPostFailQuestEvent(q, this); + QuesterPostFailQuestEvent postEvent = new QuesterPostFailQuestEvent(quester, this); plugin.getServer().getPluginManager().callEvent(postEvent); } diff --git a/main/src/main/java/me/blackvein/quests/Quester.java b/main/src/main/java/me/blackvein/quests/Quester.java index fdf878eac..e6dbc49f8 100644 --- a/main/src/main/java/me/blackvein/quests/Quester.java +++ b/main/src/main/java/me/blackvein/quests/Quester.java @@ -571,6 +571,39 @@ public class Quester { } } + /** + * End a quest for this Quester + * + * @param quest The quest to start + * @param message Message to inform player, can be left null or empty + * @since 3.8.6 + */ + public void quitQuest(Quest quest, String message) { + quitQuest(quest, new String[] {message}); + } + + /** + * End a quest for this Quester + * + * @param quest The quest to start + * @param messages Messages to inform player, can be left null or empty + * @since 3.8.6 + */ + public void quitQuest(Quest quest, String[] messages) { + if (quest == null) { + return; + } + hardQuit(quest); + for (String message : messages) { + if (message != null && !message.equals("") && getPlayer().isOnline()) { + getPlayer().sendMessage(message); + } + } + saveData(); + loadData(); + updateJournal(); + } + public LinkedList getCurrentRequirements(Quest quest, boolean ignoreOverrides) { if (quest == null) { return new LinkedList(); @@ -3348,6 +3381,7 @@ public class Quester { /** * Show an inventory GUI with quest items to the specified player + * * @param npc The NPC from which the GUI is bound * @param quests List of quests to use for displaying items */ @@ -3394,9 +3428,9 @@ public class Quester { } /** - * Force Quester to quit the specified quest

+ * Force Quester to quit the specified quest (canceling any timers), then update Quest Journal

* - * Also cancels any timers + * Does not save changes to disk. Consider {@link #quitQuest(Quest, String)} or {@link #quitQuest(Quest, String[])} * * @param quest The quest to quit */ @@ -3420,7 +3454,10 @@ public class Quester { } /** - * Forcibly remove quest from Quester's list of completed quests + * Forcibly remove quest from Quester's list of completed quests, then update Quest Journal

+ * + * Does not save changes to disk. Consider calling {@link #saveData()} followed by {@link #loadData()} + * * @param quest The quest to remove */ public void hardRemove(Quest quest) { @@ -3432,9 +3469,9 @@ public class Quester { } /** - * Forcibly clear Quester's list of current quests

+ * Forcibly clear Quester's list of current quests and data, then update Quest Journal

* - * Also resets associated quest data + * Does not save changes to disk. Consider calling {@link #saveData()} followed by {@link #loadData()} */ public void hardClear() { try { @@ -3447,7 +3484,10 @@ public class Quester { } /** - * Forcibly set Quester's current stage + * Forcibly set Quester's current stage, then update Quest Journal + * + * Does not save changes to disk. Consider calling {@link #saveData()} followed by {@link #loadData()} + * * @param key The quest to set stage of * @param val The stage number to set */ @@ -3460,7 +3500,10 @@ public class Quester { } /** - * Forcibly set Quester's quest data + * Forcibly set Quester's quest data, then update Quest Journal

+ * + * Does not save changes to disk. Consider calling {@link #saveData()} followed by {@link #loadData()} + * * @param key The quest to set stage of * @param val The data to set */ @@ -3508,6 +3551,7 @@ public class Quester { /** * Check whether the Quester's inventory contains the specified item + * * @param is The item with a specified amount to check * @return true if the inventory contains at least the amount of the specified stack */ diff --git a/main/src/main/java/me/blackvein/quests/Quests.java b/main/src/main/java/me/blackvein/quests/Quests.java index a789b6019..3e4d0059c 100644 --- a/main/src/main/java/me/blackvein/quests/Quests.java +++ b/main/src/main/java/me/blackvein/quests/Quests.java @@ -3277,11 +3277,31 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener return ConfigUtil.checkList(list, clazz); } + /** + * Get a Quest by ID + * + * @param id ID of the quest + * @return Exact match or null if not found + * @since 3.8.6 + */ + public Quest getQuestById(String id) { + if (id == null) { + return null; + } + LinkedList qs = quests; + for (Quest q : qs) { + if (q.getId().equals(id)) { + return q; + } + } + return null; + } + /** * Get a Quest by name * * @param name Name of the quest - * @return Quest or null if not found + * @return Closest match or null if not found */ public Quest getQuest(String name) { if (name == null) { @@ -3310,7 +3330,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener * Get an Action by name * * @param name Name of the action - * @return Action or null if not found + * @return Closest match or null if not found */ public Action getAction(String name) { if (name == null) { diff --git a/main/src/main/java/me/blackvein/quests/listeners/CmdExecutor.java b/main/src/main/java/me/blackvein/quests/listeners/CmdExecutor.java index f543f60c8..14d59e91c 100644 --- a/main/src/main/java/me/blackvein/quests/listeners/CmdExecutor.java +++ b/main/src/main/java/me/blackvein/quests/listeners/CmdExecutor.java @@ -695,13 +695,9 @@ public class CmdExecutor implements CommandExecutor { if (event.isCancelled()) { return; } - quester.hardQuit(quest); String msg = Lang.get("questQuit"); msg = msg.replace("", ChatColor.DARK_PURPLE + quest.getName() + ChatColor.YELLOW); - player.sendMessage(ChatColor.YELLOW + msg); - quester.saveData(); - quester.loadData(); - quester.updateJournal(); + quester.quitQuest(quest, msg); } else { player.sendMessage(ChatColor.YELLOW + Lang.get(player, "questQuitDisabled")); } @@ -1291,20 +1287,14 @@ public class CmdExecutor implements CommandExecutor { cs.sendMessage(ChatColor.RED + Lang.get("questNotFound")); return; } - quester.hardQuit(quest); String msg1 = Lang.get("questForceQuit"); msg1 = msg1.replace("", ChatColor.GREEN + target.getName() + ChatColor.GOLD); msg1 = msg1.replace("", ChatColor.DARK_PURPLE + quest.getName() + ChatColor.GOLD); cs.sendMessage(ChatColor.GOLD + msg1); - if (target.isOnline()) { - Player p = (Player)target; - String msg2 = Lang.get(p, "questForcedQuit"); - msg2 = msg2.replace("", ChatColor.GREEN + cs.getName() + ChatColor.GOLD); - msg2 = msg2.replace("", ChatColor.DARK_PURPLE + quest.getName() + ChatColor.GOLD); - p.sendMessage(ChatColor.GREEN + msg2); - } - quester.saveData(); - quester.updateJournal(); + String msg2 = Lang.get((Player)target, "questForcedQuit"); + msg2 = msg2.replace("", ChatColor.GREEN + cs.getName() + ChatColor.GOLD); + msg2 = msg2.replace("", ChatColor.DARK_PURPLE + quest.getName() + ChatColor.GOLD); + quester.quitQuest(quest, msg2); } } else { cs.sendMessage(ChatColor.RED + Lang.get("noPermission")); diff --git a/pom.xml b/pom.xml index 004fbee67..22a677c15 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ me.blackvein.quests quests-parent - 3.8.5 + 3.8.6 quests https://github.com/PikaMug/Quests/ - 3.8.5 + 3.8.6 UTF-8 1.8 1.8 diff --git a/v1_8_R1/pom.xml b/v1_8_R1/pom.xml index c87f05ee6..368ebd029 100644 --- a/v1_8_R1/pom.xml +++ b/v1_8_R1/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 3.8.5 + 3.8.6 diff --git a/v1_8_R2/pom.xml b/v1_8_R2/pom.xml index 6c972f6f7..9f365710d 100644 --- a/v1_8_R2/pom.xml +++ b/v1_8_R2/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 3.8.5 + 3.8.6 diff --git a/v1_8_R3/pom.xml b/v1_8_R3/pom.xml index 5725630e5..cab62c86c 100644 --- a/v1_8_R3/pom.xml +++ b/v1_8_R3/pom.xml @@ -5,7 +5,7 @@ me.blackvein.quests quests-parent - 3.8.5 + 3.8.6