Condense the create stage prompt, part 2

This commit is contained in:
BuildTools 2019-02-03 21:40:29 -05:00
parent 956d2fbb6a
commit 7aef0a7c75
7 changed files with 1371 additions and 1257 deletions

View File

@ -1203,15 +1203,6 @@ public class Quester {
}
}
public void catchFish(Quest quest) {
if (getQuestData(quest).getFishCaught() < getCurrentStage(quest).fishToCatch) {
getQuestData(quest).setFishCaught(getQuestData(quest).getFishCaught() + 1);
if (((Integer) getQuestData(quest).getFishCaught()).equals(getCurrentStage(quest).fishToCatch)) {
finishObjective(quest, "catchFish", null, null, null, null, null, null, null, null, null, null);
}
}
}
public void enchantItem(Quest quest, Enchantment e, Material m) {
for (Entry<Map<Enchantment, Material>, Integer> entry : getQuestData(quest).itemsEnchanted.entrySet()) {
if (entry.getKey().containsKey(e) && entry.getKey().containsValue(m)) {
@ -1231,6 +1222,15 @@ public class Quester {
}
}
}
public void catchFish(Quest quest) {
if (getQuestData(quest).getFishCaught() < getCurrentStage(quest).fishToCatch) {
getQuestData(quest).setFishCaught(getQuestData(quest).getFishCaught() + 1);
if (((Integer) getQuestData(quest).getFishCaught()).equals(getCurrentStage(quest).fishToCatch)) {
finishObjective(quest, "catchFish", null, null, null, null, null, null, null, null, null, null);
}
}
}
public void killMob(Quest quest, Location killedLocation, EntityType e) {
QuestData questData = getQuestData(quest);

View File

@ -479,7 +479,7 @@ public class PlayerListener implements Listener {
}
}
}
@EventHandler
public void onEnchantItem(EnchantItemEvent evt) {
if (plugin.checkQuester(evt.getEnchanter().getUniqueId()) == false) {

View File

@ -12,8 +12,6 @@
package me.blackvein.quests.prompts;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@ -21,7 +19,6 @@ import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
import org.bukkit.ChatColor;
@ -31,8 +28,6 @@ import org.bukkit.conversations.FixedSetPrompt;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class ItemsPrompt extends FixedSetPrompt {
private final Quests plugin;
@ -41,7 +36,7 @@ public class ItemsPrompt extends FixedSetPrompt {
private final QuestFactory questFactory;
public ItemsPrompt(Quests plugin, int stageNum, QuestFactory qf) {
super("1", "2", "3");
super("1", "2");
this.plugin = plugin;
this.stageNum = stageNum;
this.pref = "stage" + stageNum;
@ -64,21 +59,8 @@ public class ItemsPrompt extends FixedSetPrompt {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyItemString(names.get(i)) + ChatColor.GRAY + " " + Lang.get("with") + " " + ChatColor.AQUA + Quester.prettyEnchantmentString(Quests.getEnchantment(enchants.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
}
if (plugin.getDependencies().getCitizens() != null) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorDeliverItems") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorDeliverItems") + "\n";
LinkedList<Integer> npcs = (LinkedList<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS);
LinkedList<ItemStack> items = (LinkedList<ItemStack>) context.getSessionData(pref + CK.S_DELIVERY_ITEMS);
for (int i = 0; i < npcs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getName(items.get(i)) + ChatColor.GRAY + " x " + ChatColor.AQUA + items.get(i).getAmount() + ChatColor.GRAY + " " + Lang.get("to") + " " + ChatColor.DARK_AQUA + plugin.getDependencies().getCitizens().getNPCRegistry().getById(npcs.get(i)).getName() + "\n";
}
}
} else {
text += ChatColor.GRAY + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.GRAY + "- " + Lang.get("stageEditorDeliverItems") + ChatColor.GRAY + " (" + Lang.get("questCitNotInstalled") + ")\n";
}
text += ChatColor.GREEN + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.LIGHT_PURPLE + "- " + Lang.get("done") + "\n";
text += ChatColor.GREEN + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.LIGHT_PURPLE + "- " + Lang.get("done") + "\n";
return text;
}
@ -86,13 +68,6 @@ public class ItemsPrompt extends FixedSetPrompt {
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new EnchantmentListPrompt();
} else if (input.equalsIgnoreCase("2")) {
if (plugin.getDependencies().getCitizens() != null) {
return new DeliveryListPrompt();
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
return new ItemsPrompt(plugin, stageNum, questFactory);
}
}
try {
return new CreateStagePrompt(plugin, stageNum, questFactory);
@ -328,188 +303,4 @@ public class ItemsPrompt extends FixedSetPrompt {
return new EnchantmentListPrompt();
}
}
private class DeliveryListPrompt extends FixedSetPrompt {
public DeliveryListPrompt() {
super("1", "2", "3", "4", "5");
}
@Override
public String getPromptText(ConversationContext context) {
// Check/add newly made item
if (context.getSessionData("newItem") != null) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) != null) {
List<ItemStack> itemRews = getItems(context);
itemRews.add((ItemStack) context.getSessionData("tempStack"));
context.setSessionData(pref + CK.S_DELIVERY_ITEMS, itemRews);
} else {
LinkedList<ItemStack> itemRews = new LinkedList<ItemStack>();
itemRews.add((ItemStack) context.getSessionData("tempStack"));
context.setSessionData(pref + CK.S_DELIVERY_ITEMS, itemRews);
}
context.setSessionData("newItem", null);
context.setSessionData("tempStack", null);
}
String text = ChatColor.GOLD + "- " + Lang.get("stageEditorDeliverItems") + " -\n";
if (context.getSessionData(pref + CK.S_DELIVERY_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.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " + Lang.get("stageEditorDeliveryNPCs") + " (" + Lang.get("stageEditorNoItemsSet") + ")\n";
if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + "\n";
for (String s : getDeliveryMessages(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + "\"" + s + "\"";
}
}
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorDeliveryAddItem") + "\n";
for (ItemStack is : getItems(context)) {
text += ChatColor.GRAY + " - " + ItemUtil.getDisplayString(is) + "\n";
}
if (context.getSessionData(pref + CK.S_DELIVERY_NPCS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorDeliveryNPCs") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorDeliveryNPCs") + "\n";
for (int i : getDeliveryNPCs(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + " (" + plugin.getDependencies().getCitizens().getNPCRegistry().getById(i).getName() + ")\n";
}
}
if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + "\n";
for (String s : getDeliveryMessages(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + "\"" + s + "\"\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");
return text;
}
@SuppressWarnings("unchecked")
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new ItemStackPrompt(DeliveryListPrompt.this);
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoItems"));
return new DeliveryListPrompt();
} else {
return new DeliveryNPCsPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
return new DeliveryMessagesPrompt();
} else if (input.equalsIgnoreCase("4")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorDeliveriesCleared"));
context.setSessionData(pref + CK.S_DELIVERY_ITEMS, null);
context.setSessionData(pref + CK.S_DELIVERY_NPCS, null);
context.setSessionData(pref + CK.S_DELIVERY_MESSAGES, null);
return new DeliveryListPrompt();
} else if (input.equalsIgnoreCase("5")) {
int one;
int two;
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) != null) {
one = ((List<ItemStack>) context.getSessionData(pref + CK.S_DELIVERY_ITEMS)).size();
} else {
one = 0;
}
if (context.getSessionData(pref + CK.S_DELIVERY_NPCS) != null) {
two = ((List<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS)).size();
} else {
two = 0;
}
if (one == two) {
if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) == null && one != 0) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoDeliveryMessage"));
return new DeliveryListPrompt();
} else {
return new ItemsPrompt(plugin, stageNum, questFactory);
}
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorDeliveriesNotSameSize"));
return new DeliveryListPrompt();
}
}
return null;
}
@SuppressWarnings("unchecked")
private List<ItemStack> getItems(ConversationContext context) {
return (List<ItemStack>) context.getSessionData(pref + CK.S_DELIVERY_ITEMS);
}
@SuppressWarnings("unchecked")
private List<Integer> getDeliveryNPCs(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS);
}
@SuppressWarnings("unchecked")
private List<String> getDeliveryMessages(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_DELIVERY_MESSAGES);
}
}
private class DeliveryNPCsPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.add((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return ChatColor.YELLOW + Lang.get("stageEditorNPCPrompt") + "\n" + ChatColor.GOLD + Lang.get("npcHint");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
String[] args = input.split(" ");
LinkedList<Integer> npcs = new LinkedList<Integer>();
for (String s : args) {
try {
Integer i = Integer.parseInt(s);
if (plugin.getDependencies().getCitizens().getNPCRegistry().getById(i) != null) {
npcs.add(i);
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + i + ChatColor.RED + " " + Lang.get("stageEditorInvalidNPC"));
return new DeliveryNPCsPrompt();
}
} catch (NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorNotListofNumbers"));
return new DeliveryNPCsPrompt();
}
}
context.setSessionData(pref + CK.S_DELIVERY_NPCS, npcs);
}
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.remove((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return new DeliveryListPrompt();
}
}
private class DeliveryMessagesPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
String note = ChatColor.GOLD + Lang.get("stageEditorNPCNote");
return ChatColor.YELLOW + Lang.get("stageEditorDeliveryMessagesPrompt") + "\n" + note;
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
String[] args = input.split(Lang.get("charSemi"));
LinkedList<String> messages = new LinkedList<String>();
messages.addAll(Arrays.asList(args));
context.setSessionData(pref + CK.S_DELIVERY_MESSAGES, messages);
}
return new DeliveryListPrompt();
}
}
}

