diff --git a/main/src/main/java/me/blackvein/quests/convo/actions/main/ActionMainPrompt.java b/main/src/main/java/me/blackvein/quests/convo/actions/main/ActionMainPrompt.java index 21e1ae555..cae4a40ce 100644 --- a/main/src/main/java/me/blackvein/quests/convo/actions/main/ActionMainPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/actions/main/ActionMainPrompt.java @@ -197,7 +197,7 @@ public class ActionMainPrompt extends ActionsEditorNumericPrompt { case 2: return new PlayerPrompt(context); case 3: - return new TimerPrompt(); + return new TimerPrompt(context); case 4: return new EffectPrompt(context); case 5: diff --git a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/EffectPrompt.java b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/EffectPrompt.java index 4a178e438..3fd44fe74 100644 --- a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/EffectPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/EffectPrompt.java @@ -30,6 +30,7 @@ import me.blackvein.quests.convo.actions.ActionsEditorNumericPrompt; import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt; import me.blackvein.quests.convo.actions.main.ActionMainPrompt; import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ConfigUtil; import me.blackvein.quests.util.Lang; @@ -310,6 +311,10 @@ public class EffectPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + String effects = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"; final Effect[] vals = Effect.values(); for (int i = 0; i < vals.length; i++) { @@ -374,6 +379,10 @@ public class EffectPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -429,6 +438,10 @@ public class EffectPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } diff --git a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/PlayerPrompt.java b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/PlayerPrompt.java index b0bc0a47c..a65bf9b31 100644 --- a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/PlayerPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/PlayerPrompt.java @@ -33,6 +33,7 @@ import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt; import me.blackvein.quests.convo.actions.main.ActionMainPrompt; import me.blackvein.quests.convo.generic.ItemStackPrompt; import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ConfigUtil; import me.blackvein.quests.util.ItemUtil; @@ -269,6 +270,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -587,6 +592,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + String effs = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n"; for (final PotionEffectType pet : PotionEffectType.values()) { effs += (pet != null && pet.getName() != null) ? (ChatColor.DARK_PURPLE + pet.getName() + "\n") : ""; @@ -632,6 +641,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -678,6 +691,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -723,6 +740,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -768,6 +789,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -813,6 +838,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -858,6 +887,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } @@ -912,6 +945,10 @@ public class PlayerPrompt extends ActionsEditorNumericPrompt { @Override public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + return ChatColor.YELLOW + getQueryText(context); } diff --git a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/TimerPrompt.java b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/TimerPrompt.java index 2ede886e3..4b85dbfae 100644 --- a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/TimerPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/TimerPrompt.java @@ -14,47 +14,107 @@ package me.blackvein.quests.convo.actions.tasks; import org.bukkit.ChatColor; import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.FixedSetPrompt; -import org.bukkit.conversations.NumericPrompt; import org.bukkit.conversations.Prompt; +import me.blackvein.quests.Quests; +import me.blackvein.quests.convo.actions.ActionsEditorNumericPrompt; +import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt; import me.blackvein.quests.convo.actions.main.ActionMainPrompt; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.Lang; -public class TimerPrompt extends FixedSetPrompt { +public class TimerPrompt extends ActionsEditorNumericPrompt { - public TimerPrompt() { - super("1", "2", "3"); + private final Quests plugin; + + public TimerPrompt(final ConversationContext context) { + super(context); + this.plugin = (Quests)context.getPlugin(); + } + + private final int size = 3; + + @Override + public int getSize() { + return size; + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("eventEditorTimer"); + } + + @Override + public ChatColor getNumberColor(final ConversationContext context, final int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.GREEN; + default: + return null; + } + } + + @Override + public String getSelectionText(final ConversationContext context, final int number) { + switch (number) { + case 1: + return ChatColor.YELLOW + Lang.get("eventEditorSetTimer"); + case 2: + return ChatColor.YELLOW + Lang.get("eventEditorCancelTimer"); + case 3: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @Override + public String getAdditionalText(final ConversationContext context, final int number) { + switch (number) { + case 1: + if (context.getSessionData(CK.E_TIMER) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return ChatColor.GRAY + "(" + ChatColor.AQUA + context.getSessionData(CK.E_TIMER) + ChatColor.GRAY + ")"; + } + case 2: + return ChatColor.AQUA + "" + context.getSessionData(CK.E_CANCEL_TIMER); + case 3: + return ""; + default: + return null; + } } @Override public String getPromptText(final ConversationContext context) { - String text = ChatColor.GOLD + "- " + Lang.get("eventEditorTimer") + " -\n"; - if (context.getSessionData(CK.E_TIMER) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetTimer") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetTimer") + "(" + ChatColor.AQUA + "\"" - + context.getSessionData(CK.E_TIMER) + "\"" + ChatColor.YELLOW + ")\n"; - } if (context.getSessionData(CK.E_CANCEL_TIMER) == null) { context.setSessionData(CK.E_CANCEL_TIMER, Lang.get("noWord")); } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorCancelTimer") + ": " + ChatColor.AQUA - + context.getSessionData(CK.E_CANCEL_TIMER) + "\n"; - text += ChatColor.GREEN + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.YELLOW + "- " - + Lang.get("done") + "\n"; + + final ActionsEditorPostOpenNumericPromptEvent event + = new ActionsEditorPostOpenNumericPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + String text = ChatColor.GOLD + "- " + 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(final ConversationContext context, final String input) { - if (input.equalsIgnoreCase("1")) { - return new FailTimerPrompt(); - } else if (input.equalsIgnoreCase("2")) { + protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { + switch (input.intValue()) { + case 1: + return new TimerFailPrompt(context); + case 2: final String s = (String) context.getSessionData(CK.E_CANCEL_TIMER); if (s.equalsIgnoreCase(Lang.get("yesWord"))) { context.setSessionData(CK.E_CANCEL_TIMER, Lang.get("noWord")); @@ -62,21 +122,49 @@ public class TimerPrompt extends FixedSetPrompt { context.setSessionData(CK.E_CANCEL_TIMER, Lang.get("yesWord")); } return new ActionMainPrompt(context); + case 3: + return new ActionMainPrompt(context); + default: + return null; } - return new ActionMainPrompt(context); } - public class FailTimerPrompt extends NumericPrompt { - + public class TimerFailPrompt extends ActionsEditorStringPrompt { + + public TimerFailPrompt(final ConversationContext context) { + super(context); + } + @Override - protected Prompt acceptValidatedInput(final ConversationContext context, final Number number) { - context.setSessionData(CK.E_TIMER, number); - return new ActionMainPrompt(context); + public String getTitle(final ConversationContext context) { + return null; } @Override - public String getPromptText(final ConversationContext conversationContext) { - return ChatColor.YELLOW + Lang.get("eventEditorEnterTimerSeconds"); + public String getQueryText(final ConversationContext context) { + return Lang.get("eventEditorEnterTimerSeconds"); + } + + @Override + public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(final ConversationContext context, final String input) { + try { + final Integer i = Integer.parseInt(input); + context.setSessionData(CK.E_TIMER, i); + return new TimerFailPrompt(context); + } catch (final NumberFormatException e) { + context.getForWhom().sendRawMessage(ChatColor.RED + + Lang.get("reqNotANumber").replace("", input)); + return new ActionMainPrompt(context); + } } } } diff --git a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/WeatherPrompt.java b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/WeatherPrompt.java index efc5ab7de..b2e7c7422 100644 --- a/main/src/main/java/me/blackvein/quests/convo/actions/tasks/WeatherPrompt.java +++ b/main/src/main/java/me/blackvein/quests/convo/actions/tasks/WeatherPrompt.java @@ -21,162 +21,288 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.conversations.ConversationContext; -import org.bukkit.conversations.FixedSetPrompt; -import org.bukkit.conversations.NumericPrompt; import org.bukkit.conversations.Prompt; -import org.bukkit.conversations.StringPrompt; import org.bukkit.entity.Player; import me.blackvein.quests.Quests; +import me.blackvein.quests.convo.actions.ActionsEditorNumericPrompt; +import me.blackvein.quests.convo.actions.ActionsEditorStringPrompt; import me.blackvein.quests.convo.actions.main.ActionMainPrompt; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenNumericPromptEvent; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenStringPromptEvent; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ConfigUtil; import me.blackvein.quests.util.Lang; import me.blackvein.quests.util.MiscUtil; -public class WeatherPrompt extends FixedSetPrompt { +public class WeatherPrompt extends ActionsEditorNumericPrompt { private final Quests plugin; public WeatherPrompt(final ConversationContext context) { - super("1", "2", "3", "4"); + super(context); this.plugin = (Quests)context.getPlugin(); } - + + private final int size = 4; + + @Override + public int getSize() { + return size; + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("eventEditorWeather"); + } + + @Override + public ChatColor getNumberColor(final ConversationContext context, final int number) { + switch (number) { + case 1: + case 2: + case 3: + return ChatColor.BLUE; + case 4: + return ChatColor.GREEN; + default: + return null; + } + } + + @Override + public String getSelectionText(final ConversationContext context, final int number) { + switch (number) { + case 1: + return ChatColor.YELLOW + Lang.get("eventEditorSetStorm"); + case 2: + return ChatColor.YELLOW + Lang.get("eventEditorSetThunder"); + case 3: + return ChatColor.YELLOW + Lang.get("eventEditorSetLightning"); + case 4: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + @SuppressWarnings("unchecked") @Override - public String getPromptText(final ConversationContext context) { - String text = ChatColor.GOLD + "- " + Lang.get("eventEditorWeather") + " -\n"; - if (context.getSessionData(CK.E_WORLD_STORM) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetStorm") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetStorm") + " (" + ChatColor.AQUA - + (String) context.getSessionData(CK.E_WORLD_STORM) + ChatColor.YELLOW + " -> " - + ChatColor.DARK_AQUA + MiscUtil.getTime(Long.valueOf((int)context - .getSessionData(CK.E_WORLD_STORM_DURATION) * 1000)) + ChatColor.YELLOW + ")\n"; - } - if (context.getSessionData(CK.E_WORLD_THUNDER) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetThunder") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetThunder") + " (" + ChatColor.AQUA - + (String) context.getSessionData(CK.E_WORLD_THUNDER) + ChatColor.YELLOW + " -> " - + ChatColor.DARK_AQUA + MiscUtil.getTime(Long.valueOf((int)context - .getSessionData(CK.E_WORLD_THUNDER_DURATION) * 1000)) + ChatColor.YELLOW + ")\n"; - } - - if (context.getSessionData(CK.E_LIGHTNING) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetLightning") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n"; - } else { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetLightning") + "\n"; - final LinkedList locations = (LinkedList) context.getSessionData(CK.E_LIGHTNING); - for (final String loc : locations) { - text += ChatColor.GRAY + " - " + ChatColor.AQUA + loc + "\n"; + public String getAdditionalText(final ConversationContext context, final int number) { + switch (number) { + case 1: + if (context.getSessionData(CK.E_WORLD_STORM) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return ChatColor.GRAY + "(" + ChatColor.AQUA + (String) context.getSessionData(CK.E_WORLD_STORM) + + ChatColor.GRAY + " -> " + ChatColor.DARK_AQUA + MiscUtil.getTime(Long.valueOf((int)context + .getSessionData(CK.E_WORLD_STORM_DURATION) * 1000)) + ChatColor.GRAY + ")"; } + case 2: + if (context.getSessionData(CK.E_WORLD_THUNDER) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return ChatColor.GRAY + "(" + ChatColor.AQUA + (String) context.getSessionData(CK.E_WORLD_THUNDER) + + ChatColor.GRAY + " -> " + ChatColor.DARK_AQUA + MiscUtil.getTime(Long.valueOf((int)context + .getSessionData(CK.E_WORLD_THUNDER_DURATION) * 1000)) + ChatColor.GRAY + ")"; + } + case 3: + if (context.getSessionData(CK.E_LIGHTNING) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + String text = "\n"; + final LinkedList locations = (LinkedList) context.getSessionData(CK.E_LIGHTNING); + for (final String loc : locations) { + text += ChatColor.GRAY + " - " + ChatColor.AQUA + loc + "\n"; + } + return text; + } + case 4: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenNumericPromptEvent event + = new ActionsEditorPostOpenNumericPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + String text = ChatColor.GOLD + "- " + 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"; } - text += ChatColor.GREEN + "" + ChatColor.BOLD + "4 " + ChatColor.RESET + ChatColor.GREEN + "- " - + Lang.get("done") + "\n"; return text; } @Override - protected Prompt acceptValidatedInput(final ConversationContext context, final String input) { - if (input.equalsIgnoreCase("1")) { - return new StormPrompt(); - } else if (input.equalsIgnoreCase("2")) { - return new ThunderPrompt(); - } else if (input.equalsIgnoreCase("3")) { - final Map selectedLightningLocations = plugin.getActionFactory().getSelectedLightningLocations(); + protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { + switch (input.intValue()) { + case 1: + return new StormPrompt(context); + case 2: + return new ThunderPrompt(context); + case 3: + final Map selectedLightningLocations + = plugin.getActionFactory().getSelectedLightningLocations(); selectedLightningLocations.put(((Player) context.getForWhom()).getUniqueId(), null); plugin.getActionFactory().setSelectedLightningLocations(selectedLightningLocations); - return new LightningPrompt(); + return new LightningPrompt(context); + case 4: + return new ActionMainPrompt(context); + default: + return null; } - return new ActionMainPrompt(context); } - private class StormPrompt extends FixedSetPrompt { + public class StormPrompt extends ActionsEditorNumericPrompt { - public StormPrompt() { - super("1", "2", "3", "4"); + public StormPrompt(final ConversationContext context) { + super(context); + } + + private final int size = 4; + + @Override + public int getSize() { + return size; } @Override - public String getPromptText(final ConversationContext context) { - String text = ChatColor.GOLD + Lang.get("eventEditorStormTitle") + "\n"; - if (context.getSessionData(CK.E_WORLD_STORM) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetWorld") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("eventEditorSetDuration") + " " + Lang.get("eventEditorNoWorld") + "\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("eventEditorSetWorld") + " (" + ChatColor.AQUA - + ((String) context.getSessionData(CK.E_WORLD_STORM)) + ChatColor.YELLOW + ")\n"; - if (context.getSessionData(CK.E_WORLD_STORM_DURATION) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetDuration") + " (" + Lang.get("noneSet") + ")\n"; + public String getTitle(final ConversationContext context) { + return Lang.get("eventEditorStormTitle"); + } + + @Override + public ChatColor getNumberColor(final ConversationContext context, final int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.RED; + case 4: + return ChatColor.GREEN; + default: + return null; + } + } + + @Override + public String getSelectionText(final ConversationContext context, final int number) { + switch (number) { + case 1: + return ChatColor.YELLOW + Lang.get("eventEditorSetWorld"); + case 2: + return ChatColor.YELLOW + Lang.get("eventEditorSetDuration"); + case 3: + return ChatColor.YELLOW + Lang.get("clear"); + case 4: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @Override + public String getAdditionalText(final ConversationContext context, final int number) { + switch (number) { + case 1: + if (context.getSessionData(CK.E_WORLD_STORM) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; } else { - final int dur = (int) context.getSessionData(CK.E_WORLD_STORM_DURATION); - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetDuration") + " (" + ChatColor.AQUA + MiscUtil.getTime(dur * 1000) - + ChatColor.YELLOW + ")\n"; + return ChatColor.GRAY + "(" + ChatColor.AQUA + ((String) context.getSessionData(CK.E_WORLD_STORM)) + + ChatColor.GRAY + ")"; } - 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"); + case 2: + if (context.getSessionData(CK.E_WORLD_STORM_DURATION) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return ChatColor.GRAY + "(" + ChatColor.AQUA + + MiscUtil.getTime((int)context.getSessionData(CK.E_WORLD_STORM_DURATION) * 1000) + + ChatColor.GRAY + ")"; + } + case 3: + case 4: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenNumericPromptEvent event + = new ActionsEditorPostOpenNumericPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + String text = ChatColor.GOLD + 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(final ConversationContext context, final String input) { - if (input.equalsIgnoreCase("1")) { - return new StormWorldPrompt(); - } else if (input.equalsIgnoreCase("2")) { + protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { + switch (input.intValue()) { + case 1: + return new StormWorldPrompt(context); + case 2: if (context.getSessionData(CK.E_WORLD_STORM) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorSetWorldFirst")); - return new StormPrompt(); + return new StormPrompt(context); } else { - return new StormDurationPrompt(); + return new StormDurationPrompt(context); } - } else if (input.equalsIgnoreCase("3")) { - context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("eventEditorStormCleared")); - context.setSessionData(CK.E_WORLD_STORM, null); - context.setSessionData(CK.E_WORLD_STORM_DURATION, null); - return new StormPrompt(); - } else if (input.equalsIgnoreCase("4")) { + case 3: if (context.getSessionData(CK.E_WORLD_STORM) != null && context.getSessionData(CK.E_WORLD_STORM_DURATION) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorMustSetStormDuration")); - return new StormPrompt(); + return new StormPrompt(context); } else { return new ActionMainPrompt(context); } + case 4: + return new ActionMainPrompt(context); + default: + return null; } - return null; } } - private class StormWorldPrompt extends StringPrompt { + public class StormWorldPrompt extends ActionsEditorStringPrompt { + + public StormWorldPrompt(final ConversationContext context) { + super(context); + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("eventEditorWorldsTitle"); + } + + @Override + public String getQueryText(final ConversationContext context) { + return Lang.get("eventEditorEnterStormWorld"); + } @Override public String getPromptText(final ConversationContext context) { - String effects = ChatColor.LIGHT_PURPLE + Lang.get("eventEditorWorldsTitle") + "\n" + ChatColor.DARK_PURPLE; + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + String effects = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n" + ChatColor.DARK_PURPLE; for (final World w : plugin.getServer().getWorlds()) { effects += w.getName() + ", "; } effects = effects.substring(0, effects.length()); - return ChatColor.YELLOW + effects + Lang.get("eventEditorEnterStormWorld"); + return ChatColor.YELLOW + effects + getQueryText(context); } @Override @@ -188,111 +314,205 @@ public class WeatherPrompt extends FixedSetPrompt { } else { player.sendMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED + Lang.get("eventEditorInvalidWorld")); - return new StormWorldPrompt(); + return new StormWorldPrompt(context); } } - return new StormPrompt(); + return new StormPrompt(context); } } - private class StormDurationPrompt extends NumericPrompt { + public class StormDurationPrompt extends ActionsEditorStringPrompt { + public StormDurationPrompt(final ConversationContext context) { + super(context); + } + @Override - public String getPromptText(final ConversationContext context) { - return ChatColor.YELLOW + Lang.get("eventEditorEnterDuration"); + public String getTitle(final ConversationContext context) { + return null; } @Override - protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { - if (input.intValue() < 1) { - context.getForWhom().sendRawMessage(ChatColor.RED - + Lang.get("invalidMinimum").replace("", "1")); - return new StormDurationPrompt(); - } else { - context.setSessionData(CK.E_WORLD_STORM_DURATION, input.intValue()); - } - return new StormPrompt(); - } - } - - private class ThunderPrompt extends FixedSetPrompt { - - public ThunderPrompt() { - super("1", "2", "3", "4"); + public String getQueryText(final ConversationContext context) { + return Lang.get("eventEditorEnterDuration"); } @Override public String getPromptText(final ConversationContext context) { - String text = ChatColor.GOLD + Lang.get("eventEditorThunderTitle") + "\n"; - if (context.getSessionData(CK.E_WORLD_THUNDER) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetWorld") + " (" + Lang.get("noneSet") + ")\n"; - text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " - + Lang.get("eventEditorSetDuration") + " " + Lang.get("eventEditorNoWorld") + "\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("eventEditorSetWorld") + " (" + ChatColor.AQUA - + ((String) context.getSessionData(CK.E_WORLD_THUNDER)) + ChatColor.YELLOW + ")\n"; - if (context.getSessionData(CK.E_WORLD_THUNDER_DURATION) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetDuration") + " (" + Lang.get("noneSet") + ")\n"; + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(final ConversationContext context, final String input) { + try { + final Integer i = Integer.parseInt(input); + if (i < 1) { + context.getForWhom().sendRawMessage(ChatColor.RED + + Lang.get("invalidMinimum").replace("", "1")); + return new StormDurationPrompt(context); } else { - final int dur = (int) context.getSessionData(CK.E_WORLD_THUNDER_DURATION); - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetDuration") + " (" + ChatColor.AQUA + MiscUtil.getTime(dur * 1000) - + ChatColor.YELLOW + ")\n"; + context.setSessionData(CK.E_WORLD_STORM_DURATION, i); } - 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"); + } catch (final NumberFormatException e) { + context.getForWhom().sendRawMessage(ChatColor.RED + + Lang.get("reqNotANumber").replace("", input)); + } + return new StormPrompt(context); + } + } + + public class ThunderPrompt extends ActionsEditorNumericPrompt { + + public ThunderPrompt(final ConversationContext context) { + super(context); + } + + private final int size = 4; + + @Override + public int getSize() { + return size; + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("eventEditorThunderTitle"); + } + + @Override + public ChatColor getNumberColor(final ConversationContext context, final int number) { + switch (number) { + case 1: + case 2: + return ChatColor.BLUE; + case 3: + return ChatColor.RED; + case 4: + return ChatColor.GREEN; + default: + return null; + } + } + + @Override + public String getSelectionText(final ConversationContext context, final int number) { + switch (number) { + case 1: + return ChatColor.YELLOW + Lang.get("eventEditorSetWorld"); + case 2: + return ChatColor.YELLOW + Lang.get("eventEditorSetDuration"); + case 3: + return ChatColor.YELLOW + Lang.get("clear"); + case 4: + return ChatColor.GREEN + Lang.get("done"); + default: + return null; + } + } + + @Override + public String getAdditionalText(final ConversationContext context, final int number) { + switch (number) { + case 1: + if (context.getSessionData(CK.E_WORLD_THUNDER) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return ChatColor.GRAY + "(" + ChatColor.AQUA + ((String) context.getSessionData(CK.E_WORLD_THUNDER)) + + ChatColor.GRAY + ")"; + } + case 2: + if (context.getSessionData(CK.E_WORLD_THUNDER_DURATION) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + return ChatColor.GRAY + "(" + ChatColor.AQUA + + MiscUtil.getTime((int)context.getSessionData(CK.E_WORLD_THUNDER_DURATION) * 1000) + + ChatColor.GRAY + ")"; + } + case 3: + case 4: + return ""; + default: + return null; + } + } + + @Override + public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenNumericPromptEvent event + = new ActionsEditorPostOpenNumericPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + String text = ChatColor.GOLD + 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(final ConversationContext context, final String input) { - if (input.equalsIgnoreCase("1")) { - return new ThunderWorldPrompt(); - } else if (input.equalsIgnoreCase("2")) { + protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { + switch (input.intValue()) { + case 1: + return new ThunderWorldPrompt(context); + case 2: if (context.getSessionData(CK.E_WORLD_THUNDER) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorSetWorldFirst")); - return new ThunderPrompt(); + return new ThunderPrompt(context); } else { - return new ThunderDurationPrompt(); + return new ThunderDurationPrompt(context); } - } else if (input.equalsIgnoreCase("3")) { + case 3: context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("eventEditorThunderCleared")); context.setSessionData(CK.E_WORLD_THUNDER, null); context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null); - return new ThunderPrompt(); - } else if (input.equalsIgnoreCase("4")) { + return new ThunderPrompt(context); + case 4: if (context.getSessionData(CK.E_WORLD_THUNDER) != null && context.getSessionData(CK.E_WORLD_THUNDER_DURATION) == null) { context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("eventEditorMustSetThunderDuration")); - return new ThunderPrompt(); + return new ThunderPrompt(context); } else { return new ActionMainPrompt(context); } + default: + return null; } - return null; } } - private class ThunderWorldPrompt extends StringPrompt { + public class ThunderWorldPrompt extends ActionsEditorStringPrompt { + + public ThunderWorldPrompt(final ConversationContext context) { + super(context); + } + + @Override + public String getTitle(final ConversationContext context) { + return Lang.get("eventEditorWorldsTitle"); + } + + @Override + public String getQueryText(final ConversationContext context) { + return Lang.get("eventEditorEnterThunderWorld"); + } @Override public String getPromptText(final ConversationContext context) { - String effects = ChatColor.LIGHT_PURPLE + Lang.get("eventEditorWorldsTitle") + "\n" + ChatColor.DARK_PURPLE; + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + String effects = ChatColor.LIGHT_PURPLE + getTitle(context) + "\n" + ChatColor.DARK_PURPLE; for (final World w : plugin.getServer().getWorlds()) { effects += w.getName() + ", "; } effects = effects.substring(0, effects.length()); - return ChatColor.YELLOW + effects + Lang.get("eventEditorEnterThunderWorld"); + return ChatColor.YELLOW + effects + getQueryText(context); } @Override @@ -304,38 +524,80 @@ public class WeatherPrompt extends FixedSetPrompt { } else { player.sendMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED + Lang.get("eventEditorInvalidWorld")); - return new ThunderWorldPrompt(); + return new ThunderWorldPrompt(context); } } - return new ThunderPrompt(); + return new ThunderPrompt(context); } } - private class ThunderDurationPrompt extends NumericPrompt { + public class ThunderDurationPrompt extends ActionsEditorStringPrompt { + public ThunderDurationPrompt(final ConversationContext context) { + super(context); + } + @Override - public String getPromptText(final ConversationContext context) { - return ChatColor.YELLOW + Lang.get("eventEditorEnterDuration"); + public String getTitle(final ConversationContext context) { + return null; } @Override - protected Prompt acceptValidatedInput(final ConversationContext context, final Number input) { - if (input.intValue() < 1) { + public String getQueryText(final ConversationContext context) { + return Lang.get("eventEditorEnterDuration"); + } + + @Override + public String getPromptText(final ConversationContext context) { + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(final ConversationContext context, final String input) { + try { + final Integer i = Integer.parseInt(input); + if (i < 1) { + context.getForWhom().sendRawMessage(ChatColor.RED + + Lang.get("invalidMinimum").replace("", "1")); + return new ThunderDurationPrompt(context); + } else { + context.setSessionData(CK.E_WORLD_THUNDER_DURATION, i); + } + } catch (final NumberFormatException e) { context.getForWhom().sendRawMessage(ChatColor.RED - + Lang.get("invalidMinimum").replace("", "1")); - return new ThunderDurationPrompt(); - } else { - context.setSessionData(CK.E_WORLD_THUNDER_DURATION, input.intValue()); + + Lang.get("reqNotANumber").replace("", input)); } - return new ThunderPrompt(); + return new ThunderPrompt(context); } } - public class LightningPrompt extends StringPrompt { + public class LightningPrompt extends ActionsEditorStringPrompt { + + public LightningPrompt(final ConversationContext context) { + super(context); + } + + @Override + public String getTitle(final ConversationContext context) { + return null; + } + + @Override + public String getQueryText(final ConversationContext context) { + return Lang.get("eventEditorLightningPrompt"); + } @Override public String getPromptText(final ConversationContext context) { - return ChatColor.YELLOW + Lang.get("eventEditorLightningPrompt"); + final ActionsEditorPostOpenStringPromptEvent event + = new ActionsEditorPostOpenStringPromptEvent(context, this); + plugin.getServer().getPluginManager().callEvent(event); + + return ChatColor.YELLOW + getQueryText(context); } @SuppressWarnings("unchecked") @@ -343,7 +605,8 @@ public class WeatherPrompt extends FixedSetPrompt { public Prompt acceptInput(final ConversationContext context, final String input) { final Player player = (Player) context.getForWhom(); if (input.equalsIgnoreCase(Lang.get("cmdAdd"))) { - final Map selectedLightningLocations = plugin.getActionFactory().getSelectedLightningLocations(); + final Map selectedLightningLocations + = plugin.getActionFactory().getSelectedLightningLocations(); final Block block = selectedLightningLocations.get(player.getUniqueId()); if (block != null) { final Location loc = block.getLocation(); @@ -359,22 +622,24 @@ public class WeatherPrompt extends FixedSetPrompt { plugin.getActionFactory().setSelectedLightningLocations(selectedLightningLocations); } else { player.sendMessage(ChatColor.RED + Lang.get("eventEditorSelectBlockFirst")); - return new LightningPrompt(); + return new LightningPrompt(context); } return new ActionMainPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { context.setSessionData(CK.E_LIGHTNING, null); - final Map selectedLightningLocations = plugin.getActionFactory().getSelectedLightningLocations(); + final Map selectedLightningLocations + = plugin.getActionFactory().getSelectedLightningLocations(); selectedLightningLocations.remove(player.getUniqueId()); plugin.getActionFactory().setSelectedLightningLocations(selectedLightningLocations); return new ActionMainPrompt(context); } else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) { - final Map selectedLightningLocations = plugin.getActionFactory().getSelectedLightningLocations(); + final Map selectedLightningLocations + = plugin.getActionFactory().getSelectedLightningLocations(); selectedLightningLocations.remove(player.getUniqueId()); plugin.getActionFactory().setSelectedLightningLocations(selectedLightningLocations); return new ActionMainPrompt(context); } else { - return new LightningPrompt(); + return new LightningPrompt(context); } } } diff --git a/main/src/main/resources/strings.yml b/main/src/main/resources/strings.yml index 46b7acf70..c32b0279d 100644 --- a/main/src/main/resources/strings.yml +++ b/main/src/main/resources/strings.yml @@ -326,7 +326,6 @@ eventEditorInvalidName: "is not a valid item name!" eventEditorStorm: "Action Storm" eventEditorSetWorld: "Set world" eventEditorSetDuration: "Set duration" -eventEditorNoWorld: "(No world set)" eventEditorSetWorldFirst: "You must set a world first!" eventEditorInvalidWorld: "is not a valid world name!" eventEditorMustSetStormDuration: "You must set a storm duration!"