diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/menu/QuestMenuPrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/menu/QuestMenuPrompt.java index 5c33ccabf..38a1f0cb6 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/menu/QuestMenuPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/menu/QuestMenuPrompt.java @@ -18,7 +18,6 @@ import java.util.List; import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; import org.bukkit.conversations.Prompt; -import org.bukkit.conversations.StringPrompt; import org.bukkit.entity.Player; import me.blackvein.quests.Quest; @@ -107,14 +106,14 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { } case 2: if (player.hasPermission("quests.editor.*") || player.hasPermission("quests.editor.edit")) { - return new QuestSelectEditPrompt(); + return new QuestSelectEditPrompt(context); } else { player.sendMessage(ChatColor.RED + Lang.get("noPermission")); return new QuestMenuPrompt(context); } case 3: if (player.hasPermission("quests.editor.*") || player.hasPermission("quests.editor.delete")) { - return new QuestSelectDeletePrompt(); + return new QuestSelectDeletePrompt(context); } else { player.sendMessage(ChatColor.RED + Lang.get("noPermission")); return new QuestMenuPrompt(context); @@ -187,15 +186,27 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { } } - public class QuestSelectEditPrompt extends StringPrompt { + public class QuestSelectEditPrompt extends QuestsEditorStringPrompt { + + public QuestSelectEditPrompt(ConversationContext context) { + super(context); + } + + public String getTitle(ConversationContext context) { + return Lang.get("questCreateTitle"); + } + + public String getQueryText(ConversationContext context) { + return Lang.get("questEditorEnterQuestName"); + } @Override public String getPromptText(ConversationContext context) { - String s = ChatColor.GOLD + Lang.get("questEditTitle") + "\n"; + String s = ChatColor.GOLD + getTitle(context) + "\n"; for (Quest q : plugin.getQuests()) { s += ChatColor.GRAY + "- " + ChatColor.AQUA + q.getName() + "\n"; } - return s + ChatColor.YELLOW + Lang.get("questEditorEnterQuestName"); + return s + ChatColor.YELLOW + getQueryText(context); } @Override @@ -206,23 +217,35 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { plugin.getQuestFactory().loadQuest(context, q); return new QuestMainPrompt(context); } - return new QuestSelectEditPrompt(); + return new QuestSelectEditPrompt(context); } else { return new QuestMenuPrompt(context); } } } - public class QuestSelectDeletePrompt extends StringPrompt { + public class QuestSelectDeletePrompt extends QuestsEditorStringPrompt { + public QuestSelectDeletePrompt(ConversationContext context) { + super(context); + } + + public String getTitle(ConversationContext context) { + return Lang.get("questCreateTitle"); + } + + public String getQueryText(ConversationContext context) { + return Lang.get("questEditorEnterQuestName"); + } + @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + Lang.get("questDeleteTitle") + "\n"; + String text = ChatColor.GOLD + getTitle(context) + "\n"; for (Quest quest : plugin.getQuests()) { text += ChatColor.AQUA + quest.getName() + ChatColor.GRAY + ","; } text = text.substring(0, text.length() - 1) + "\n"; - text += ChatColor.YELLOW + Lang.get("questEditorEnterQuestName"); + text += ChatColor.YELLOW + getQueryText(context); return text; } @@ -240,7 +263,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { } if (used.isEmpty()) { context.setSessionData(CK.ED_QUEST_DELETE, found.getName()); - return new QuestConfirmDeletePrompt(); + return new QuestConfirmDeletePrompt(context); } else { ((Player) context.getForWhom()).sendMessage(ChatColor.RED + Lang.get("questEditorQuestAsRequirement1") + " \"" + ChatColor.DARK_PURPLE @@ -251,18 +274,30 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { } ((Player) context.getForWhom()).sendMessage(ChatColor.RED + Lang.get("questEditorQuestAsRequirement3")); - return new QuestSelectDeletePrompt(); + return new QuestSelectDeletePrompt(context); } } ((Player) context.getForWhom()).sendMessage(ChatColor.RED + Lang.get("questEditorQuestNotFound")); - return new QuestSelectDeletePrompt(); + return new QuestSelectDeletePrompt(context); } else { return new QuestMenuPrompt(context); } } } - public class QuestConfirmDeletePrompt extends StringPrompt { + public class QuestConfirmDeletePrompt extends QuestsEditorStringPrompt { + + public QuestConfirmDeletePrompt(ConversationContext context) { + super(context); + } + + public String getTitle(ConversationContext context) { + return null; + } + + public String getQueryText(ConversationContext context) { + return Lang.get("confirmDelete"); + } @Override public String getPromptText(ConversationContext context) { @@ -270,7 +305,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { + Lang.get("yesWord") + "\n"; text += ChatColor.RED + "" + ChatColor.BOLD + "2" + ChatColor.RESET + "" + ChatColor.RED + " - " + Lang.get("noWord"); - return ChatColor.RED + Lang.get("confirmDelete") + " (" + ChatColor.YELLOW + return ChatColor.RED + getQueryText(context) + " (" + ChatColor.YELLOW + (String) context.getSessionData(CK.ED_QUEST_DELETE) + ChatColor.RED + ")\n" + text; } @@ -282,7 +317,7 @@ public class QuestMenuPrompt extends QuestsEditorNumericPrompt { } else if (input.equalsIgnoreCase("2") || input.equalsIgnoreCase(Lang.get("noWord"))) { return new QuestMenuPrompt(context); } else { - return new QuestConfirmDeletePrompt(); + return new QuestConfirmDeletePrompt(context); } } } diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/options/OptionsPrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/options/OptionsPrompt.java index 02f6f06ba..11f0821df 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/options/OptionsPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/options/OptionsPrompt.java @@ -100,9 +100,9 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt { protected Prompt acceptValidatedInput(ConversationContext context, Number input) { switch (input.intValue()) { case 1: - return new GeneralPrompt(context); + return new OptionsGeneralPrompt(context); case 2: - return new MultiplayerPrompt(context); + return new OptionsMultiplayerPrompt(context); case 3: return plugin.getQuestFactory().returnToMenu(context); default: @@ -277,8 +277,8 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt { } } - public class GeneralPrompt extends QuestsEditorNumericPrompt { - public GeneralPrompt(ConversationContext context) { + public class OptionsGeneralPrompt extends QuestsEditorNumericPrompt { + public OptionsGeneralPrompt(ConversationContext context) { super(context); } @@ -374,11 +374,11 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt { switch (input.intValue()) { case 1: tempKey = CK.OPT_ALLOW_COMMANDS; - tempPrompt = new GeneralPrompt(context); + tempPrompt = new OptionsGeneralPrompt(context); return new TrueFalsePrompt(context); case 2: tempKey = CK.OPT_ALLOW_QUITTING; - tempPrompt = new GeneralPrompt(context); + tempPrompt = new OptionsGeneralPrompt(context); return new TrueFalsePrompt(context); case 3: tempKey = null; @@ -395,8 +395,8 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt { } } - public class MultiplayerPrompt extends QuestsEditorNumericPrompt { - public MultiplayerPrompt(ConversationContext context) { + public class OptionsMultiplayerPrompt extends QuestsEditorNumericPrompt { + public OptionsMultiplayerPrompt(ConversationContext context) { super(context); } @@ -520,19 +520,19 @@ public class OptionsPrompt extends QuestsEditorNumericPrompt { switch (input.intValue()) { case 1: tempKey = CK.OPT_USE_DUNGEONSXL_PLUGIN; - tempPrompt = new MultiplayerPrompt(context); + tempPrompt = new OptionsMultiplayerPrompt(context); return new TrueFalsePrompt(context); case 2: tempKey = CK.OPT_USE_PARTIES_PLUGIN; - tempPrompt = new MultiplayerPrompt(context); + tempPrompt = new OptionsMultiplayerPrompt(context); return new TrueFalsePrompt(context); case 3: tempKey = CK.OPT_SHARE_PROGRESS_LEVEL; - tempPrompt = new MultiplayerPrompt(context); + tempPrompt = new OptionsMultiplayerPrompt(context); return new LevelPrompt(context); case 4: tempKey = CK.OPT_REQUIRE_SAME_QUEST; - tempPrompt = new MultiplayerPrompt(context); + tempPrompt = new OptionsMultiplayerPrompt(context); return new TrueFalsePrompt(context); case 5: tempKey = null; diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/planner/DateTimePrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/planner/DateTimePrompt.java index 7c969737f..8103457bc 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/planner/DateTimePrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/planner/DateTimePrompt.java @@ -19,14 +19,15 @@ import java.util.Locale; import java.util.TimeZone; import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt; import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.Lang; import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; import org.bukkit.conversations.Prompt; -import org.bukkit.conversations.StringPrompt; public class DateTimePrompt extends QuestsEditorNumericPrompt { private final Prompt oldPrompt; @@ -201,19 +202,19 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { context.setSessionData("tempZone", cal.getTimeZone().getID()); return new DateTimePrompt(context, oldPrompt, source); case 1: - return new DayPrompt(); + return new DayPrompt(context); case 2: - return new MonthPrompt(); + return new MonthPrompt(context); case 3: - return new YearPrompt(); + return new YearPrompt(context); case 4: - return new HourPrompt(); + return new HourPrompt(context); case 5: - return new MinutePrompt(); + return new MinutePrompt(context); case 6: - return new SecondPrompt(); + return new SecondPrompt(context); case 7: - return new OffsetPrompt(); + return new OffsetPrompt(context); case 8: context.setSessionData("tempDay", null); context.setSessionData("tempMonth", null); @@ -266,11 +267,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class DayPrompt extends StringPrompt { + public class DayPrompt extends QuestsEditorStringPrompt { + + public DayPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterDay"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterDay"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -281,14 +299,14 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < 1 || amt > 31) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "1").replace("", "31")); - return new DayPrompt(); + return new DayPrompt(context); } else { context.setSessionData("tempDay", Integer.parseInt(input)); return new DateTimePrompt(context, oldPrompt, source); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new DayPrompt(); + return new DayPrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -296,11 +314,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class MonthPrompt extends StringPrompt { + public class MonthPrompt extends QuestsEditorStringPrompt { + + public MonthPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterMonth"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterYear"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -311,14 +346,14 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < 1 || amt > 12) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "1").replace("", "12")); - return new MonthPrompt(); + return new MonthPrompt(context); } else { context.setSessionData("tempMonth", Integer.parseInt(input) - 1); return new DateTimePrompt(context, oldPrompt, source); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new MonthPrompt(); + return new MonthPrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -326,11 +361,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class YearPrompt extends StringPrompt { + public class YearPrompt extends QuestsEditorStringPrompt { + + public YearPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterYear"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterYear"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -341,14 +393,14 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < 1000 || amt > 9999) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "1000").replace("", "9999")); - return new YearPrompt(); + return new YearPrompt(context); } else { context.setSessionData("tempYear", Integer.parseInt(input)); return new DateTimePrompt(context, oldPrompt, source); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new YearPrompt(); + return new YearPrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -356,11 +408,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class HourPrompt extends StringPrompt { + public class HourPrompt extends QuestsEditorStringPrompt { + + public HourPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterHour"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterHour"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -371,14 +440,14 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < 0 || amt > 23) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "0").replace("", "23")); - return new HourPrompt(); + return new HourPrompt(context); } else { context.setSessionData("tempHour", Integer.parseInt(input)); return new DateTimePrompt(context, oldPrompt, source); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new HourPrompt(); + return new HourPrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -386,11 +455,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class MinutePrompt extends StringPrompt { + public class MinutePrompt extends QuestsEditorStringPrompt { + + public MinutePrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterMinute"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterMinute"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -401,14 +487,14 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < 0 || amt > 59) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "0").replace("", "59")); - return new MinutePrompt(); + return new MinutePrompt(context); } else { context.setSessionData("tempMinute", Integer.parseInt(input)); return new DateTimePrompt(context, oldPrompt, source); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new MinutePrompt(); + return new MinutePrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -416,11 +502,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class SecondPrompt extends StringPrompt { + public class SecondPrompt extends QuestsEditorStringPrompt { + + public SecondPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterSecond"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterSecond"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -431,14 +534,14 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < 0 || amt > 59) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "0").replace("", "59")); - return new SecondPrompt(); + return new SecondPrompt(context); } else { context.setSessionData("tempSecond", Integer.parseInt(input)); return new DateTimePrompt(context, oldPrompt, source); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new SecondPrompt(); + return new SecondPrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -446,11 +549,28 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class OffsetPrompt extends StringPrompt { + public class OffsetPrompt extends QuestsEditorStringPrompt { + + public OffsetPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - return ChatColor.YELLOW + Lang.get("dateCreateEnterOffset"); + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterOffset"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -461,11 +581,11 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { if (amt < -12.0 || amt > 14.0) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidRange") .replace("", "-12:00").replace("", "14:00")); - return new OffsetPrompt(); + return new OffsetPrompt(context); } else { String[] t = TimeZone.getAvailableIDs((int) Math.round(amt * 60.0 * 60.0 * 1000.0)); if (t.length > 1) { - return new ZonePrompt(t); + return new ZonePrompt(context, t); } else if (t.length > 0) { context.setSessionData("tempZone", t[0]); } else { @@ -475,7 +595,7 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new OffsetPrompt(); + return new OffsetPrompt(context); } } else { return new DateTimePrompt(context, oldPrompt, source); @@ -483,22 +603,36 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } - private class ZonePrompt extends StringPrompt { + public class ZonePrompt extends QuestsEditorStringPrompt { String[] zones; - public ZonePrompt(String[] timezones) { + public ZonePrompt(ConversationContext context, String[] timezones) { + super(context); zones = timezones; } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("timeZoneTitle"); + } @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.LIGHT_PURPLE + Lang.get("timeZoneTitle") + "\n"; + public String getQueryText(ConversationContext context) { + return Lang.get("dateCreateEnterZone"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"; for (String z : zones) { text += ChatColor.GREEN + z + ", "; } text = text.substring(0, text.length() - 2); - return text + "\n" + ChatColor.YELLOW + Lang.get("dateCreateEnterZone"); + return text + "\n" + ChatColor.YELLOW + getQueryText(context); } @Override @@ -511,7 +645,7 @@ public class DateTimePrompt extends QuestsEditorNumericPrompt { } } context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new ZonePrompt(zones); + return new ZonePrompt(context, zones); } else { return new DateTimePrompt(context, oldPrompt, source); } diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/planner/PlannerPrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/planner/PlannerPrompt.java index 1d276db9f..ff0509727 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/planner/PlannerPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/planner/PlannerPrompt.java @@ -20,7 +20,9 @@ import java.util.TimeZone; import me.blackvein.quests.Quests; import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt; import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.Lang; import me.blackvein.quests.util.MiscUtil; @@ -28,7 +30,6 @@ import me.blackvein.quests.util.MiscUtil; import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; import org.bukkit.conversations.Prompt; -import org.bukkit.conversations.StringPrompt; public class PlannerPrompt extends QuestsEditorNumericPrompt { @@ -156,13 +157,13 @@ public class PlannerPrompt extends QuestsEditorNumericPrompt { return new DateTimePrompt(context, PlannerPrompt.this, "end"); case 3: if (context.getSessionData(CK.PLN_START_DATE) != null && context.getSessionData(CK.PLN_END_DATE) != null) { - return new RepeatPrompt(); + return new PlannerRepeatPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidOption")); return new PlannerPrompt(context); } case 4: - return new CooldownPrompt(); + return new PlannerCooldownPrompt(context); case 5: return plugin.getQuestFactory().returnToMenu(context); default: @@ -170,11 +171,28 @@ public class PlannerPrompt extends QuestsEditorNumericPrompt { } } - private class RepeatPrompt extends StringPrompt { + public class PlannerRepeatPrompt extends QuestsEditorStringPrompt { + + public PlannerRepeatPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("timePrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("timePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -198,17 +216,34 @@ public class PlannerPrompt extends QuestsEditorNumericPrompt { } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new RepeatPrompt(); + return new PlannerRepeatPrompt(context); } return new PlannerPrompt(context); } } - private class CooldownPrompt extends StringPrompt { + public class PlannerCooldownPrompt extends QuestsEditorStringPrompt { + + public PlannerCooldownPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("timePrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("timePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -232,7 +267,7 @@ public class PlannerPrompt extends QuestsEditorNumericPrompt { } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new CooldownPrompt(); + return new PlannerCooldownPrompt(context); } return new PlannerPrompt(context); } diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/requirements/RequirementsPrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/requirements/RequirementsPrompt.java index 8bb0ee55e..1e9a82477 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/requirements/RequirementsPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/requirements/RequirementsPrompt.java @@ -21,7 +21,6 @@ import java.util.Map; import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.FixedSetPrompt; import org.bukkit.conversations.Prompt; import org.bukkit.conversations.StringPrompt; import org.bukkit.inventory.ItemStack; @@ -35,7 +34,9 @@ import me.blackvein.quests.Quests; import me.blackvein.quests.convo.generic.ItemStackPrompt; import me.blackvein.quests.convo.generic.OverridePrompt; import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt; import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.Lang; @@ -329,34 +330,34 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { switch (input.intValue()) { case 1: if (plugin.getDependencies().getVaultEconomy() != null) { - return new MoneyPrompt(); + return new RequirementsMoneyPrompt(context); } else { return new RequirementsPrompt(context); } case 2: - return new QuestPointsPrompt(); + return new RequirementsQuestPointsPrompt(context); case 3: - return new ItemListPrompt(context); + return new RequirementsItemListPrompt(context); case 4: - return new PermissionsPrompt(); + return new RequirementsPermissionsPrompt(context); case 5: - return new QuestListPrompt(true); + return new RequirementsQuestListPrompt(context, true); case 6: - return new QuestListPrompt(false); + return new RequirementsQuestListPrompt(context, false); case 7: if (plugin.getDependencies().getMcmmoClassic() != null) { - return new mcMMOPrompt(); + return new RequirementsMcMMOListPrompt(context); } else { return new RequirementsPrompt(context); } case 8: if (plugin.getDependencies().getHeroes() != null) { - return new HeroesPrompt(); + return new RequirementsHeroesListPrompt(context); } else { return new RequirementsPrompt(context); } case 9: - return new CustomRequirementsPrompt(); + return new CustomRequirementsPrompt(context); case 10: if (hasRequirement) { return new OverridePrompt.Builder() @@ -392,11 +393,28 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { return false; } - private class MoneyPrompt extends StringPrompt { + public class RequirementsMoneyPrompt extends QuestsEditorStringPrompt { + + public RequirementsMoneyPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewMoneyPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = Lang.get("rewMoneyPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = getQueryText(context); if (plugin.getDependencies().getVaultEconomy() != null) { text = text.replace("", ChatColor.DARK_PURPLE+ ((plugin.getDependencies().getVaultEconomy() .currencyNamePlural().isEmpty() ? Lang.get("money") : plugin.getDependencies().getVaultEconomy() @@ -417,12 +435,12 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { context.setSessionData(CK.REQ_MONEY, i); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("inputPosNum")); - return new MoneyPrompt(); + return new RequirementsMoneyPrompt(context); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new MoneyPrompt(); + return new RequirementsMoneyPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REQ_MONEY, null); @@ -432,11 +450,28 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } - private class QuestPointsPrompt extends StringPrompt { + public class RequirementsQuestPointsPrompt extends QuestsEditorStringPrompt { + + public RequirementsQuestPointsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewQuestPointsPrompt").replace("", Lang.get("questPoints")); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("rewQuestPointsPrompt").replace("", Lang.get("questPoints")); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -449,12 +484,12 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { context.setSessionData(CK.REQ_QUEST_POINTS, i); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("inputPosNum")); - return new QuestPointsPrompt(); + return new RequirementsQuestPointsPrompt(context); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new QuestPointsPrompt(); + return new RequirementsQuestPointsPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REQ_QUEST_POINTS, null); @@ -464,17 +499,31 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } - private class QuestListPrompt extends StringPrompt { - + public class RequirementsQuestListPrompt extends QuestsEditorStringPrompt { + private final boolean isRequiredQuest; - public QuestListPrompt(boolean isRequired) { + public RequirementsQuestListPrompt(ConversationContext context, boolean isRequired) { + super(context); this.isRequiredQuest = isRequired; } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("reqQuestListTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqQuestPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.LIGHT_PURPLE + Lang.get("reqQuestListTitle") + "\n" + ChatColor.DARK_PURPLE; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n" + ChatColor.DARK_PURPLE; boolean none = true; for (Quest q : plugin.getQuests()) { text += q.getName() + ", "; @@ -486,7 +535,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { text = text.substring(0, (text.length() - 2)); text += "\n"; } - text += ChatColor.YELLOW + Lang.get("reqQuestPrompt"); + text += ChatColor.YELLOW + getQueryText(context); return text; } @@ -501,11 +550,11 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { String text = Lang.get("reqNotAQuestName"); text = text.replace("", ChatColor.LIGHT_PURPLE + s + ChatColor.RED); context.getForWhom().sendRawMessage(text); - return new QuestListPrompt(isRequiredQuest); + return new RequirementsQuestListPrompt(context, isRequiredQuest); } if (questNames.contains(s)) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listDuplicate")); - return new QuestListPrompt(isRequiredQuest); + return new RequirementsQuestListPrompt(context, isRequiredQuest); } questNames.add(plugin.getQuest(s).getName()); } @@ -532,8 +581,8 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } - public class ItemListPrompt extends QuestsEditorNumericPrompt { - public ItemListPrompt(ConversationContext context) { + public class RequirementsItemListPrompt extends QuestsEditorNumericPrompt { + public RequirementsItemListPrompt(ConversationContext context) { super(context); } @@ -653,19 +702,19 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { protected Prompt acceptValidatedInput(ConversationContext context, Number input) { switch (input.intValue()) { case 1: - return new ItemStackPrompt(ItemListPrompt.this); + return new ItemStackPrompt(RequirementsItemListPrompt.this); case 2: if (context.getSessionData(CK.REQ_ITEMS) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqMustAddItem")); - return new ItemListPrompt(context); + return new RequirementsItemListPrompt(context); } else { - return new RemoveItemsPrompt(); + return new RemoveItemsPrompt(context); } case 3: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqItemCleared")); context.setSessionData(CK.REQ_ITEMS, null); context.setSessionData(CK.REQ_ITEMS_REMOVE, null); - return new ItemListPrompt(context); + return new RequirementsItemListPrompt(context); case 4: int one; int two; @@ -683,7 +732,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { return new RequirementsPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listsNotSameSize")); - return new ItemListPrompt(context); + return new RequirementsItemListPrompt(context); } default: return null; @@ -701,11 +750,28 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } - private class RemoveItemsPrompt extends StringPrompt { + public class RemoveItemsPrompt extends QuestsEditorStringPrompt { + + public RemoveItemsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqRemoveItemsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("reqRemoveItemsPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -722,20 +788,37 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { booleans.add(false); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateInvalidInput")); - return new RemoveItemsPrompt(); + return new RemoveItemsPrompt(context); } } context.setSessionData(CK.REQ_ITEMS_REMOVE, booleans); } - return new ItemListPrompt(context); + return new RequirementsItemListPrompt(context); } } - private class PermissionsPrompt extends StringPrompt { + public class RequirementsPermissionsPrompt extends QuestsEditorStringPrompt { + + public RequirementsPermissionsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqPermissionsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("reqPermissionsPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -753,11 +836,28 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } - private class CustomRequirementsPrompt extends StringPrompt { + public class CustomRequirementsPrompt extends QuestsEditorStringPrompt { + + public CustomRequirementsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("customRequirementsTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqCustomPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.LIGHT_PURPLE + Lang.get("customRequirementsTitle") + "\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"; if (plugin.getCustomRequirements().isEmpty()) { text += ChatColor.DARK_PURPLE + "(" + Lang.get("stageEditorNoModules") + ") "; } else { @@ -765,7 +865,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { text += ChatColor.DARK_PURPLE + " - " + cr.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("reqCustomPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @SuppressWarnings("unchecked") @@ -805,7 +905,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } else { // Already added, so inform user context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqCustomAlreadyAdded")); - return new CustomRequirementsPrompt(); + return new CustomRequirementsPrompt(context); } } else { // The custom requirement hasn't been added yet, so let's do it @@ -823,7 +923,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } else { context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqCustomNotFound")); - return new CustomRequirementsPrompt(); + return new CustomRequirementsPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REQ_CUSTOM, null); @@ -836,7 +936,7 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } private class RequirementCustomDataListPrompt extends StringPrompt { - + @SuppressWarnings("unchecked") @Override public String getPromptText(ConversationContext context) { @@ -932,62 +1032,127 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } } - private class mcMMOPrompt extends FixedSetPrompt { + public class RequirementsMcMMOListPrompt extends QuestsEditorNumericPrompt { - public mcMMOPrompt() { - super("1", "2", "3"); + public RequirementsMcMMOListPrompt(ConversationContext context) { + super(context); } - + + private final int size = 3; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("mcMMORequirementsTitle"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("reqSetSkills"); + case 2: + return ChatColor.YELLOW + Lang.get("reqSetSkillAmounts"); + case 3: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(CK.REQ_MCMMO_SKILLS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (String skill : (LinkedList) context.getSessionData(CK.REQ_MCMMO_SKILLS)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + skill + "\n"; + } + return text; + } + case 2: + if (context.getSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (int i : (LinkedList) context.getSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n"; + } + return text; + } + case 3: + return ""; + default: + return null; + } + } + @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.DARK_GREEN + Lang.get("mcMMORequirementsTitle") + "\n"; - if (cc.getSessionData(CK.REQ_MCMMO_SKILLS) == null) { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "1" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqSetSkills") + "(" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "1" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqSetSkills") + "\n"; - @SuppressWarnings("unchecked") - LinkedList skills = (LinkedList) cc.getSessionData(CK.REQ_MCMMO_SKILLS); - for (String skill : skills) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + skill + "\n"; - } + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } - if (cc.getSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS) == null) { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "2" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqSetSkillAmounts") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "2" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqSetSkillAmounts") + "\n"; - @SuppressWarnings("unchecked") - LinkedList amounts = (LinkedList) cc.getSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS); - for (int i : amounts) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n"; - } - } - text += ChatColor.BOLD + "" + ChatColor.GREEN + "3" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("done"); return text; } - + @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new mcMMOSkillsPrompt(); - } else if (input.equalsIgnoreCase("2")) { - return new mcMMOAmountsPrompt(); - } else if (input.equalsIgnoreCase("3")) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new McMMOSkillsPrompt(context); + case 2: + return new McMMOAmountsPrompt(context); + case 3: return new RequirementsPrompt(context); + default: + return new RequirementsMcMMOListPrompt(context); } - return null; } } - private class mcMMOSkillsPrompt extends StringPrompt { + public class McMMOSkillsPrompt extends QuestsEditorStringPrompt { + + public McMMOSkillsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("skillListTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewMcMMOPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String skillList = ChatColor.DARK_GREEN + Lang.get("skillListTitle") + "\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String skillList = ChatColor.DARK_GREEN + getTitle(context) + "\n"; SkillType[] skills = SkillType.values(); for (int i = 0; i < skills.length; i++) { if (i == (skills.length - 1)) { @@ -996,11 +1161,11 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { skillList += ChatColor.GREEN + skills[i].getName() + "\n\n"; } } - return skillList + ChatColor.YELLOW + Lang.get("rewMcMMOPrompt"); + return skillList + ChatColor.YELLOW + getQueryText(context); } @Override - public Prompt acceptInput(ConversationContext cc, String input) { + public Prompt acceptInput(ConversationContext context, String input) { if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false && input.equalsIgnoreCase(Lang.get("cmdClear")) == false) { LinkedList skills = new LinkedList(); @@ -1009,37 +1174,54 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { if (Quests.getMcMMOSkill(formatted) != null) { skills.add(formatted); } else if (skills.contains(formatted)) { - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("listDuplicate")); - return new mcMMOSkillsPrompt(); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("listDuplicate")); + return new McMMOSkillsPrompt(context); } else { String text = Lang.get("reqMcMMOError"); text = text.replace("", ChatColor.RED + s + ChatColor.YELLOW); - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + text); - return new mcMMOSkillsPrompt(); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + text); + return new McMMOSkillsPrompt(context); } } - cc.setSessionData(CK.REQ_MCMMO_SKILLS, skills); - return new mcMMOPrompt(); + context.setSessionData(CK.REQ_MCMMO_SKILLS, skills); + return new RequirementsMcMMOListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqMcMMOCleared")); - cc.setSessionData(CK.REQ_MCMMO_SKILLS, null); - return new mcMMOPrompt(); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqMcMMOCleared")); + context.setSessionData(CK.REQ_MCMMO_SKILLS, null); + return new RequirementsMcMMOListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new mcMMOPrompt(); + return new RequirementsMcMMOListPrompt(context); } - return new mcMMOSkillsPrompt(); + return new McMMOSkillsPrompt(context); } } - private class mcMMOAmountsPrompt extends StringPrompt { - - @Override - public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("reqMcMMOAmountsPrompt"); + public class McMMOAmountsPrompt extends QuestsEditorStringPrompt { + + public McMMOAmountsPrompt(ConversationContext context) { + super(context); } @Override - public Prompt acceptInput(ConversationContext cc, String input) { + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqMcMMOAmountsPrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(ConversationContext context, String input) { if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false && input.equalsIgnoreCase(Lang.get("cmdClear")) == false) { LinkedList amounts = new LinkedList(); @@ -1050,71 +1232,136 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { } catch (NumberFormatException nfe) { String text = Lang.get("reqNotANumber"); text = text.replace("", ChatColor.RED + s + ChatColor.YELLOW); - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + text); - return new mcMMOAmountsPrompt(); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + text); + return new McMMOAmountsPrompt(context); } } - cc.setSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS, amounts); - return new mcMMOPrompt(); + context.setSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS, amounts); + return new RequirementsMcMMOListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqMcMMOAmountsCleared")); - cc.setSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS, null); - return new mcMMOPrompt(); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqMcMMOAmountsCleared")); + context.setSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS, null); + return new RequirementsMcMMOListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new mcMMOPrompt(); + return new RequirementsMcMMOListPrompt(context); } - return new mcMMOAmountsPrompt(); + return new McMMOAmountsPrompt(context); } } - private class HeroesPrompt extends FixedSetPrompt { + public class RequirementsHeroesListPrompt extends QuestsEditorNumericPrompt { - public HeroesPrompt() { - super("1", "2", "3"); + public RequirementsHeroesListPrompt(ConversationContext context) { + super(context); + } + + private final int size = 3; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("heroesRequirementsTitle"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("reqHeroesSetPrimary"); + case 2: + return ChatColor.YELLOW + Lang.get("reqHeroesSetSecondary"); + case 3: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(CK.REQ_HEROES_PRIMARY_CLASS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + return "(" + ChatColor.AQUA + (String) context.getSessionData(CK.REQ_HEROES_PRIMARY_CLASS) + + ChatColor.GREEN + ")\n"; + } + case 2: + if (context.getSessionData(CK.REQ_HEROES_SECONDARY_CLASS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + return "(" + ChatColor.AQUA + (String) context.getSessionData(CK.REQ_HEROES_SECONDARY_CLASS) + + ChatColor.GREEN + ")\n"; + } + case 3: + return ""; + default: + return null; + } } @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.DARK_GREEN + Lang.get("heroesRequirementsTitle") + "\n"; - if (cc.getSessionData(CK.REQ_HEROES_PRIMARY_CLASS) == null) { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "1" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqHeroesSetPrimary") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "1" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqHeroesSetPrimary") + " (" + ChatColor.AQUA - + (String) cc.getSessionData(CK.REQ_HEROES_PRIMARY_CLASS) + ChatColor.GREEN + ")\n"; + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } - if (cc.getSessionData(CK.REQ_HEROES_SECONDARY_CLASS) == null) { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "2" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqHeroesSetSecondary") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BOLD + "" + ChatColor.GREEN + "2" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("reqHeroesSetSecondary") + " (" + ChatColor.AQUA - + (String) cc.getSessionData(CK.REQ_HEROES_SECONDARY_CLASS) + ChatColor.GREEN + ")\n"; - } - text += ChatColor.BOLD + "" + ChatColor.GREEN + "3" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("done"); return text; } - @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new HeroesPrimaryPrompt(); - } else if (input.equalsIgnoreCase("2")) { - return new HeroesSecondaryPrompt(); - } else if (input.equalsIgnoreCase("3")) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new HeroesPrimaryPrompt(context); + case 2: + return new HeroesSecondaryPrompt(context); + case 3: return new RequirementsPrompt(context); + default: + return new RequirementsHeroesListPrompt(context); } - return null; } } - private class HeroesPrimaryPrompt extends StringPrompt { + public class HeroesPrimaryPrompt extends QuestsEditorStringPrompt { + + public HeroesPrimaryPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.DARK_PURPLE + Lang.get("heroesPrimaryTitle") + "\n"; + public String getTitle(ConversationContext context) { + return Lang.get("heroesPrimaryTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqHeroesPrimaryPrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.DARK_PURPLE + getTitle(context) + "\n"; LinkedList list = new LinkedList(); for (HeroClass hc : plugin.getDependencies().getHeroes().getClassManager().getClasses()) { if (hc.isPrimary()) { @@ -1129,44 +1376,61 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { text += ChatColor.DARK_PURPLE + "- " + ChatColor.LIGHT_PURPLE + s + "\n"; } } - text += ChatColor.YELLOW + Lang.get("reqHeroesPrimaryPrompt"); + text += ChatColor.YELLOW + getQueryText(context); return text; } @Override - public Prompt acceptInput(ConversationContext cc, String input) { + public Prompt acceptInput(ConversationContext context, String input) { if (input.equalsIgnoreCase(Lang.get("cmdClear")) == false && input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { HeroClass hc = plugin.getDependencies().getHeroes().getClassManager().getClass(input); if (hc != null) { if (hc.isPrimary()) { - cc.setSessionData(CK.REQ_HEROES_PRIMARY_CLASS, hc.getName()); - return new HeroesPrompt(); + context.setSessionData(CK.REQ_HEROES_PRIMARY_CLASS, hc.getName()); + return new RequirementsHeroesListPrompt(context); } else { String text = Lang.get("reqHeroesNotPrimary"); text = text.replace("", ChatColor.LIGHT_PURPLE + hc.getName() + ChatColor.RED); - cc.getForWhom().sendRawMessage(ChatColor.RED + text); - return new HeroesPrimaryPrompt(); + context.getForWhom().sendRawMessage(ChatColor.RED + text); + return new HeroesPrimaryPrompt(context); } } else { - cc.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqHeroesClassNotFound")); - return new HeroesPrimaryPrompt(); + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqHeroesClassNotFound")); + return new HeroesPrimaryPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { - cc.setSessionData(CK.REQ_HEROES_PRIMARY_CLASS, null); - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqHeroesPrimaryCleared")); - return new HeroesPrompt(); + context.setSessionData(CK.REQ_HEROES_PRIMARY_CLASS, null); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqHeroesPrimaryCleared")); + return new RequirementsHeroesListPrompt(context); } else { - return new HeroesPrompt(); + return new RequirementsHeroesListPrompt(context); } } } - private class HeroesSecondaryPrompt extends StringPrompt { + public class HeroesSecondaryPrompt extends QuestsEditorStringPrompt { + + public HeroesSecondaryPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.DARK_PURPLE + Lang.get("heroesSecondaryTitle") + "\n"; + public String getTitle(ConversationContext context) { + return Lang.get("heroesSecondaryTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqHeroesSecondaryPrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.DARK_PURPLE + getTitle(context) + "\n"; LinkedList list = new LinkedList(); for (HeroClass hc : plugin.getDependencies().getHeroes().getClassManager().getClasses()) { if (hc.isSecondary()) { @@ -1181,35 +1445,35 @@ public class RequirementsPrompt extends QuestsEditorNumericPrompt { text += ChatColor.DARK_PURPLE + "- " + ChatColor.LIGHT_PURPLE + s + "\n"; } } - text += ChatColor.YELLOW + Lang.get("reqHeroesSecondaryPrompt"); + text += ChatColor.YELLOW + getQueryText(context); return text; } @Override - public Prompt acceptInput(ConversationContext cc, String input) { + public Prompt acceptInput(ConversationContext context, String input) { if (input.equalsIgnoreCase(Lang.get("cmdClear")) == false && input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { HeroClass hc = plugin.getDependencies().getHeroes().getClassManager().getClass(input); if (hc != null) { if (hc.isSecondary()) { - cc.setSessionData(CK.REQ_HEROES_SECONDARY_CLASS, hc.getName()); - return new HeroesPrompt(); + context.setSessionData(CK.REQ_HEROES_SECONDARY_CLASS, hc.getName()); + return new RequirementsHeroesListPrompt(context); } else { String text = Lang.get("reqHeroesNotSecondary"); text = text.replace("", ChatColor.LIGHT_PURPLE + hc.getName() + ChatColor.RED); - cc.getForWhom().sendRawMessage(ChatColor.RED + text); - return new HeroesSecondaryPrompt(); + context.getForWhom().sendRawMessage(ChatColor.RED + text); + return new HeroesSecondaryPrompt(context); } } else { - cc.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqHeroesClassNotFound")); - return new HeroesSecondaryPrompt(); + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqHeroesClassNotFound")); + return new HeroesSecondaryPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("clear"))) { - cc.setSessionData(CK.REQ_HEROES_SECONDARY_CLASS, null); - cc.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqHeroesSecondaryCleared")); - return new HeroesPrompt(); + context.setSessionData(CK.REQ_HEROES_SECONDARY_CLASS, null); + context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("reqHeroesSecondaryCleared")); + return new RequirementsHeroesListPrompt(context); } else { - return new HeroesPrompt(); + return new RequirementsHeroesListPrompt(context); } } } diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/rewards/RewardsPrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/rewards/RewardsPrompt.java index 6d2a9e613..990734f9c 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/rewards/RewardsPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/rewards/RewardsPrompt.java @@ -20,7 +20,6 @@ import java.util.Map; import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.FixedSetPrompt; import org.bukkit.conversations.Prompt; import org.bukkit.conversations.StringPrompt; import org.bukkit.inventory.ItemStack; @@ -35,7 +34,9 @@ import me.blackvein.quests.Quests; import me.blackvein.quests.convo.generic.ItemStackPrompt; import me.blackvein.quests.convo.generic.OverridePrompt; import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt; import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.Lang; @@ -370,40 +371,40 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { switch (input.intValue()) { case 1: if (plugin.getDependencies().getVaultEconomy() != null) { - return new MoneyPrompt(); + return new RewardsMoneyPrompt(context); } else { return new RewardsPrompt(context); } case 2: - return new QuestPointsPrompt(); + return new RewardsQuestPointsPrompt(context); case 3: - return new ItemListPrompt(); + return new RewardsItemListPrompt(context); case 4: - return new ExperiencePrompt(); + return new RewardsExperiencePrompt(context); case 5: - return new CommandsPrompt(); + return new RewardsCommandsPrompt(context); case 6: - return new PermissionsListPrompt(context); + return new RewardsPermissionsListPrompt(context); case 7: if (plugin.getDependencies().getMcmmoClassic() != null) { - return new mcMMOListPrompt(); + return new RewardsMcMMOListPrompt(context); } else { return new RewardsPrompt(context); } case 8: if (plugin.getDependencies().getHeroes() != null) { - return new HeroesListPrompt(); + return new RewardsHeroesListPrompt(context); } else { return new RewardsPrompt(context); } case 9: if (plugin.getDependencies().getPhatLoots() != null) { - return new PhatLootsPrompt(); + return new RewardsPhatLootsPrompt(context); } else { return new RewardsPrompt(context); } case 10: - return new CustomRewardsPrompt(); + return new CustomRewardsPrompt(context); case 11: if (hasReward) { return new OverridePrompt.Builder() @@ -438,11 +439,28 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { return false; } - private class MoneyPrompt extends StringPrompt { + public class RewardsMoneyPrompt extends QuestsEditorStringPrompt { + + public RewardsMoneyPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewMoneyPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = Lang.get("rewMoneyPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = getQueryText(context); if (plugin.getDependencies().getVaultEconomy() != null) { text = text.replace("", ChatColor.AQUA + (plugin.getDependencies().getVaultEconomy() .currencyNamePlural().isEmpty() ? Lang.get("money") : plugin.getDependencies().getVaultEconomy() @@ -463,12 +481,12 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { context.setSessionData(CK.REW_MONEY, i); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("inputPosNum")); - return new MoneyPrompt(); + return new RewardsMoneyPrompt(context); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new MoneyPrompt(); + return new RewardsMoneyPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REW_MONEY, null); @@ -478,11 +496,28 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } } - private class ExperiencePrompt extends StringPrompt { + public class RewardsExperiencePrompt extends QuestsEditorStringPrompt { + + public RewardsExperiencePrompt(ConversationContext context) { + super(context); + } + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewExperiencePrompt"); + } + @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("rewExperiencePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -495,12 +530,12 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { context.setSessionData(CK.REW_EXP, i); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("inputPosNum")); - return new ExperiencePrompt(); + return new RewardsExperiencePrompt(context); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new ExperiencePrompt(); + return new RewardsExperiencePrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REW_EXP, null); @@ -510,11 +545,28 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } } - private class QuestPointsPrompt extends StringPrompt { + public class RewardsQuestPointsPrompt extends QuestsEditorStringPrompt { + + public RewardsQuestPointsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewQuestPointsPrompt").replace("", Lang.get("questPoints")); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("rewQuestPointsPrompt").replace("", Lang.get("questPoints")); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -527,12 +579,12 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { context.setSessionData(CK.REW_QUEST_POINTS, i); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("inputPosNum")); - return new QuestPointsPrompt(); + return new RewardsQuestPointsPrompt(context); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new QuestPointsPrompt(); + return new RewardsQuestPointsPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REW_QUEST_POINTS, null); @@ -542,18 +594,76 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } } - private class ItemListPrompt extends FixedSetPrompt { + public class RewardsItemListPrompt extends QuestsEditorNumericPrompt { - public ItemListPrompt() { - super("1", "2", "3"); + public RewardsItemListPrompt(ConversationContext context) { + super(context); + } + + private final int size = 3; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("itemRewardsTitle"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + return ChatColor.BLUE; + case 2: + return ChatColor.RED; + case 3: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("stageEditorDeliveryAddItem"); + case 2: + return ChatColor.RED + Lang.get("clear"); + case 3: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(CK.REW_ITEMS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (ItemStack is : (List) context.getSessionData(CK.REW_ITEMS)) { + text += ChatColor.GRAY + "- " + ItemUtil.getDisplayString(is) + "\n"; + } + return text; + } + case 2: + case 3: + return ""; + default: + return null; + } } + @SuppressWarnings("unchecked") @Override public String getPromptText(ConversationContext context) { // Check/add newly made item if (context.getSessionData("newItem") != null) { if (context.getSessionData(CK.REW_ITEMS) != null) { - List itemRews = getItems(context); + List itemRews = (List) context.getSessionData(CK.REW_ITEMS); itemRews.add((ItemStack) context.getSessionData("tempStack")); context.setSessionData(CK.REW_ITEMS, itemRews); } else { @@ -564,54 +674,57 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { context.setSessionData("newItem", null); context.setSessionData("tempStack", null); } - String text = ChatColor.GOLD + Lang.get("itemRewardsTitle") + "\n"; - if (context.getSessionData(CK.REW_ITEMS) == null) { - text += ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorDeliveryAddItem") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); - } else { - for (ItemStack is : getItems(context)) { - text += ChatColor.GRAY + "- " + ItemUtil.getDisplayString(is) + "\n"; - } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorDeliveryAddItem") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); + + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } return text; } - + @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new ItemStackPrompt(ItemListPrompt.this); - } else if (input.equalsIgnoreCase("2")) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new ItemStackPrompt(RewardsItemListPrompt.this); + case 2: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewItemsCleared")); context.setSessionData(CK.REW_ITEMS, null); - return new ItemListPrompt(); - } else if (input.equalsIgnoreCase("3")) { + return new RewardsItemListPrompt(context); + case 3: return new RewardsPrompt(context); + default: + return new RewardsItemListPrompt(context); } - return null; - } - - @SuppressWarnings("unchecked") - private List getItems(ConversationContext context) { - return (List) context.getSessionData(CK.REW_ITEMS); } } - private class CommandsPrompt extends StringPrompt { + public class RewardsCommandsPrompt extends QuestsEditorStringPrompt { + + public RewardsCommandsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewCommandPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String lang1 = Lang.get("rewCommandPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String lang1 = getQueryText(context); lang1 = lang1.replace("", ChatColor.BOLD + "" + ChatColor.RED + "comma" + ChatColor.RESET + ChatColor.YELLOW); String lang2 = Lang.get("rewCommandPromptHint"); @@ -638,9 +751,9 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } } - private class PermissionsListPrompt extends QuestsEditorNumericPrompt { + public class RewardsPermissionsListPrompt extends QuestsEditorNumericPrompt { - public PermissionsListPrompt(ConversationContext context) { + public RewardsPermissionsListPrompt(ConversationContext context) { super(context); } @@ -750,14 +863,14 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { protected Prompt acceptValidatedInput(ConversationContext context, Number input) { switch (input.intValue()) { case 1: - return new PermissionsPrompt(); + return new PermissionsPrompt(context); case 2: - return new PermissionsWorldsPrompt(); + return new PermissionsWorldsPrompt(context); case 3: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewPermissionsCleared")); context.setSessionData(CK.REW_PERMISSION, null); context.setSessionData(CK.REW_PERMISSION_WORLDS, null); - return new PermissionsListPrompt(context); + return new RewardsPermissionsListPrompt(context); case 4: return new RewardsPrompt(context); default: @@ -767,11 +880,28 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } - private class PermissionsPrompt extends StringPrompt { + public class PermissionsPrompt extends QuestsEditorStringPrompt { + + public PermissionsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewPermissionsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("rewPermissionsPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -785,15 +915,32 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REW_PERMISSION, null); } - return new PermissionsListPrompt(context); + return new RewardsPermissionsListPrompt(context); } } - private class PermissionsWorldsPrompt extends StringPrompt { + public class PermissionsWorldsPrompt extends QuestsEditorStringPrompt { + + public PermissionsWorldsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewPermissionsWorldPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("rewPermissionsWorldPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -807,77 +954,124 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { if (!w.equals("null") && w != null && context.getPlugin().getServer().getWorld(w) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + w + " " + Lang.get("eventEditorInvalidWorld")); - return new PermissionsWorldsPrompt(); + return new PermissionsWorldsPrompt(context); } } context.setSessionData(CK.REW_PERMISSION_WORLDS, worlds); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REW_PERMISSION_WORLDS, null); } - return new PermissionsListPrompt(context); + return new RewardsPermissionsListPrompt(context); } } - private class mcMMOListPrompt extends FixedSetPrompt { + public class RewardsMcMMOListPrompt extends QuestsEditorNumericPrompt { - public mcMMOListPrompt() { - super("1", "2", "3", "4"); + public RewardsMcMMOListPrompt(ConversationContext context) { + super(context); + } + + private final int size = 4; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("mcMMORewardsTitle"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.RED; + case 4: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("reqSetSkills"); + case 2: + return ChatColor.YELLOW + Lang.get("reqSetSkillAmounts"); + case 3: + return ChatColor.RED + Lang.get("clear"); + case 4: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(CK.REW_MCMMO_SKILLS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (String s : (List) context.getSessionData(CK.REW_MCMMO_SKILLS)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n"; + } + return text; + } + case 2: + if (context.getSessionData(CK.REW_MCMMO_AMOUNTS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (Integer i : (List) context.getSessionData(CK.REW_MCMMO_AMOUNTS)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n"; + } + return text; + } + case 3: + return ""; + default: + return null; + } } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + Lang.get("mcMMORewardsTitle") + "\n"; - if (context.getSessionData(CK.REW_MCMMO_SKILLS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("reqSetSkills") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("reqSetSkillAmounts") + " (" + Lang.get("rewNoMcMMOSkills") + ")\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("reqSetSkills") + "\n"; - for (String s : getSkills(context)) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n"; - } - if (context.getSessionData(CK.REW_MCMMO_AMOUNTS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("reqSetSkillAmounts") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("reqSetSkillAmounts") + "\n"; - for (Integer i : getSkillAmounts(context)) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n"; - } - } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } return text; } - + @SuppressWarnings("unchecked") @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new mcMMOSkillsPrompt(); - } else if (input.equalsIgnoreCase("2")) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new McMMOSkillsPrompt(context); + case 2: if (context.getSessionData(CK.REW_MCMMO_SKILLS) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("rewSetMcMMOSkillsFirst")); - return new mcMMOListPrompt(); + return new RewardsMcMMOListPrompt(context); } else { - return new mcMMOAmountsPrompt(); + return new McMMOAmountsPrompt(context); } - } else if (input.equalsIgnoreCase("3")) { + case 3: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewMcMMOCleared")); context.setSessionData(CK.REW_MCMMO_SKILLS, null); context.setSessionData(CK.REW_MCMMO_AMOUNTS, null); - return new mcMMOListPrompt(); - } else if (input.equalsIgnoreCase("4")) { + return new RewardsMcMMOListPrompt(context); + case 4: int one; int two; if (context.getSessionData(CK.REW_MCMMO_SKILLS) != null) { @@ -894,28 +1088,36 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { return new RewardsPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("rewMcMMOListsNotSameSize")); - return new mcMMOListPrompt(); + return new RewardsMcMMOListPrompt(context); } + default: + return new RewardsMcMMOListPrompt(context); } - return null; - } - - @SuppressWarnings("unchecked") - private List getSkills(ConversationContext context) { - return (List) context.getSessionData(CK.REW_MCMMO_SKILLS); - } - - @SuppressWarnings("unchecked") - private List getSkillAmounts(ConversationContext context) { - return (List) context.getSessionData(CK.REW_MCMMO_AMOUNTS); } } - private class mcMMOSkillsPrompt extends StringPrompt { + public class McMMOSkillsPrompt extends QuestsEditorStringPrompt { + + public McMMOSkillsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("skillListTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewMcMMOPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String skillList = ChatColor.DARK_GREEN + Lang.get("skillListTitle") + "\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String skillList = ChatColor.DARK_GREEN + getTitle(context) + "\n"; SkillType[] skills = SkillType.values(); for (int i = 0; i < skills.length; i++) { if (i == (skills.length - 1)) { @@ -924,7 +1126,7 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { skillList += ChatColor.GREEN + skills[i].getName() + "\n\n"; } } - return skillList + ChatColor.YELLOW + Lang.get("rewMcMMOPrompt"); + return skillList + ChatColor.YELLOW + getQueryText(context); } @Override @@ -938,26 +1140,43 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { skills.add(MiscUtil.getCapitalized(s)); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listDuplicate")); - return new mcMMOSkillsPrompt(); + return new McMMOSkillsPrompt(context); } } else { String text = Lang.get("reqMcMMOError"); text = text.replace("", ChatColor.LIGHT_PURPLE + s + ChatColor.RED); context.getForWhom().sendRawMessage(ChatColor.RED + text); - return new mcMMOSkillsPrompt(); + return new McMMOSkillsPrompt(context); } } context.setSessionData(CK.REW_MCMMO_SKILLS, skills); } - return new mcMMOListPrompt(); + return new RewardsMcMMOListPrompt(context); } } - private class mcMMOAmountsPrompt extends StringPrompt { + public class McMMOAmountsPrompt extends QuestsEditorStringPrompt { + + public McMMOAmountsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("reqMcMMOAmountsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("reqMcMMOAmountsPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -972,75 +1191,123 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { String text = Lang.get("reqNotANumber"); text = text.replace("", ChatColor.LIGHT_PURPLE + s + ChatColor.RED); context.getForWhom().sendRawMessage(ChatColor.RED + text); - return new mcMMOAmountsPrompt(); + return new McMMOAmountsPrompt(context); } } context.setSessionData(CK.REW_MCMMO_AMOUNTS, amounts); } - return new mcMMOListPrompt(); + return new RewardsMcMMOListPrompt(context); } } - private class HeroesListPrompt extends FixedSetPrompt { + public class RewardsHeroesListPrompt extends QuestsEditorNumericPrompt { - public HeroesListPrompt() { - super("1", "2", "3", "4"); + public RewardsHeroesListPrompt(ConversationContext context) { + super(context); + } + + private final int size = 4; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("heroesRewardsTitle"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.RED; + case 4: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("rewSetHeroesClasses"); + case 2: + return ChatColor.YELLOW + Lang.get("rewSetHeroesAmounts"); + case 3: + return ChatColor.RED + Lang.get("clear"); + case 4: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(CK.REW_HEROES_CLASSES) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (String s : (List) context.getSessionData(CK.REW_HEROES_CLASSES)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n"; + } + return text; + } + case 2: + if (context.getSessionData(CK.REW_HEROES_AMOUNTS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (Double d : (List) context.getSessionData(CK.REW_HEROES_AMOUNTS)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + d + "\n"; + } + return text; + } + case 3: + case 4: + return ""; + default: + return null; + } } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + Lang.get("heroesRewardsTitle") + "\n"; - if (context.getSessionData(CK.REW_HEROES_CLASSES) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("rewSetHeroesClasses") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("rewSetHeroesAmounts") + "(" + Lang.get("rewNoHeroesClasses") + ")\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("rewSetHeroesClasses") + "\n"; - for (String s : getClasses(context)) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n"; - } - if (context.getSessionData(CK.REW_HEROES_AMOUNTS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("rewSetHeroesAmounts") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("rewSetHeroesAmounts") + "\n"; - for (Double d : getClassAmounts(context)) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + d + "\n"; - } - } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } return text; } - + @SuppressWarnings("unchecked") @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new HeroesClassesPrompt(); - } else if (input.equalsIgnoreCase("2")) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new HeroesClassesPrompt(context); + case 2: if (context.getSessionData(CK.REW_HEROES_CLASSES) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("rewSetHeroesClassesFirst")); - return new HeroesListPrompt(); + return new RewardsHeroesListPrompt(context); } else { - return new HeroesExperiencePrompt(); + return new HeroesExperiencePrompt(context); } - } else if (input.equalsIgnoreCase("3")) { + case 3: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewHeroesCleared")); context.setSessionData(CK.REW_HEROES_CLASSES, null); context.setSessionData(CK.REW_HEROES_AMOUNTS, null); - return new HeroesListPrompt(); - } else if (input.equalsIgnoreCase("4")) { + return new RewardsHeroesListPrompt(context); + case 4: int one; int two; if (context.getSessionData(CK.REW_HEROES_CLASSES) != null) { @@ -1057,28 +1324,36 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { return new RewardsPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("rewHeroesListsNotSameSize")); - return new HeroesListPrompt(); + return new RewardsHeroesListPrompt(context); } + default: + return new RewardsHeroesListPrompt(context); } - return null; - } - - @SuppressWarnings("unchecked") - private List getClasses(ConversationContext context) { - return (List) context.getSessionData(CK.REW_HEROES_CLASSES); - } - - @SuppressWarnings("unchecked") - private List getClassAmounts(ConversationContext context) { - return (List) context.getSessionData(CK.REW_HEROES_AMOUNTS); } } - private class HeroesClassesPrompt extends StringPrompt { + public class HeroesClassesPrompt extends QuestsEditorStringPrompt { + + public HeroesClassesPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.DARK_PURPLE + Lang.get("heroesClassesTitle") + "\n"; + public String getTitle(ConversationContext context) { + return Lang.get("heroesClassesTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewHeroesClassesPrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.DARK_PURPLE + getTitle(context) + "\n"; List list = new LinkedList(); for (HeroClass hc : plugin.getDependencies().getHeroes().getClassManager().getClasses()) { list.add(hc.getName()); @@ -1092,12 +1367,12 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } text = text.substring(0, text.length() - 2) + "\n"; } - text += ChatColor.YELLOW + Lang.get("rewHeroesClassesPrompt"); + text += ChatColor.YELLOW + getQueryText(context); return text; } @Override - public Prompt acceptInput(ConversationContext cc, String input) { + public Prompt acceptInput(ConversationContext context, String input) { if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { String[] arr = input.split(" "); List classes = new LinkedList(); @@ -1106,31 +1381,48 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { if (hc == null) { String text = Lang.get("rewHeroesInvalidClass"); text = text.replace("", ChatColor.LIGHT_PURPLE + s + ChatColor.RED); - cc.getForWhom().sendRawMessage(ChatColor.RED + text); - return new HeroesClassesPrompt(); + context.getForWhom().sendRawMessage(ChatColor.RED + text); + return new HeroesClassesPrompt(context); } else { classes.add(hc.getName()); } } - cc.setSessionData(CK.REW_HEROES_CLASSES, classes); - return new HeroesListPrompt(); + context.setSessionData(CK.REW_HEROES_CLASSES, classes); + return new RewardsHeroesListPrompt(context); } else { - return new HeroesListPrompt(); + return new RewardsHeroesListPrompt(context); } } } - private class HeroesExperiencePrompt extends StringPrompt { + public class HeroesExperiencePrompt extends QuestsEditorStringPrompt { + + public HeroesExperiencePrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - String text = Lang.get("heroesExperienceTitle") + "\n"; - text += ChatColor.YELLOW + Lang.get("rewHeroesExperiencePrompt"); + public String getTitle(ConversationContext context) { + return Lang.get("heroesExperienceTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewHeroesExperiencePrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = getTitle(context) + "\n"; + text += ChatColor.YELLOW + getQueryText(context); return text; } @Override - public Prompt acceptInput(ConversationContext cc, String input) { + public Prompt acceptInput(ConversationContext context, String input) { if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { String[] arr = input.split(" "); List amounts = new LinkedList(); @@ -1141,27 +1433,44 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } catch (NumberFormatException nfe) { String text = Lang.get("reqNotANumber"); text = text.replace("", ChatColor.LIGHT_PURPLE + s + ChatColor.RED); - cc.getForWhom().sendRawMessage(ChatColor.RED + text); - return new HeroesExperiencePrompt(); + context.getForWhom().sendRawMessage(ChatColor.RED + text); + return new HeroesExperiencePrompt(context); } } - cc.setSessionData(CK.REW_HEROES_AMOUNTS, amounts); - return new HeroesListPrompt(); + context.setSessionData(CK.REW_HEROES_AMOUNTS, amounts); + return new RewardsHeroesListPrompt(context); } else { - return new HeroesListPrompt(); + return new RewardsHeroesListPrompt(context); } } } - private class PhatLootsPrompt extends StringPrompt { + public class RewardsPhatLootsPrompt extends QuestsEditorStringPrompt { + + public RewardsPhatLootsPrompt(ConversationContext context) { + super(context); + } @Override - public String getPromptText(ConversationContext cc) { - String text = ChatColor.DARK_AQUA + Lang.get("phatLootsRewardsTitle") + "\n"; + public String getTitle(ConversationContext context) { + return Lang.get("phatLootsRewardsTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewPhatLootsPrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.DARK_AQUA + getTitle(context) + "\n"; for (PhatLoot pl : PhatLootsAPI.getAllPhatLoots()) { text += ChatColor.GRAY + "- " + ChatColor.BLUE + pl.name + "\n"; } - text += ChatColor.YELLOW + Lang.get("rewPhatLootsPrompt"); + text += ChatColor.YELLOW + getQueryText(context); return text; } @@ -1176,7 +1485,7 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { String text = Lang.get("rewPhatLootsInvalid"); text = text.replace("", ChatColor.DARK_RED + s + ChatColor.RED); context.getForWhom().sendRawMessage(ChatColor.RED + text); - return new PhatLootsPrompt(); + return new RewardsPhatLootsPrompt(context); } } loots.addAll(Arrays.asList(arr)); @@ -1192,11 +1501,28 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } } - private class CustomRewardsPrompt extends StringPrompt { + public class CustomRewardsPrompt extends QuestsEditorStringPrompt { + + public CustomRewardsPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("customRewardsTitle"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("rewCustomRewardPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.LIGHT_PURPLE + Lang.get("customRewardsTitle") + "\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"; if (plugin.getCustomRewards().isEmpty()) { text += ChatColor.DARK_PURPLE + "(" + Lang.get("stageEditorNoModules") + ") "; } else { @@ -1204,7 +1530,7 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { text += ChatColor.DARK_PURPLE + " - " + cr.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("rewCustomRewardPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @SuppressWarnings("unchecked") @@ -1244,7 +1570,7 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } else { // Already added, so inform user context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewCustomAlreadyAdded")); - return new CustomRewardsPrompt(); + return new CustomRewardsPrompt(context); } } else { // The custom reward hasn't been added yet, so let's do it @@ -1262,7 +1588,7 @@ public class RewardsPrompt extends QuestsEditorNumericPrompt { } } else { context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewCustomNotFound")); - return new CustomRewardsPrompt(); + return new CustomRewardsPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.REW_CUSTOM, null); diff --git a/main/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java b/main/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java index de74bd31c..f14669f1d 100644 --- a/main/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java @@ -24,7 +24,6 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.FixedSetPrompt; import org.bukkit.conversations.Prompt; import org.bukkit.conversations.StringPrompt; import org.bukkit.entity.Player; @@ -34,11 +33,13 @@ import me.blackvein.quests.Quests; import me.blackvein.quests.actions.Action; import me.blackvein.quests.convo.generic.OverridePrompt; import me.blackvein.quests.convo.quests.QuestsEditorNumericPrompt; +import me.blackvein.quests.convo.quests.QuestsEditorStringPrompt; import me.blackvein.quests.convo.quests.objectives.BlocksPrompt; import me.blackvein.quests.convo.quests.objectives.ItemsPrompt; import me.blackvein.quests.convo.quests.objectives.MobsPrompt; import me.blackvein.quests.convo.quests.objectives.NpcsPrompt; import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.quests.QuestsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ConfigUtil; import me.blackvein.quests.util.Lang; @@ -439,23 +440,23 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { case 4: return new MobsPrompt(stageNum, context); case 5: - return new KillPlayerPrompt(); + return new KillPlayerPrompt(context); case 6: - return new ReachListPrompt(); + return new ReachListPrompt(context); case 7: - return new PasswordListPrompt(); + return new PasswordListPrompt(context); case 8: - return new CustomObjectivesPrompt(); + return new CustomObjectivesPrompt(context); case 9: if (hasObjective) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidOption")); return new StageMainPrompt(stageNum, context); } case 10: if (hasObjective) { - return new DelayPrompt(); + return new DelayPrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidOption")); return new StageMainPrompt(stageNum, context); @@ -465,18 +466,18 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoDelaySet")); return new StageMainPrompt(stageNum, context); } else { - return new DelayMessagePrompt(); + return new DelayMessagePrompt(context); } case 12: if (hasObjective) { - return new StartMessagePrompt(); + return new StartMessagePrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidOption")); return new StageMainPrompt(stageNum, context); } case 13: if (hasObjective) { - return new CompleteMessagePrompt(); + return new CompleteMessagePrompt(context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidOption")); return new StageMainPrompt(stageNum, context); @@ -492,7 +493,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { return new StageMainPrompt(stageNum, context); } case 15: - return new DeletePrompt(); + return new DeletePrompt(context); case 16: return new StageMenuPrompt(context); default: @@ -528,168 +529,29 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { } return false; } - - private class PasswordListPrompt extends FixedSetPrompt { - - public PasswordListPrompt() { - super("1", "2", "3", "4"); + + public class KillPlayerPrompt extends QuestsEditorStringPrompt { + + public KillPlayerPrompt(ConversationContext context) { + super(context); } @Override - public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + "- " + Lang.get("stageEditorPassword") + "-\n"; - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorAddPasswordDisplay") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("stageEditorAddPasswordPhrases") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorAddPasswordDisplay") + "\n"; - for (String display : getPasswordDisplays(context)) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + display + "\n"; - } - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.BLUE + " - " - + Lang.get("stageEditorAddPasswordPhrases") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorAddPasswordPhrases") + "\n"; - for (LinkedList phraseList : getPasswordPhrases(context)) { - text += ChatColor.GRAY + " - "; - for (String s : phraseList) { - if (phraseList.getLast().equals(s) == false) { - text += ChatColor.DARK_AQUA + s + ChatColor.GRAY + "|"; - } else { - text += ChatColor.DARK_AQUA + s + "\n"; - } - } - } - } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); - } - return text; - } - - @SuppressWarnings("unchecked") - @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new PasswordDisplayPrompt(); - } else if (input.equalsIgnoreCase("2")) { - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) == null) { - context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorMustSetPasswordDisplays")); - return new PasswordListPrompt(); - } else { - return new PasswordPhrasePrompt(); - } - } else if (input.equalsIgnoreCase("3")) { - context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorObjectiveCleared")); - context.setSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS, null); - context.setSessionData(stagePrefix + CK.S_PASSWORD_PHRASES, null); - return new PasswordListPrompt(); - } else if (input.equalsIgnoreCase("4")) { - int one; - int two; - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) != null) { - one = ((List) context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS)).size(); - } else { - one = 0; - } - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES) != null) { - two = ((LinkedList>) context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES)) - .size(); - } else { - two = 0; - } - if (one == two) { - return new StageMainPrompt(stageNum, context); - } else { - context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listsNotSameSize")); - return new PasswordListPrompt(); - } - } + public String getTitle(ConversationContext context) { return null; } - @SuppressWarnings("unchecked") - private List getPasswordDisplays(ConversationContext context) { - return (List) context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS); + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorKillPlayerPrompt"); } - @SuppressWarnings("unchecked") - private LinkedList> getPasswordPhrases(ConversationContext context) { - return (LinkedList>) context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES); - } - } - - private class PasswordDisplayPrompt extends StringPrompt { - @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorPasswordDisplayPrompt") + "\n"; - } - - @Override - public Prompt acceptInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) != null) { - @SuppressWarnings("unchecked") - List displays = (List) context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS); - displays.add(input); - context.setSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS, displays); - } else { - List displays = new LinkedList(); - displays.add(input); - context.setSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS, displays); - } - } - return new PasswordListPrompt(); - } - } - - private class PasswordPhrasePrompt extends StringPrompt { - - @Override - public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorPasswordPhrasePrompt") + "\n"; - } - - @Override - public Prompt acceptInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { - if (context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES) != null) { - @SuppressWarnings("unchecked") - LinkedList> phrases - = (LinkedList>) context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES); - LinkedList newPhrases = new LinkedList(); - newPhrases.addAll(Arrays.asList(input.split(Lang.get("charSemi")))); - phrases.add(newPhrases); - context.setSessionData(stagePrefix + CK.S_PASSWORD_PHRASES, phrases); - } else { - LinkedList> phrases = new LinkedList>(); - LinkedList newPhrases = new LinkedList(); - newPhrases.addAll(Arrays.asList(input.split(Lang.get("charSemi")))); - phrases.add(newPhrases); - context.setSessionData(stagePrefix + CK.S_PASSWORD_PHRASES, phrases); - } - } - return new PasswordListPrompt(); - } - } - - private class KillPlayerPrompt extends StringPrompt { - - @Override - public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorKillPlayerPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -700,14 +562,14 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { int i = Integer.parseInt(input); if (i < 0) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorPositiveAmount")); - return new KillPlayerPrompt(); + return new KillPlayerPrompt(context); } else if (i > 0) { context.setSessionData(stagePrefix + CK.S_PLAYER_KILL, i); } } catch (NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") .replace("", input)); - return new KillPlayerPrompt(); + return new KillPlayerPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_PLAYER_KILL, null); @@ -715,90 +577,140 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { return new StageMainPrompt(stageNum, context); } } + + public class ReachListPrompt extends QuestsEditorNumericPrompt { - private class ReachListPrompt extends FixedSetPrompt { - - public ReachListPrompt() { - super("1", "2", "3", "4", "5"); + public ReachListPrompt(ConversationContext context) { + super(context); } - - @Override - public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + "- " + Lang.get("stageEditorReachLocs") + " -\n"; - if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorSetLocations") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("stageEditorSetLocationRadii") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("stageEditorSetLocationNames") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "5" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorSetLocations") + "\n"; - for (String s : getLocations(context)) { - text += ChatColor.GRAY + " - " + ChatColor.DARK_AQUA + s + "\n"; - } - if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.BLUE + " - " - + Lang.get("stageEditorSetLocationRadii") + " (" + Lang.get("noneSet") + ")\n"; + + private final int size = 5; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorReachLocs"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + case 3: + return ChatColor.BLUE; + case 4: + return ChatColor.RED; + case 5: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("stageEditorSetLocations"); + case 2: + return ChatColor.YELLOW + Lang.get("stageEditorSetLocationRadii"); + case 3: + return ChatColor.YELLOW + Lang.get("stageEditorSetLocationNames"); + case 4: + return ChatColor.RED + Lang.get("clear"); + case 5: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorSetLocationRadii") + "\n"; - for (Integer i : getLocationRadii(context)) { + String text = "\n"; + for (String s : (List) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS)) { + text += ChatColor.GRAY + " - " + ChatColor.DARK_AQUA + s + "\n"; + } + return text; + } + case 2: + if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (Integer i : (List) context + .getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS)) { text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n"; } + return text; } + case 3: if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " - + Lang.get("stageEditorSetLocationNames") + " (" + Lang.get("noneSet") + ")\n"; + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorSetLocationNames") + "\n"; - for (String s : getLocationNames(context)) { + String text = "\n"; + for (String s : (List) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES)) { text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n"; } + return text; } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("clear") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "5" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("done"); + case 4: + case 5: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } return text; } - + @SuppressWarnings("unchecked") @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: Map temp = plugin.getQuestFactory().getSelectedReachLocations(); temp.put(((Player) context.getForWhom()).getUniqueId(), null); plugin.getQuestFactory().setSelectedReachLocations(temp); - return new ReachLocationPrompt(); - } else if (input.equalsIgnoreCase("2")) { + return new ReachLocationPrompt(context); + case 2: if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoLocations")); - return new ReachListPrompt(); + return new ReachListPrompt(context); } else { - return new ReachRadiiPrompt(); + return new ReachRadiiPrompt(context); } - } else if (input.equalsIgnoreCase("3")) { + case 3: if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoLocations")); - return new ReachListPrompt(); + return new ReachListPrompt(context); } else { - return new ReachNamesPrompt(); + return new ReachNamesPrompt(context); } - } else if (input.equalsIgnoreCase("4")) { + case 4: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorObjectiveCleared")); context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS, null); context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS, null); context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES, null); - return new ReachListPrompt(); - } else if (input.equalsIgnoreCase("5")) { + return new ReachListPrompt(context); + case 5: int one; int two; int three; @@ -821,34 +733,36 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { return new StageMainPrompt(stageNum, context); } else { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listsNotSameSize")); - return new ReachListPrompt(); + return new ReachListPrompt(context); } - } else { - return new ReachListPrompt(); + default: + return new StageMainPrompt(stageNum, context); } } - - @SuppressWarnings("unchecked") - private List getLocations(ConversationContext context) { - return (List) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS); - } - - @SuppressWarnings("unchecked") - private List getLocationRadii(ConversationContext context) { - return (List) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS); - } - - @SuppressWarnings("unchecked") - private List getLocationNames(ConversationContext context) { - return (List) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES); - } } - private class ReachLocationPrompt extends StringPrompt { + public class ReachLocationPrompt extends QuestsEditorStringPrompt { + + public ReachLocationPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorReachLocationPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorReachLocationPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @SuppressWarnings("unchecked") @@ -872,25 +786,42 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { plugin.getQuestFactory().setSelectedReachLocations(temp); } else { player.sendMessage(ChatColor.RED + Lang.get("stageEditorNoBlockSelected")); - return new ReachLocationPrompt(); + return new ReachLocationPrompt(context); } - return new ReachListPrompt(); + return new ReachListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { Map temp = plugin.getQuestFactory().getSelectedReachLocations(); temp.remove(player.getUniqueId()); plugin.getQuestFactory().setSelectedReachLocations(temp); - return new ReachListPrompt(); + return new ReachListPrompt(context); } else { - return new ReachLocationPrompt(); + return new ReachLocationPrompt(context); } } } - private class ReachRadiiPrompt extends StringPrompt { + public class ReachRadiiPrompt extends QuestsEditorStringPrompt { + + public ReachRadiiPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorReachLocationRadiiPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorReachLocationRadiiPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -904,25 +835,42 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (i < 1) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidMinimum") .replace("", "1")); - return new ReachRadiiPrompt(); + return new ReachRadiiPrompt(context); } radii.add(i); } catch (NumberFormatException e) { player.sendMessage(ChatColor.RED + Lang.get("reqNotANumber").replace("", input)); - return new ReachRadiiPrompt(); + return new ReachRadiiPrompt(context); } } context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS, radii); } - return new ReachListPrompt(); + return new ReachListPrompt(context); } } - private class ReachNamesPrompt extends StringPrompt { + public class ReachNamesPrompt extends QuestsEditorStringPrompt { + + public ReachNamesPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorReachLocationNamesPrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorReachLocationNamesPrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -932,115 +880,421 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { locNames.addAll(Arrays.asList(input.split(Lang.get("charSemi")))); context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES, locNames); } - return new ReachListPrompt(); + return new ReachListPrompt(context); } } - private class ActionListPrompt extends FixedSetPrompt { + public class PasswordListPrompt extends QuestsEditorNumericPrompt { - public ActionListPrompt() { - super("1", "2", "3", "4", "5", "6", "7"); + public PasswordListPrompt(ConversationContext context) { + super(context); + } + + private final int size = 4; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorPassword"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.RED; + case 4: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("stageEditorAddPasswordDisplay"); + case 2: + return ChatColor.YELLOW + Lang.get("stageEditorAddPasswordPhrases"); + case 3: + return ChatColor.RED + Lang.get("clear"); + case 4: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (String display : (List) context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS)) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + display + "\n"; + } + return text; + } + case 2: + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES) == null) { + return ChatColor.GRAY + " (" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + for (LinkedList phraseList : (LinkedList>) context + .getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES)) { + text += ChatColor.GRAY + " - "; + for (String s : phraseList) { + if (phraseList.getLast().equals(s) == false) { + text += ChatColor.DARK_AQUA + s + ChatColor.GRAY + "|"; + } else { + text += ChatColor.DARK_AQUA + s + "\n"; + } + } + } + return text; + } + case 3: + case 4: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; + } + return text; } @SuppressWarnings("unchecked") @Override - public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorStageEvents") + " -\n"; - if (context.getSessionData(stagePrefix + CK.S_START_EVENT) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorStartEvent") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorStartEvent") + " (" + ChatColor.AQUA - + ((String) context.getSessionData(stagePrefix + CK.S_START_EVENT)) + ChatColor.YELLOW + ")\n"; - } - if (context.getSessionData(stagePrefix + CK.S_FINISH_EVENT) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorFinishEvent") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorFinishEvent") + " (" + ChatColor.AQUA - + ((String) context.getSessionData(stagePrefix + CK.S_FINISH_EVENT)) + ChatColor.YELLOW + ")\n"; - } - if (context.getSessionData(stagePrefix + CK.S_DEATH_EVENT) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorDeathEvent") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorDeathEvent") + " (" + ChatColor.AQUA - + ((String) context.getSessionData(stagePrefix + CK.S_DEATH_EVENT)) + ChatColor.YELLOW + ")\n"; - } - if (context.getSessionData(stagePrefix + CK.S_DISCONNECT_EVENT) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorDisconnectEvent") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorDisconnectEvent") + " (" + ChatColor.AQUA - + ((String) context.getSessionData(stagePrefix + CK.S_DISCONNECT_EVENT)) + ChatColor.YELLOW + ")\n"; - } - if (context.getSessionData(stagePrefix + CK.S_CHAT_EVENTS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "5" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorChatEvents") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "5" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorChatEvents") + "\n"; - LinkedList chatEvents = (LinkedList) context.getSessionData(stagePrefix + CK.S_CHAT_EVENTS); - LinkedList chatEventTriggers - = (LinkedList) context.getSessionData(stagePrefix + CK.S_CHAT_EVENT_TRIGGERS); - for (String event : chatEvents) { - text += ChatColor.AQUA + " - " + event + ChatColor.BLUE + " (" - + Lang.get("stageEditorTriggeredBy") + ": \"" - + chatEventTriggers.get(chatEvents.indexOf(event)) + "\")\n"; + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new PasswordDisplayPrompt(context); + case 2: + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) == null) { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorMustSetPasswordDisplays")); + return new PasswordListPrompt(context); + } else { + return new PasswordPhrasePrompt(context); } - } - if (context.getSessionData(stagePrefix + CK.S_COMMAND_EVENTS) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "6" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorCommandEvents") + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "6" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("stageEditorCommandEvents") + "\n"; - LinkedList commandEvents - = (LinkedList) context.getSessionData(stagePrefix + CK.S_COMMAND_EVENTS); - LinkedList commandEventTriggers - = (LinkedList) context.getSessionData(stagePrefix + CK.S_COMMAND_EVENT_TRIGGERS); - for (String event : commandEvents) { - text += ChatColor.AQUA + " - " + event + ChatColor.BLUE + " (" - + Lang.get("stageEditorTriggeredBy") + ": \"" - + commandEventTriggers.get(commandEvents.indexOf(event)) + "\")\n"; + case 3: + context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorObjectiveCleared")); + context.setSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS, null); + context.setSessionData(stagePrefix + CK.S_PASSWORD_PHRASES, null); + return new PasswordListPrompt(context); + case 4: + int one; + int two; + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) != null) { + one = ((List) context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS)).size(); + } else { + one = 0; } - } - text += ChatColor.GREEN + "" + ChatColor.BOLD + "7" + ChatColor.RESET + ChatColor.BLUE + " - " - + Lang.get("done"); - return text; - } - - @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new StartActionPrompt(); - } else if (input.equalsIgnoreCase("2")) { - return new FinishActionPrompt(); - } else if (input.equalsIgnoreCase("3")) { - return new DeathActionPrompt(); - } else if (input.equalsIgnoreCase("4")) { - return new DisconnectActionPrompt(); - } else if (input.equalsIgnoreCase("5")) { - return new ChatActionPrompt(); - } else if (input.equalsIgnoreCase("6")) { - return new CommandActionPrompt(); - } else if (input.equalsIgnoreCase("7")) { + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES) != null) { + two = ((LinkedList>) context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES)) + .size(); + } else { + two = 0; + } + if (one == two) { + return new StageMainPrompt(stageNum, context); + } else { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("listsNotSameSize")); + return new PasswordListPrompt(context); + } + default: return new StageMainPrompt(stageNum, context); - } else { - return new ActionListPrompt(); } } } - private class StartActionPrompt extends StringPrompt { + public class PasswordDisplayPrompt extends QuestsEditorStringPrompt { + + public PasswordDisplayPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorPasswordDisplayPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorStartEvent") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context) + "\n"; + } + + @Override + public Prompt acceptInput(ConversationContext context, String input) { + if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS) != null) { + @SuppressWarnings("unchecked") + List displays = (List) context.getSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS); + displays.add(input); + context.setSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS, displays); + } else { + List displays = new LinkedList(); + displays.add(input); + context.setSessionData(stagePrefix + CK.S_PASSWORD_DISPLAYS, displays); + } + } + return new PasswordListPrompt(context); + } + } + + public class PasswordPhrasePrompt extends QuestsEditorStringPrompt { + + public PasswordPhrasePrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorPasswordPhrasePrompt"); + } + + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context) + "\n"; + } + + @Override + public Prompt acceptInput(ConversationContext context, String input) { + if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { + if (context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES) != null) { + @SuppressWarnings("unchecked") + LinkedList> phrases + = (LinkedList>) context.getSessionData(stagePrefix + CK.S_PASSWORD_PHRASES); + LinkedList newPhrases = new LinkedList(); + newPhrases.addAll(Arrays.asList(input.split(Lang.get("charSemi")))); + phrases.add(newPhrases); + context.setSessionData(stagePrefix + CK.S_PASSWORD_PHRASES, phrases); + } else { + LinkedList> phrases = new LinkedList>(); + LinkedList newPhrases = new LinkedList(); + newPhrases.addAll(Arrays.asList(input.split(Lang.get("charSemi")))); + phrases.add(newPhrases); + context.setSessionData(stagePrefix + CK.S_PASSWORD_PHRASES, phrases); + } + } + return new PasswordListPrompt(context); + } + } + + public class ActionListPrompt extends QuestsEditorNumericPrompt { + + public ActionListPrompt(ConversationContext context) { + super(context); + } + + private final int size = 7; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorStageEvents"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + return ChatColor.BLUE; + case 7: + return ChatColor.GREEN; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch(number) { + case 1: + return ChatColor.YELLOW + Lang.get("stageEditorStartEvent"); + case 2: + return ChatColor.YELLOW + Lang.get("stageEditorFinishEvent"); + case 3: + return ChatColor.YELLOW + Lang.get("stageEditorDeathEvent"); + case 4: + return ChatColor.YELLOW + Lang.get("stageEditorDisconnectEvent"); + case 5: + return ChatColor.YELLOW + Lang.get("stageEditorChatEvents"); + case 6: + return ChatColor.YELLOW + Lang.get("stageEditorCommandEvents"); + case 7: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch(number) { + case 1: + if (context.getSessionData(stagePrefix + CK.S_START_EVENT) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return "(" + ChatColor.AQUA + ((String) context.getSessionData(stagePrefix + CK.S_START_EVENT)) + + ChatColor.YELLOW + ")\n"; + } + case 2: + if (context.getSessionData(stagePrefix + CK.S_FINISH_EVENT) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return "(" + ChatColor.AQUA + ((String) context.getSessionData(stagePrefix + CK.S_FINISH_EVENT)) + + ChatColor.YELLOW + ")\n"; + } + case 3: + if (context.getSessionData(stagePrefix + CK.S_DEATH_EVENT) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return "(" + ChatColor.AQUA + ((String) context.getSessionData(stagePrefix + CK.S_DEATH_EVENT)) + + ChatColor.YELLOW + ")\n"; + } + case 4: + if (context.getSessionData(stagePrefix + CK.S_DISCONNECT_EVENT) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return "(" + ChatColor.AQUA + ((String) context.getSessionData(stagePrefix + CK.S_DISCONNECT_EVENT)) + + ChatColor.YELLOW + ")\n"; + } + case 5: + if (context.getSessionData(stagePrefix + CK.S_CHAT_EVENTS) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + LinkedList chatEvents = (LinkedList) context.getSessionData(stagePrefix + CK.S_CHAT_EVENTS); + LinkedList chatEventTriggers + = (LinkedList) context.getSessionData(stagePrefix + CK.S_CHAT_EVENT_TRIGGERS); + for (String event : chatEvents) { + text += ChatColor.AQUA + " - " + event + ChatColor.BLUE + " (" + + Lang.get("stageEditorTriggeredBy") + ": \"" + + chatEventTriggers.get(chatEvents.indexOf(event)) + "\")\n"; + } + return text; + } + case 6: + if (context.getSessionData(stagePrefix + CK.S_COMMAND_EVENTS) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + LinkedList commandEvents + = (LinkedList) context.getSessionData(stagePrefix + CK.S_COMMAND_EVENTS); + LinkedList commandEventTriggers + = (LinkedList) context.getSessionData(stagePrefix + CK.S_COMMAND_EVENT_TRIGGERS); + for (String event : commandEvents) { + text += ChatColor.AQUA + " - " + event + ChatColor.BLUE + " (" + + Lang.get("stageEditorTriggeredBy") + ": \"" + + commandEventTriggers.get(commandEvents.indexOf(event)) + "\")\n"; + } + return text; + } + case 7: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenNumericPromptEvent event = new QuestsEditorPostOpenNumericPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; + } + return text; + } + + @Override + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch(input.intValue()) { + case 1: + return new StartActionPrompt(context); + case 2: + return new FinishActionPrompt(context); + case 3: + return new DeathActionPrompt(context); + case 4: + return new DisconnectActionPrompt(context); + case 5: + return new ChatActionPrompt(context); + case 6: + return new CommandActionPrompt(context); + case 7: + return new StageMainPrompt(stageNum, context); + default: + return new ActionListPrompt(context); + } + } + } + + public class StartActionPrompt extends QuestsEditorStringPrompt { + + public StartActionPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorStartEvent"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorEventsPrompt"); + } + + @Override + public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; if (plugin.getActions().isEmpty()) { text += ChatColor.RED + "- None"; } else { @@ -1048,7 +1302,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.GREEN + "- " + e.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorEventsPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @Override @@ -1066,28 +1320,45 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (found == null) { player.sendMessage(ChatColor.RED + input + ChatColor.YELLOW + " " + Lang.get("stageEditorInvalidEvent")); - return new StartActionPrompt(); + return new StartActionPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_START_EVENT, found.getName()); - return new ActionListPrompt(); + return new ActionListPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_START_EVENT, null); player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorStartEventCleared")); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new StartActionPrompt(); + return new StartActionPrompt(context); } } } - private class FinishActionPrompt extends StringPrompt { + public class FinishActionPrompt extends QuestsEditorStringPrompt { + + public FinishActionPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorFinishEvent"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorEventsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorFinishEvent") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; if (plugin.getActions().isEmpty()) { text += ChatColor.RED + "- " + Lang.get("none"); } else { @@ -1095,7 +1366,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.GREEN + "- " + e.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorEventsPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @Override @@ -1113,28 +1384,45 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (found == null) { player.sendMessage(ChatColor.RED + input + ChatColor.YELLOW + " " + Lang.get("stageEditorInvalidEvent")); - return new FinishActionPrompt(); + return new FinishActionPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_FINISH_EVENT, found.getName()); - return new ActionListPrompt(); + return new ActionListPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_FINISH_EVENT, null); player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorFinishEventCleared")); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new FinishActionPrompt(); + return new FinishActionPrompt(context); } } } - private class DeathActionPrompt extends StringPrompt { + public class DeathActionPrompt extends QuestsEditorStringPrompt { + + public DeathActionPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorDeathEvent"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorEventsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorDeathEvent") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; if (plugin.getActions().isEmpty()) { text += ChatColor.RED + "- None"; } else { @@ -1142,7 +1430,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.GREEN + "- " + e.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorEventsPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @Override @@ -1160,28 +1448,45 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (found == null) { player.sendMessage(ChatColor.RED + input + ChatColor.YELLOW + " " + Lang.get("stageEditorInvalidEvent")); - return new DeathActionPrompt(); + return new DeathActionPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_DEATH_EVENT, found.getName()); - return new ActionListPrompt(); + return new ActionListPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_DEATH_EVENT, null); player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorDeathEventCleared")); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new DeathActionPrompt(); + return new DeathActionPrompt(context); } } } - private class DisconnectActionPrompt extends StringPrompt { + public class DisconnectActionPrompt extends QuestsEditorStringPrompt { + + public DisconnectActionPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorDisconnectEvent"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorEventsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorDisconnectEvent") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; if (plugin.getActions().isEmpty()) { text += ChatColor.RED + "- " + Lang.get("none"); } else { @@ -1189,7 +1494,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.GREEN + "- " + e.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorEventsPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @Override @@ -1207,28 +1512,45 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (found == null) { player.sendMessage(ChatColor.RED + input + ChatColor.YELLOW + " " + Lang.get("stageEditorInvalidEvent")); - return new DisconnectActionPrompt(); + return new DisconnectActionPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_DISCONNECT_EVENT, found.getName()); - return new ActionListPrompt(); + return new ActionListPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_DISCONNECT_EVENT, null); player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorDisconnectEventCleared")); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new DisconnectActionPrompt(); + return new DisconnectActionPrompt(context); } } } - private class ChatActionPrompt extends StringPrompt { + public class ChatActionPrompt extends QuestsEditorStringPrompt { + + public ChatActionPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorChatEvents"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorChatEventsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorChatEvents") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; if (plugin.getActions().isEmpty()) { text += ChatColor.RED + "- " + Lang.get("none"); } else { @@ -1236,7 +1558,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.GREEN + "- " + e.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorChatEventsPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @Override @@ -1254,33 +1576,51 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (found == null) { player.sendMessage(ChatColor.RED + input + ChatColor.YELLOW + " " + Lang.get("stageEditorInvalidEvent")); - return new ChatActionPrompt(); + return new ChatActionPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_CHAT_TEMP_EVENT, found.getName()); - return new ChatActionTriggerPrompt(); + return new ChatActionTriggerPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_CHAT_EVENTS, null); context.setSessionData(stagePrefix + CK.S_CHAT_EVENT_TRIGGERS, null); player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorChatEventsCleared")); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new ChatActionPrompt(); + return new ChatActionPrompt(context); } } } - private class ChatActionTriggerPrompt extends StringPrompt { + public class ChatActionTriggerPrompt extends QuestsEditorStringPrompt { + + public ChatActionTriggerPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorChatTrigger"); + } + + @Override + public String getQueryText(ConversationContext context) { + String tempEvent = (String) context.getSessionData(stagePrefix + CK.S_CHAT_TEMP_EVENT); + return Lang.get("stageEditorChatEventsTriggerPrompt").replace("", tempEvent) + .replace("", tempEvent); + } @Override public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + String tempEvent = (String) context.getSessionData(stagePrefix + CK.S_CHAT_TEMP_EVENT); - String text = ChatColor.GOLD + "- " + Lang.get("stageEditorChatTrigger") + " -\n"; - text += ChatColor.YELLOW + Lang.get("stageEditorChatEventsTriggerPrompt") - .replace("", ChatColor.AQUA + tempEvent + ChatColor.YELLOW) - .replace("", ChatColor.AQUA + tempEvent + ChatColor.YELLOW); + String text = ChatColor.GOLD + "- " + getTitle(context) + " -\n"; + text += ChatColor.YELLOW + getQueryText(context) + .replaceFirst(tempEvent, ChatColor.AQUA + tempEvent + ChatColor.YELLOW); return text; } @@ -1296,7 +1636,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { chatEventTriggers.add(input.trim()); context.setSessionData(stagePrefix + CK.S_CHAT_EVENTS, chatEvents); context.setSessionData(stagePrefix + CK.S_CHAT_EVENT_TRIGGERS, chatEventTriggers); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { LinkedList chatEvents = (LinkedList) context.getSessionData(stagePrefix + CK.S_CHAT_EVENTS); @@ -1307,21 +1647,38 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { chatEventTriggers.add(input.trim()); context.setSessionData(stagePrefix + CK.S_CHAT_EVENTS, chatEvents); context.setSessionData(stagePrefix + CK.S_CHAT_EVENT_TRIGGERS, chatEventTriggers); - return new ActionListPrompt(); + return new ActionListPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new ChatActionTriggerPrompt(); + return new ChatActionTriggerPrompt(context); } } } - private class CommandActionPrompt extends StringPrompt { + public class CommandActionPrompt extends QuestsEditorStringPrompt { + + public CommandActionPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorCommandEvents"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorCommandEventsPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.AQUA + "- " + Lang.get("stageEditorCommandEvents") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.AQUA + "- " + getTitle(context) + " -\n"; if (plugin.getActions().isEmpty()) { text += ChatColor.RED + "- " + Lang.get("none"); } else { @@ -1329,7 +1686,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.GREEN + "- " + e.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorCommandEventsPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @Override @@ -1347,33 +1704,51 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { if (found == null) { player.sendMessage(ChatColor.RED + input + ChatColor.YELLOW + " " + Lang.get("stageEditorInvalidEvent")); - return new CommandActionPrompt(); + return new CommandActionPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_COMMAND_TEMP_EVENT, found.getName()); - return new CommandActionTriggerPrompt(); + return new CommandActionTriggerPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_COMMAND_EVENTS, null); context.setSessionData(stagePrefix + CK.S_COMMAND_EVENT_TRIGGERS, null); player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorCommandEventsCleared")); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new CommandActionPrompt(); + return new CommandActionPrompt(context); } } } - private class CommandActionTriggerPrompt extends StringPrompt { + public class CommandActionTriggerPrompt extends QuestsEditorStringPrompt { + + public CommandActionTriggerPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorCommandTrigger"); + } + + @Override + public String getQueryText(ConversationContext context) { + String tempEvent = (String) context.getSessionData(stagePrefix + CK.S_COMMAND_TEMP_EVENT); + return Lang.get("stageEditorCommandEventsTriggerPrompt").replace("", tempEvent) + .replace("", tempEvent); + } @Override public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + String tempEvent = (String) context.getSessionData(stagePrefix + CK.S_COMMAND_TEMP_EVENT); - String text = ChatColor.GOLD + "- " + Lang.get("stageEditorCommandTrigger") + " -\n"; - text += ChatColor.YELLOW + Lang.get("stageEditorCommandEventsTriggerPrompt") - .replace("", ChatColor.AQUA + tempEvent + ChatColor.YELLOW) - .replace("", ChatColor.AQUA + tempEvent + ChatColor.YELLOW); + String text = ChatColor.GOLD + "- " + getTitle(context) + " -\n"; + text += ChatColor.YELLOW + getQueryText(context) + .replaceFirst(tempEvent, ChatColor.AQUA + tempEvent + ChatColor.YELLOW); return text; } @@ -1389,7 +1764,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { commandEventTriggers.add(input.trim()); context.setSessionData(stagePrefix + CK.S_COMMAND_EVENTS, commandEvents); context.setSessionData(stagePrefix + CK.S_COMMAND_EVENT_TRIGGERS, commandEventTriggers); - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { LinkedList commandEvents = (LinkedList) context.getSessionData(stagePrefix + CK.S_COMMAND_EVENTS); @@ -1400,21 +1775,38 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { commandEventTriggers.add(input.trim()); context.setSessionData(stagePrefix + CK.S_COMMAND_EVENTS, commandEvents); context.setSessionData(stagePrefix + CK.S_COMMAND_EVENT_TRIGGERS, commandEventTriggers); - return new ActionListPrompt(); + return new ActionListPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - return new ActionListPrompt(); + return new ActionListPrompt(context); } else { - return new CommandActionTriggerPrompt(); + return new CommandActionTriggerPrompt(context); } } } - private class DelayPrompt extends StringPrompt { + public class DelayPrompt extends QuestsEditorStringPrompt { + + public DelayPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("timePrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("timePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -1434,11 +1826,11 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { stageDelay = i * 1000; } catch (NumberFormatException e) { player.sendMessage(ChatColor.RED + Lang.get("reqNotANumber").replace("", input)); - return new DelayPrompt(); + return new DelayPrompt(context); } if (stageDelay < 1000) { player.sendMessage(ChatColor.RED + Lang.get("invalidMinimum").replace("", "1")); - return new DelayPrompt(); + return new DelayPrompt(context); } else { context.setSessionData(stagePrefix + CK.S_DELAY, stageDelay); return new StageMainPrompt(stageNum, context); @@ -1446,11 +1838,28 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { } } - private class DelayMessagePrompt extends StringPrompt { + public class DelayMessagePrompt extends QuestsEditorStringPrompt { + + public DelayMessagePrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorDelayMessagePrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorDelayMessagePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -1465,20 +1874,37 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { player.sendMessage(ChatColor.YELLOW + Lang.get("stageEditorMessageCleared")); return new StageMainPrompt(stageNum, context); } else { - return new DelayMessagePrompt(); + return new DelayMessagePrompt(context); } } } - private class DeletePrompt extends StringPrompt { + public class DeletePrompt extends QuestsEditorStringPrompt { + + public DeletePrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("confirmDelete"); + } @Override public String getPromptText(ConversationContext context) { + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + String text = ChatColor.GREEN + "" + ChatColor.BOLD + "1" + ChatColor.RESET + "" + ChatColor.GREEN + " - " + Lang.get("yesWord") + "\n"; text += ChatColor.RED + "" + ChatColor.BOLD + "2" + ChatColor.RESET + "" + ChatColor.RED + " - " + Lang.get("noWord"); - return ChatColor.RED + Lang.get("confirmDelete") + " (" + ChatColor.YELLOW + Lang.get("stageEditorStage") + return ChatColor.RED + getQueryText(context) + " (" + ChatColor.YELLOW + Lang.get("stageEditorStage") + " " + stageNum + ChatColor.RED + ")\n" + ChatColor.GOLD + "(" + Lang.get("stageEditorConfirmStageNote") + ")\n" + text; } @@ -1494,16 +1920,33 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { return new StageMainPrompt(stageNum, context); } else { player.sendMessage(ChatColor.RED + Lang.get("invalidOption")); - return new DeletePrompt(); + return new DeletePrompt(context); } } } - private class StartMessagePrompt extends StringPrompt { + public class StartMessagePrompt extends QuestsEditorStringPrompt { + + public StartMessagePrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorStartMessagePrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorStartMessagePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -1523,11 +1966,28 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { } } - private class CompleteMessagePrompt extends StringPrompt { + public class CompleteMessagePrompt extends QuestsEditorStringPrompt { + + public CompleteMessagePrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return null; + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorCompleteMessagePrompt"); + } @Override public String getPromptText(ConversationContext context) { - return ChatColor.YELLOW + Lang.get("stageEditorCompleteMessagePrompt"); + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @Override @@ -1547,11 +2007,28 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { } } - private class CustomObjectivesPrompt extends StringPrompt { + public class CustomObjectivesPrompt extends QuestsEditorStringPrompt { + + public CustomObjectivesPrompt(ConversationContext context) { + super(context); + } + + @Override + public String getTitle(ConversationContext context) { + return Lang.get("stageEditorCustom"); + } + + @Override + public String getQueryText(ConversationContext context) { + return Lang.get("stageEditorCustomPrompt"); + } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.LIGHT_PURPLE + "- " + Lang.get("stageEditorCustom") + " -\n"; + QuestsEditorPostOpenStringPromptEvent event = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + + String text = ChatColor.LIGHT_PURPLE + "- " + getTitle(context) + " -\n"; if (plugin.getCustomObjectives().isEmpty()) { text += ChatColor.DARK_PURPLE + "(" + Lang.get("stageEditorNoModules") + ") "; } else { @@ -1559,7 +2036,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { text += ChatColor.DARK_PURPLE + " - " + co.getName() + "\n"; } } - return text + ChatColor.YELLOW + Lang.get("stageEditorCustomPrompt"); + return text + ChatColor.YELLOW + getQueryText(context); } @SuppressWarnings("unchecked") @@ -1604,7 +2081,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { // Already added, so inform user context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorCustomAlreadyAdded")); - return new CustomObjectivesPrompt(); + return new CustomObjectivesPrompt(context); } } else { // The custom objective hasn't been added yet, so let's do it @@ -1629,7 +2106,7 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { } } else { context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorModuleNotFound")); - return new CustomObjectivesPrompt(); + return new CustomObjectivesPrompt(context); } } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(stagePrefix + CK.S_CUSTOM_OBJECTIVES, null);