View File

@ -0,0 +1,803 @@
package me.blackvein.quests.prompts;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
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.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
public class MobsPrompt extends FixedSetPrompt {
private final Quests plugin;
private final int stageNum;
private final String pref;
private final QuestFactory questFactory;
public MobsPrompt(Quests plugin, int stageNum, QuestFactory qf) {
super("1", "2", "3", "4", "5");
this.plugin = plugin;
this.stageNum = stageNum;
this.pref = "stage" + stageNum;
this.questFactory = qf;
}
@SuppressWarnings("unchecked")
@Override
public String getPromptText(ConversationContext context) {
context.setSessionData(pref, Boolean.TRUE);
String text = ChatColor.AQUA + "- " + Lang.get("stageEditorMobs") + " -\n";
if (context.getSessionData(pref + CK.S_MOB_TYPES) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "1 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillMobs") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "1 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillMobs") + "\n";
LinkedList<String> mobs = (LinkedList<String>) context.getSessionData(pref + CK.S_MOB_TYPES);
LinkedList<Integer> amnts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_MOB_AMOUNTS);
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) == null) {
for (int i = 0; i < mobs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + Quester.prettyMobString(Quests.getMobType(mobs.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + "\n";
}
} else {
LinkedList<String> locs = (LinkedList<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS);
LinkedList<Integer> radii = (LinkedList<Integer>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS);
LinkedList<String> names = (LinkedList<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES);
for (int i = 0; i < mobs.size(); i++) {
String msg = Lang.get("blocksWithin");
msg = msg.replaceAll("<amount>", ChatColor.DARK_PURPLE + "" + radii.get(i) + ChatColor.GRAY);
text += ChatColor.GRAY + " - " + ChatColor.BLUE + Quester.prettyMobString(Quests.getMobType(mobs.get(i))) + ChatColor.GRAY + " x " + ChatColor.DARK_AQUA + amnts.get(i) + ChatColor.GRAY + msg + ChatColor.YELLOW + names.get(i) + " (" + locs.get(i) + ")\n";
}
}
}
if (context.getSessionData(pref + CK.S_FISH) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorCatchFish") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
Integer fish = (Integer) context.getSessionData(pref + CK.S_FISH);
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorCatchFish") + " " + ChatColor.GRAY + "(" + ChatColor.AQUA + fish + " " + Lang.get("stageEditorFish") + ChatColor.GRAY + ")\n";
}
if (context.getSessionData(pref + CK.S_TAME_TYPES) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorTameMobs") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorTameMobs") + "\n";
LinkedList<String> mobs = (LinkedList<String>) context.getSessionData(pref + CK.S_TAME_TYPES);
LinkedList<Integer> amounts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_TAME_AMOUNTS);
for (int i = 0; i < mobs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + mobs.get(i) + ChatColor.GRAY + " x " + ChatColor.AQUA + amounts.get(i) + "\n";
}
}
if (context.getSessionData(pref + CK.S_SHEAR_COLORS) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "4 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorShearSheep") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "4 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorShearSheep") + "\n";
LinkedList<String> colors = (LinkedList<String>) context.getSessionData(pref + CK.S_SHEAR_COLORS);
LinkedList<Integer> amounts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_SHEAR_AMOUNTS);
for (int i = 0; i < colors.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + colors.get(i) + ChatColor.GRAY + " x " + ChatColor.AQUA + amounts.get(i) + "\n";
}
}
text += ChatColor.GREEN + "" + ChatColor.BOLD + "5 " + ChatColor.RESET + ChatColor.LIGHT_PURPLE + "- " + Lang.get("done") + "\n";
return text;
}
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new MobListPrompt();
} else if (input.equalsIgnoreCase("2")) {
return new FishPrompt();
} else if (input.equalsIgnoreCase("3")) {
return new TameListPrompt();
} else if (input.equalsIgnoreCase("4")) {
return new ShearListPrompt();
}
try {
return new CreateStagePrompt(plugin, stageNum, questFactory);
} catch (Exception e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateCriticalError"));
return Prompt.END_OF_CONVERSATION;
}
}
private class MobListPrompt extends FixedSetPrompt {
public MobListPrompt() {
super("1", "2", "3", "4", "5", "6", "7");
}
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.GOLD + "- " + Lang.get("stageEditorKillMobs") + " -\n";
if (context.getSessionData(pref + CK.S_MOB_TYPES) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetMobTypes") + " (" + Lang.get("noneSet") + ")\n";
text += ChatColor.GRAY + "2 - " + Lang.get("stageEditorSetMobAmounts") + " (" + Lang.get("stageEditorNoMobTypesSet") + ")\n";
text += ChatColor.DARK_GRAY + "|---------" + Lang.get("stageEditorOptional") + "---------|\n";
text += ChatColor.GRAY + "3 - " + Lang.get("stageEditorSetKillLocations") + " (" + Lang.get("stageEditorNoMobTypesSet") + ")\n";
text += ChatColor.GRAY + "4 - " + Lang.get("stageEditorSetKillLocationRadii") + " (" + Lang.get("stageEditorNoMobTypesSet") + ")\n";
text += ChatColor.GRAY + "5 - " + Lang.get("stageEditorSetKillLocationNames") + " (" + Lang.get("stageEditorNoMobTypesSet") + ")\n";
text += ChatColor.DARK_GRAY + "|--------------------------|\n";
text += ChatColor.BLUE + "" + ChatColor.BOLD + "6" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("clear") + "\n";
text += ChatColor.BLUE + "" + ChatColor.BOLD + "7" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("done");
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetMobTypes") + "\n";
for (String s : getMobTypes(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
if (context.getSessionData(pref + CK.S_MOB_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetMobAmounts") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetMobAmounts") + "\n";
for (Integer i : getMobAmounts(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n";
}
}
text += ChatColor.DARK_GRAY + "|---------" + Lang.get("stageEditorOptional") + "---------|\n";
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetKillLocations") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetKillLocations") + "\n";
for (String s : getKillLocations(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
}
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS) == null) {
text += ChatColor.BLUE + "4 - " + Lang.get("stageEditorSetKillLocationRadii") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "4 - " + Lang.get("stageEditorSetKillLocationRadii") + "\n";
for (int i : getKillRadii(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + "\n";
}
}
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES) == null) {
text += ChatColor.BLUE + "5 - " + Lang.get("stageEditorSetKillLocationNames") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "5 - " + Lang.get("stageEditorSetKillLocationNames") + "\n";
for (String s : getKillLocationNames(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
}
text += ChatColor.DARK_GRAY + "|--------------------------|\n";
text += ChatColor.BLUE + "" + ChatColor.BOLD + "6" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("clear") + "\n";
text += ChatColor.BLUE + "" + ChatColor.BOLD + "7" + 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 MobTypesPrompt();
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(pref + CK.S_MOB_TYPES) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoMobTypes"));
return new MobListPrompt();
} else {
return new MobAmountsPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
if (context.getSessionData(pref + CK.S_MOB_TYPES) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoMobTypes"));
return new MobListPrompt();
} else {
Map<UUID, Block> temp = questFactory.getSelectedKillLocations();
temp.put(((Player) context.getForWhom()).getUniqueId(), null);
questFactory.setSelectedKillLocations(temp);
return new MobLocationPrompt();
}
} else if (input.equalsIgnoreCase("4")) {
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoKillLocations"));
return new MobListPrompt();
} else {
return new MobRadiiPrompt();
}
} else if (input.equalsIgnoreCase("5")) {
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoKillLocations"));
return new MobListPrompt();
} else {
return new MobLocationNamesPrompt();
}
} else if (input.equalsIgnoreCase("6")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorKillMobsCleared"));
context.setSessionData(pref + CK.S_MOB_TYPES, null);
context.setSessionData(pref + CK.S_MOB_AMOUNTS, null);
context.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS, null);
context.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS, null);
context.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES, null);
return new MobListPrompt();
} else if (input.equalsIgnoreCase("7")) {
int one;
int two;
int three;
int four;
int five;
if (context.getSessionData(pref + CK.S_MOB_TYPES) != null) {
one = ((List<String>) context.getSessionData(pref + CK.S_MOB_TYPES)).size();
} else {
one = 0;
}
if (context.getSessionData(pref + CK.S_MOB_AMOUNTS) != null) {
two = ((List<Integer>) context.getSessionData(pref + CK.S_MOB_AMOUNTS)).size();
} else {
two = 0;
}
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) != null) {
three = ((List<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS)).size();
} else {
three = 0;
}
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS) != null) {
four = ((List<Integer>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS)).size();
} else {
four = 0;
}
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES) != null) {
five = ((List<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES)).size();
} else {
five = 0;
}
if (one == two) {
if (three != 0 || four != 0 || five != 0) {
if (two == three && three == four && four == five) {
return new CreateStagePrompt(plugin, stageNum, questFactory);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorAllListsNotSameSize"));
return new MobListPrompt();
}
} else {
return new CreateStagePrompt(plugin, stageNum, questFactory);
}
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorMobTypesNotSameSize"));
return new MobListPrompt();
}
}
return null;
}
@SuppressWarnings("unchecked")
private List<String> getMobTypes(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_MOB_TYPES);
}
@SuppressWarnings("unchecked")
private List<Integer> getMobAmounts(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_MOB_AMOUNTS);
}
@SuppressWarnings("unchecked")
private List<String> getKillLocations(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS);
}
@SuppressWarnings("unchecked")
private List<Integer> getKillRadii(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS);
}
@SuppressWarnings("unchecked")
private List<String> getKillLocationNames(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES);
}
}
private class MobTypesPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
String mobs = ChatColor.LIGHT_PURPLE + Lang.get("eventEditorMobsTitle") + "\n";
LinkedList<EntityType> mobArr = new LinkedList<EntityType>(Arrays.asList(EntityType.values()));
LinkedList<EntityType> toRemove = new LinkedList<EntityType>();
for (int i = 0; i < mobArr.size(); i++) {
final EntityType type = mobArr.get(i);
if (type.isAlive() == false || type.name().equals("PLAYER")) {
toRemove.add(type);
}
}
mobArr.removeAll(toRemove);
for (int i = 0; i < mobArr.size(); i++) {
if (i < (mobArr.size() - 1)) {
mobs += MiscUtil.getProperMobName(mobArr.get(i)) + ", ";
} else {
mobs += MiscUtil.getProperMobName(mobArr.get(i)) + "\n";
}
}
return mobs + ChatColor.YELLOW + Lang.get("stageEditorMobsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<String> mobTypes = new LinkedList<String>();
for (String s : input.split(" ")) {
if (Quests.getMobType(s) != null) {
mobTypes.add(s);
context.setSessionData(pref + CK.S_MOB_TYPES, mobTypes);
} else {
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidMob"));
return new MobTypesPrompt();
}
}
}
return new MobListPrompt();
}
}
private class MobAmountsPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorMobAmountsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<Integer> mobAmounts = new LinkedList<Integer>();
for (String s : input.split(" ")) {
try {
int i = Integer.parseInt(s);
if (i < 1) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidMinimum").replace("<number>", "1"));
return new MobAmountsPrompt();
}
mobAmounts.add(i);
} catch (NumberFormatException e) {
player.sendMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED + Lang.get("stageEditorInvalidNumber"));
return new MobAmountsPrompt();
}
}
context.setSessionData(pref + CK.S_MOB_AMOUNTS, mobAmounts);
}
return new MobListPrompt();
}
}
private class MobLocationPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorMobLocationPrompt");
}
@SuppressWarnings("unchecked")
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdAdd"))) {
Block block = questFactory.getSelectedKillLocations().get(player.getUniqueId());
if (block != null) {
Location loc = block.getLocation();
LinkedList<String> locs;
if (context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS) != null) {
locs = (LinkedList<String>) context.getSessionData(pref + CK.S_MOB_KILL_LOCATIONS);
} else {
locs = new LinkedList<String>();
}
locs.add(Quests.getLocationInfo(loc));
context.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS, locs);
Map<UUID, Block> temp = questFactory.getSelectedKillLocations();
temp.remove(player.getUniqueId());
questFactory.setSelectedKillLocations(temp);
} else {
player.sendMessage(ChatColor.RED + Lang.get("stageEditorNoBlock"));
return new MobLocationPrompt();
}
return new MobListPrompt();
} else if (input.equalsIgnoreCase(Lang.get("cmdCancel"))) {
Map<UUID, Block> temp = questFactory.getSelectedKillLocations();
temp.remove(player.getUniqueId());
questFactory.setSelectedKillLocations(temp);
return new MobListPrompt();
} else {
return new MobLocationPrompt();
}
}
}
private class MobRadiiPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorMobLocationRadiiPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<Integer> radii = new LinkedList<Integer>();
for (String s : input.split(" ")) {
try {
int i = Integer.parseInt(s);
if (i < 1) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidMinimum").replace("<number>", "1"));
return new MobRadiiPrompt();
}
radii.add(i);
} catch (NumberFormatException e) {
player.sendMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED + Lang.get("stageEditorInvalidItemName"));
return new MobRadiiPrompt();
}
}
context.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS, radii);
}
return new MobListPrompt();
}
}
private class MobLocationNamesPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorMobLocationNamesPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<String> locNames = new LinkedList<String>();
locNames.addAll(Arrays.asList(input.split(Lang.get("charSemi"))));
context.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES, locNames);
}
return new MobListPrompt();
}
}
private class FishPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorCatchFishPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false && input.equalsIgnoreCase(Lang.get("cmdClear")) == false) {
try {
int i = Integer.parseInt(input);
if (i < 0) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorPositiveAmount"));
return new FishPrompt();
} else if (i > 0) {
context.setSessionData(pref + CK.S_FISH, i);
}
} catch (NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED
+ Lang.get("stageEditorInvalidNumber"));
return new FishPrompt();
}
} else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) {
context.setSessionData(pref + CK.S_FISH, null);
}
return new CreateStagePrompt(plugin, stageNum, questFactory);
}
}
private class TameListPrompt extends FixedSetPrompt {
public TameListPrompt() {
super("1", "2", "3", "4");
}
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.GOLD + "- " + Lang.get("stageEditorTameMobs") + " -\n";
if (context.getSessionData(pref + CK.S_TAME_TYPES) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetMobTypes") + " (" + Lang.get("noneSet") + ")\n";
text += ChatColor.GRAY + "2 - " + Lang.get("stageEditorSetTameAmounts") + " (" + Lang.get("stageEditorNoMobTypesSet") + ")\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("stageEditorSetMobTypes") + "\n";
for (String s : getTameTypes(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
if (context.getSessionData(pref + CK.S_TAME_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetTameAmounts") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetTameAmounts") + "\n";
for (Integer i : getTameAmounts(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");
}
return text;
}
@SuppressWarnings("unchecked")
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new TameTypesPrompt();
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(pref + CK.S_TAME_TYPES) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoMobTypes"));
return new TameListPrompt();
} else {
return new TameAmountsPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorTameCleared"));
context.setSessionData(pref + CK.S_TAME_TYPES, null);
context.setSessionData(pref + CK.S_TAME_AMOUNTS, null);
return new TameListPrompt();
} else if (input.equalsIgnoreCase("4")) {
int one;
int two;
if (context.getSessionData(pref + CK.S_TAME_TYPES) != null) {
one = ((List<String>) context.getSessionData(pref + CK.S_TAME_TYPES)).size();
} else {
one = 0;
}
if (context.getSessionData(pref + CK.S_TAME_AMOUNTS) != null) {
two = ((List<Integer>) context.getSessionData(pref + CK.S_TAME_AMOUNTS)).size();
} else {
two = 0;
}
if (one == two) {
return new CreateStagePrompt(plugin, stageNum, questFactory);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorTameMobsNotSameSize"));
return new TameListPrompt();
}
}
return null;
}
@SuppressWarnings("unchecked")
private List<String> getTameTypes(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_TAME_TYPES);
}
@SuppressWarnings("unchecked")
private List<Integer> getTameAmounts(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_TAME_AMOUNTS);
}
}
private class TameTypesPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
String mobs = ChatColor.LIGHT_PURPLE + Lang.get("eventEditorMobsTitle") + "\n";
final EntityType[] mobArr = EntityType.values();
for (int i = 0; i < mobArr.length; i++) {
final EntityType type = mobArr[i];
if (type.isAlive() == false || Tameable.class.isAssignableFrom(type.getEntityClass()) == false) {
continue;
}
mobs += MiscUtil.getProperMobName(mobArr[i]) + ", ";
}
mobs = mobs.substring(0, mobs.length() - 2) + "\n";
return mobs + ChatColor.YELLOW + Lang.get("stageEditorMobsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<String> mobTypes = new LinkedList<String>();
for (String s : input.split(" ")) {
if (Quests.getMobType(s) != null) {
final EntityType type = Quests.getMobType(s);
if (type.isAlive() || Tameable.class.isAssignableFrom(type.getEntityClass())) {
mobTypes.add(Quester.prettyMobString(type));
context.setSessionData(pref + CK.S_TAME_TYPES, mobTypes);
} else {
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidMob"));
return new TameTypesPrompt();
}
} else {
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidMob"));
return new TameTypesPrompt();
}
}
}
return new TameListPrompt();
}
}
private class TameAmountsPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorTameAmountsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<Integer> mobAmounts = new LinkedList<Integer>();
for (String s : input.split(" ")) {
try {
int i = Integer.parseInt(s);
if (i < 1) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidMinimum").replace("<number>", "1"));
return new TameAmountsPrompt();
}
mobAmounts.add(i);
} catch (NumberFormatException e) {
player.sendMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED + Lang.get("stageEditorInvalidNumber"));
return new TameAmountsPrompt();
}
}
context.setSessionData(pref + CK.S_TAME_AMOUNTS, mobAmounts);
}
return new TameListPrompt();
}
}
private class ShearListPrompt extends FixedSetPrompt {
public ShearListPrompt() {
super("1", "2", "3", "4");
}
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.GOLD + "- " + Lang.get("stageEditorShearSheep") + " -\n";
if (context.getSessionData(pref + CK.S_SHEAR_COLORS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetShearColors") + " (" + Lang.get("noneSet") + ")\n";
text += ChatColor.GRAY + "2 - " + Lang.get("stageEditorSetShearAmounts") + " (" + Lang.get("stageEditorNoColorsSet") + ")\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("stageEditorSetShearColors") + "\n";
for (String s : getShearColors(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
if (context.getSessionData(pref + CK.S_SHEAR_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetShearAmounts") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetShearAmounts") + "\n";
for (Integer i : getShearAmounts(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");
}
return text;
}
@SuppressWarnings("unchecked")
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new ShearColorsPrompt();
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(pref + CK.S_SHEAR_COLORS) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoColors"));
return new ShearListPrompt();
} else {
return new ShearAmountsPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorShearCleared"));
context.setSessionData(pref + CK.S_SHEAR_COLORS, null);
context.setSessionData(pref + CK.S_SHEAR_AMOUNTS, null);
return new ShearListPrompt();
} else if (input.equalsIgnoreCase("4")) {
int one;
int two;
if (context.getSessionData(pref + CK.S_SHEAR_COLORS) != null) {
one = ((List<String>) context.getSessionData(pref + CK.S_SHEAR_COLORS)).size();
} else {
one = 0;
}
if (context.getSessionData(pref + CK.S_SHEAR_AMOUNTS) != null) {
two = ((List<Integer>) context.getSessionData(pref + CK.S_SHEAR_AMOUNTS)).size();
} else {
two = 0;
}
if (one == two) {
return new CreateStagePrompt(plugin, stageNum, questFactory);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorShearNotSameSize"));
return new ShearListPrompt();
}
}
return null;
}
@SuppressWarnings("unchecked")
private List<String> getShearColors(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_SHEAR_COLORS);
}
@SuppressWarnings("unchecked")
private List<Integer> getShearAmounts(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_SHEAR_AMOUNTS);
}
}
private class ShearColorsPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
String cols = ChatColor.LIGHT_PURPLE + "- " + Lang.get("stageEditorColors") + " - \n";
final DyeColor[] colArr = DyeColor.values();
for (int i = 0; i < colArr.length; i++) {
if (i < (colArr.length - 1)) {
cols += Quests.getDyeString(colArr[i]) + ", ";
} else {
cols += Quests.getDyeString(colArr[i]) + "\n";
}
}
return cols + ChatColor.YELLOW + Lang.get("stageEditorShearColorsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<String> colors = new LinkedList<String>();
for (String s : input.split(" ")) {
if (Quests.getDyeColor(s) != null) {
colors.add(Quests.getDyeString(Quests.getDyeColor(s)));
context.setSessionData(pref + CK.S_SHEAR_COLORS, colors);
} else {
player.sendMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidDye"));
return new ShearColorsPrompt();
}
}
}
return new ShearListPrompt();
}
}
private class ShearAmountsPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorShearAmountsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
LinkedList<Integer> shearAmounts = new LinkedList<Integer>();
for (String s : input.split(" ")) {
try {
int i = Integer.parseInt(s);
if (i < 1) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidMinimum").replace("<number>", "1"));
return new ShearAmountsPrompt();
}
shearAmounts.add(i);
} catch (NumberFormatException e) {
player.sendMessage(ChatColor.LIGHT_PURPLE + input + " " + ChatColor.RED + Lang.get("stageEditorInvalidNumber"));
return new ShearAmountsPrompt();
}
}
context.setSessionData(pref + CK.S_SHEAR_AMOUNTS, shearAmounts);
}
return new ShearListPrompt();
}
}
}

View File

@ -0,0 +1,494 @@
package me.blackvein.quests.prompts;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
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.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.blackvein.quests.QuestFactory;
import me.blackvein.quests.Quests;
import me.blackvein.quests.util.CK;
import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang;
public class NPCsPrompt extends FixedSetPrompt {
private final Quests plugin;
private final int stageNum;
private final String pref;
private final QuestFactory questFactory;
public NPCsPrompt(Quests plugin, int stageNum, QuestFactory qf) {
super("1", "2", "3", "4");
this.plugin = plugin;
this.stageNum = stageNum;
this.pref = "stage" + stageNum;
this.questFactory = qf;
}
@SuppressWarnings("unchecked")
@Override
public String getPromptText(ConversationContext context) {
context.setSessionData(pref, Boolean.TRUE);
String text = ChatColor.AQUA + "- " + Lang.get("stageEditorNPCs") + " -\n";
if (plugin.getDependencies().getCitizens() != null) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "1 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorDeliverItems") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "1 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorDeliverItems") + "\n";
LinkedList<Integer> npcs = (LinkedList<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS);
LinkedList<ItemStack> items = (LinkedList<ItemStack>) context.getSessionData(pref + CK.S_DELIVERY_ITEMS);
for (int i = 0; i < npcs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + ItemUtil.getName(items.get(i)) + ChatColor.GRAY + " x " + ChatColor.AQUA + items.get(i).getAmount() + ChatColor.GRAY + " " + Lang.get("to") + " " + ChatColor.DARK_AQUA + plugin.getDependencies().getCitizens().getNPCRegistry().getById(npcs.get(i)).getName() + "\n";
}
}
} else {
text += ChatColor.GRAY + "" + ChatColor.BOLD + "1 " + ChatColor.RESET + ChatColor.GRAY + "- " + Lang.get("stageEditorDeliverItems") + ChatColor.GRAY + " (" + Lang.get("questCitNotInstalled") + ")\n";
}
if (plugin.getDependencies().getCitizens() != null) {
if (context.getSessionData(pref + CK.S_NPCS_TO_TALK_TO) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorTalkToNPCs") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorTalkToNPCs") + "\n";
LinkedList<Integer> npcs = (LinkedList<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_TALK_TO);
for (int i = 0; i < npcs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + plugin.getDependencies().getCitizens().getNPCRegistry().getById(npcs.get(i)).getName() + "\n";
}
}
} else {
text += ChatColor.GRAY + "" + ChatColor.BOLD + "2 " + ChatColor.RESET + ChatColor.GRAY + "- " + Lang.get("stageEditorTalkToNPCs") + ChatColor.GRAY + " (" + Lang.get("questCitNotInstalled") + ")\n";
}
if (plugin.getDependencies().getCitizens() != null) {
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillNPCs") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.LIGHT_PURPLE + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.DARK_PURPLE + "- " + Lang.get("stageEditorKillNPCs") + "\n";
LinkedList<Integer> npcs = (LinkedList<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_KILL);
LinkedList<Integer> amounts = (LinkedList<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS);
for (int i = 0; i < npcs.size(); i++) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + plugin.getDependencies().getCitizens().getNPCRegistry().getById(npcs.get(i)).getName() + ChatColor.GRAY + " x " + ChatColor.AQUA + amounts.get(i) + "\n";
}
}
} else {
text += ChatColor.GRAY + "" + ChatColor.BOLD + "3 " + ChatColor.RESET + ChatColor.GRAY + "- " + Lang.get("stageEditorKillNPCs") + ChatColor.GRAY + " (" + Lang.get("questCitNotInstalled") + ")\n";
}
text += ChatColor.GREEN + "" + ChatColor.BOLD + "4 " + ChatColor.RESET + ChatColor.LIGHT_PURPLE + "- " + Lang.get("done") + "\n";
return text;
}
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
if (plugin.getDependencies().getCitizens() != null) {
return new DeliveryListPrompt();
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
return new CreateStagePrompt(plugin, stageNum, questFactory);
}
} else if (input.equalsIgnoreCase("2")) {
if (plugin.getDependencies().getCitizens() != null) {
return new NPCIDsToTalkToPrompt();
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
return new CreateStagePrompt(plugin, stageNum, questFactory);
}
} else if (input.equalsIgnoreCase("3")) {
if (plugin.getDependencies().getCitizens() != null) {
return new NPCKillListPrompt();
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoCitizens"));
return new CreateStagePrompt(plugin, stageNum, questFactory);
}
}
try {
return new CreateStagePrompt(plugin, stageNum, questFactory);
} catch (Exception e) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("itemCreateCriticalError"));
return Prompt.END_OF_CONVERSATION;
}
}
private class DeliveryListPrompt extends FixedSetPrompt {
public DeliveryListPrompt() {
super("1", "2", "3", "4", "5");
}
@Override
public String getPromptText(ConversationContext context) {
// Check/add newly made item
if (context.getSessionData("newItem") != null) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) != null) {
List<ItemStack> itemRews = getItems(context);
itemRews.add((ItemStack) context.getSessionData("tempStack"));
context.setSessionData(pref + CK.S_DELIVERY_ITEMS, itemRews);
} else {
LinkedList<ItemStack> itemRews = new LinkedList<ItemStack>();
itemRews.add((ItemStack) context.getSessionData("tempStack"));
context.setSessionData(pref + CK.S_DELIVERY_ITEMS, itemRews);
}
context.setSessionData("newItem", null);
context.setSessionData("tempStack", null);
}
String text = ChatColor.GOLD + "- " + Lang.get("stageEditorDeliverItems") + " -\n";
if (context.getSessionData(pref + CK.S_DELIVERY_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.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " + Lang.get("stageEditorDeliveryNPCs") + " (" + Lang.get("stageEditorNoItemsSet") + ")\n";
if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + "\n";
for (String s : getDeliveryMessages(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + "\"" + s + "\"";
}
}
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorDeliveryAddItem") + "\n";
for (ItemStack is : getItems(context)) {
text += ChatColor.GRAY + " - " + ItemUtil.getDisplayString(is) + "\n";
}
if (context.getSessionData(pref + CK.S_DELIVERY_NPCS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorDeliveryNPCs") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorDeliveryNPCs") + "\n";
for (int i : getDeliveryNPCs(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + i + " (" + plugin.getDependencies().getCitizens().getNPCRegistry().getById(i).getName() + ")\n";
}
}
if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.BLUE + " - " + Lang.get("stageEditorDeliveryMessages") + "\n";
for (String s : getDeliveryMessages(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + "\"" + s + "\"\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");
return text;
}
@SuppressWarnings("unchecked")
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new ItemStackPrompt(DeliveryListPrompt.this);
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoItems"));
return new DeliveryListPrompt();
} else {
return new DeliveryNPCsPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
return new DeliveryMessagesPrompt();
} else if (input.equalsIgnoreCase("4")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorDeliveriesCleared"));
context.setSessionData(pref + CK.S_DELIVERY_ITEMS, null);
context.setSessionData(pref + CK.S_DELIVERY_NPCS, null);
context.setSessionData(pref + CK.S_DELIVERY_MESSAGES, null);
return new DeliveryListPrompt();
} else if (input.equalsIgnoreCase("5")) {
int one;
int two;
if (context.getSessionData(pref + CK.S_DELIVERY_ITEMS) != null) {
one = ((List<ItemStack>) context.getSessionData(pref + CK.S_DELIVERY_ITEMS)).size();
} else {
one = 0;
}
if (context.getSessionData(pref + CK.S_DELIVERY_NPCS) != null) {
two = ((List<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS)).size();
} else {
two = 0;
}
if (one == two) {
if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) == null && one != 0) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoDeliveryMessage"));
return new DeliveryListPrompt();
} else {
return new ItemsPrompt(plugin, stageNum, questFactory);
}
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorDeliveriesNotSameSize"));
return new DeliveryListPrompt();
}
}
return null;
}
@SuppressWarnings("unchecked")
private List<ItemStack> getItems(ConversationContext context) {
return (List<ItemStack>) context.getSessionData(pref + CK.S_DELIVERY_ITEMS);
}
@SuppressWarnings("unchecked")
private List<Integer> getDeliveryNPCs(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_DELIVERY_NPCS);
}
@SuppressWarnings("unchecked")
private List<String> getDeliveryMessages(ConversationContext context) {
return (List<String>) context.getSessionData(pref + CK.S_DELIVERY_MESSAGES);
}
}
private class DeliveryNPCsPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.add((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return ChatColor.YELLOW + Lang.get("stageEditorNPCPrompt") + "\n" + ChatColor.GOLD + Lang.get("npcHint");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
String[] args = input.split(" ");
LinkedList<Integer> npcs = new LinkedList<Integer>();
for (String s : args) {
try {
Integer i = Integer.parseInt(s);
if (plugin.getDependencies().getCitizens().getNPCRegistry().getById(i) != null) {
npcs.add(i);
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + i + ChatColor.RED + " " + Lang.get("stageEditorInvalidNPC"));
return new DeliveryNPCsPrompt();
}
} catch (NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorNotListofNumbers"));
return new DeliveryNPCsPrompt();
}
}
context.setSessionData(pref + CK.S_DELIVERY_NPCS, npcs);
}
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.remove((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return new DeliveryListPrompt();
}
}
private class DeliveryMessagesPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
String note = ChatColor.GOLD + Lang.get("stageEditorNPCNote");
return ChatColor.YELLOW + Lang.get("stageEditorDeliveryMessagesPrompt") + "\n" + note;
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
String[] args = input.split(Lang.get("charSemi"));
LinkedList<String> messages = new LinkedList<String>();
messages.addAll(Arrays.asList(args));
context.setSessionData(pref + CK.S_DELIVERY_MESSAGES, messages);
}
return new DeliveryListPrompt();
}
}
private class NPCIDsToTalkToPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.add((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return ChatColor.YELLOW + Lang.get("stageEditorNPCToTalkToPrompt") + "\n" + ChatColor.GOLD + Lang.get("npcHint");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false && input.equalsIgnoreCase(Lang.get("cmdClear")) == false) {
String[] args = input.split(" ");
LinkedList<Integer> npcs = new LinkedList<Integer>();
for (String s : args) {
try {
Integer i = Integer.parseInt(s);
if (plugin.getDependencies().getCitizens().getNPCRegistry().getById(i) != null) {
npcs.add(i);
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + i + ChatColor.RED + " " + Lang.get("stageEditorInvalidNPC"));
return new NPCIDsToTalkToPrompt();
}
} catch (NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorNotListofNumbers"));
return new NPCIDsToTalkToPrompt();
}
}
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.remove((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
context.setSessionData(pref + CK.S_NPCS_TO_TALK_TO, npcs);
} else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) {
context.setSessionData(pref + CK.S_NPCS_TO_TALK_TO, null);
}
return new CreateStagePrompt(plugin, stageNum, questFactory);
}
}
private class NPCKillListPrompt extends FixedSetPrompt {
public NPCKillListPrompt() {
super("1", "2", "3", "4");
}
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.GOLD + "- " + Lang.get("stageEditorKillNPCs") + " -\n";
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetKillIds") + " (" + Lang.get("noneSet") + ")\n";
text += ChatColor.GRAY + "2 - " + Lang.get("stageEditorSetKillAmounts") + " (" + Lang.get("noIdsSet") + ")\n";
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("cancel") + "\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("stageEditorSetKillIds") + "\n";
for (Integer i : getNPCIds(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + plugin.getDependencies().getCitizens().getNPCRegistry().getById(i).getName() + ChatColor.DARK_AQUA + " (" + i + ")\n";
}
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetKillAmounts") + " (" + Lang.get("noneSet") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("stageEditorSetKillAmounts") + "\n";
for (Integer i : getKillAmounts(context)) {
text += ChatColor.GRAY + " - " + ChatColor.BLUE + i + "\n";
}
}
text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("cancel") + "\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 NpcIdsToKillPrompt();
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNoNPCs"));
return new NPCKillListPrompt();
} else {
return new NpcAmountsToKillPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("stageEditorKillNPCsCleared"));
context.setSessionData(pref + CK.S_NPCS_TO_KILL, null);
context.setSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS, null);
return new NPCKillListPrompt();
} else if (input.equalsIgnoreCase("4")) {
int one;
int two;
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL) != null) {
one = ((List<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_KILL)).size();
} else {
one = 0;
}
if (context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS) != null) {
two = ((List<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS)).size();
} else {
two = 0;
}
if (one == two) {
return new CreateStagePrompt(plugin, stageNum, questFactory);
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorNPCKillsNotSameSize"));
return new NPCKillListPrompt();
}
}
return null;
}
@SuppressWarnings("unchecked")
private List<Integer> getNPCIds(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_KILL);
}
@SuppressWarnings("unchecked")
private List<Integer> getKillAmounts(ConversationContext context) {
return (List<Integer>) context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS);
}
}
private class NpcIdsToKillPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.add((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return ChatColor.YELLOW + Lang.get("stageEditorNPCPrompt") + "\n" + ChatColor.GOLD + Lang.get("npcHint");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
String[] args = input.split(" ");
LinkedList<Integer> npcs = new LinkedList<Integer>();
for (String s : args) {
try {
Integer i = Integer.parseInt(s);
if (plugin.getDependencies().getCitizens().getNPCRegistry().getById(i) != null) {
npcs.add(i);
} else {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + "" + i + ChatColor.RED + " " + Lang.get("stageEditorInvalidNPC"));
return new NpcIdsToKillPrompt();
}
} catch (NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorNotListofNumbers"));
return new NpcIdsToKillPrompt();
}
}
context.setSessionData(pref + CK.S_NPCS_TO_KILL, npcs);
}
HashSet<Player> temp = questFactory.getSelectingNpcs();
temp.remove((Player) context.getForWhom());
questFactory.setSelectingNpcs(temp);
return new NPCKillListPrompt();
}
}
private class NpcAmountsToKillPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
return ChatColor.YELLOW + Lang.get("stageEditorKillNPCsPrompt");
}
@Override
public Prompt acceptInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) {
String[] args = input.split(" ");
LinkedList<Integer> amounts = new LinkedList<Integer>();
for (String s : args) {
try {
if (Integer.parseInt(s) > 0) {
amounts.add(Integer.parseInt(s));
} else {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("invalidMinimum").replace("<number>", "1"));
return new NpcAmountsToKillPrompt();
}
} catch (NumberFormatException e) {
context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorNotListofNumbers"));
return new NpcAmountsToKillPrompt();
}
}
context.setSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS, amounts);
}
return new NPCKillListPrompt();
}
}
}

View File

@ -116,20 +116,22 @@ stageEditorPlaceBlocks: "Place blocks"
stageEditorUseBlocks: "Use blocks"
stageEditorCutBlocks: "Cut blocks"
stageEditorItems: "Items"
stageEditorCatchFish: "Catch fish"
stageEditorFish: "fish"
stageEditorKillPlayers: "Kill players"
stageEditorPlayers: "players"
stageEditorEnchantItems: "Enchant items"
stageEditorDeliverItems: "Deliver items"
stageEditorNPCs: "NPCs"
stageEditorTalkToNPCs: "Talk to NPCs"
stageEditorKillNPCs: "Kill NPCs"
stageEditorMobs: "Mobs"
stageEditorKillMobs: "Kill mobs"
stageEditorCatchFish: "Catch fish"
stageEditorFish: "fish"
stageEditorReachLocs: "Reach locations"
stageEditorReachRadii1: "Reach within"
stageEditorReachRadii2: "blocks of"
stageEditorTameMobs: "Tame mobs"
stageEditorShearSheep: "Shear Sheep"
stageEditorKillPlayers: "Kill players"
stageEditorPlayers: "players"
stageEditorEvents: "Events"
stageEditorStageEvents: "Stage Events"
stageEditorStartEvent: "Start Event"