diff --git a/main/src/main/java/me/blackvein/quests/QuestFactory.java b/main/src/main/java/me/blackvein/quests/QuestFactory.java index 200358281..5610fa72c 100644 --- a/main/src/main/java/me/blackvein/quests/QuestFactory.java +++ b/main/src/main/java/me/blackvein/quests/QuestFactory.java @@ -432,7 +432,7 @@ public class QuestFactory implements ConversationAbandonedListener { + ChatColor.GOLD + " -\n"; for (int i = 1; i <= size; i++) { text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " - + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; + + getSelectionText(context, i) + " " + getAdditionalText(context, i) + "\n"; } return text; } @@ -514,6 +514,382 @@ public class QuestFactory implements ConversationAbandonedListener { } } } + + @SuppressWarnings("deprecation") + public static void loadQuest(ConversationContext cc, Quest q) { + cc.setSessionData(CK.ED_QUEST_EDIT, q.getName()); + cc.setSessionData(CK.Q_NAME, q.getName()); + if (q.npcStart != null) { + cc.setSessionData(CK.Q_START_NPC, q.npcStart.getId()); + } + cc.setSessionData(CK.Q_START_BLOCK, q.blockStart); + cc.setSessionData(CK.Q_ASK_MESSAGE, q.description); + cc.setSessionData(CK.Q_FINISH_MESSAGE, q.finished); + if (q.initialAction != null) { + cc.setSessionData(CK.Q_INITIAL_EVENT, q.initialAction.getName()); + } + if (q.region != null) { + cc.setSessionData(CK.Q_REGION, q.region); + } + if (q.guiDisplay != null) { + cc.setSessionData(CK.Q_GUIDISPLAY, q.guiDisplay); + } + Requirements reqs = q.getRequirements(); + if (reqs.getMoney() != 0) { + cc.setSessionData(CK.REQ_MONEY, reqs.getMoney()); + } + if (reqs.getQuestPoints() != 0) { + cc.setSessionData(CK.REQ_QUEST_POINTS, reqs.getQuestPoints()); + } + if (reqs.getItems().isEmpty() == false) { + cc.setSessionData(CK.REQ_ITEMS, reqs.getItems()); + cc.setSessionData(CK.REQ_ITEMS_REMOVE, reqs.getRemoveItems()); + } + if (reqs.getNeededQuests().isEmpty() == false) { + cc.setSessionData(CK.REQ_QUEST, reqs.getNeededQuests()); + } + if (reqs.getBlockQuests().isEmpty() == false) { + cc.setSessionData(CK.REQ_QUEST_BLOCK, reqs.getBlockQuests()); + } + if (reqs.getMcmmoSkills().isEmpty() == false) { + cc.setSessionData(CK.REQ_MCMMO_SKILLS, reqs.getMcmmoAmounts()); + cc.setSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS, reqs.getMcmmoAmounts()); + } + if (reqs.getPermissions().isEmpty() == false) { + cc.setSessionData(CK.REQ_PERMISSION, reqs.getPermissions()); + } + if (reqs.getHeroesPrimaryClass() != null) { + cc.setSessionData(CK.REQ_HEROES_PRIMARY_CLASS, reqs.getHeroesPrimaryClass()); + } + if (reqs.getHeroesSecondaryClass() != null) { + cc.setSessionData(CK.REQ_HEROES_SECONDARY_CLASS, reqs.getHeroesSecondaryClass()); + } + if (reqs.getFailRequirements() != null) { + cc.setSessionData(CK.Q_FAIL_MESSAGE, reqs.getFailRequirements()); + } + if (reqs.getCustomRequirements().isEmpty() == false) { + LinkedList list = new LinkedList(); + LinkedList> datamapList = new LinkedList>(); + for (Entry> entry : reqs.getCustomRequirements().entrySet()) { + list.add(entry.getKey()); + datamapList.add(entry.getValue()); + } + cc.setSessionData(CK.REQ_CUSTOM, list); + cc.setSessionData(CK.REQ_CUSTOM_DATA, datamapList); + } + Rewards rews = q.getRewards(); + if (rews.getMoney() != 0) { + cc.setSessionData(CK.REW_MONEY, rews.getMoney()); + } + if (rews.getQuestPoints() != 0) { + cc.setSessionData(CK.REW_QUEST_POINTS, rews.getQuestPoints()); + } + if (rews.getExp() != 0) { + cc.setSessionData(CK.REW_EXP, rews.getExp()); + } + if (rews.getItems().isEmpty() == false) { + cc.setSessionData(CK.REW_ITEMS, rews.getItems()); + } + if (rews.getCommands().isEmpty() == false) { + cc.setSessionData(CK.REW_COMMAND, rews.getCommands()); + } + if (rews.getCommandsOverrideDisplay().isEmpty() == false) { + cc.setSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY, rews.getCommandsOverrideDisplay()); + } + if (rews.getPermissions().isEmpty() == false) { + cc.setSessionData(CK.REW_PERMISSION, rews.getPermissions()); + } + if (rews.getMcmmoSkills().isEmpty() == false) { + cc.setSessionData(CK.REW_MCMMO_SKILLS, rews.getMcmmoSkills()); + cc.setSessionData(CK.REW_MCMMO_AMOUNTS, rews.getMcmmoAmounts()); + } + if (rews.getHeroesClasses().isEmpty() == false) { + cc.setSessionData(CK.REW_HEROES_CLASSES, rews.getHeroesClasses()); + cc.setSessionData(CK.REW_HEROES_AMOUNTS, rews.getHeroesAmounts()); + } + if (rews.getPhatLoots().isEmpty() == false) { + cc.setSessionData(CK.REW_PHAT_LOOTS, rews.getPhatLoots()); + } + if (rews.getCustomRewards().isEmpty() == false) { + cc.setSessionData(CK.REW_CUSTOM, new LinkedList(rews.getCustomRewards().keySet())); + cc.setSessionData(CK.REW_CUSTOM_DATA, new LinkedList(rews.getCustomRewards().values())); + } + Planner pln = q.getPlanner(); + if (pln.getStart() != null) { + cc.setSessionData(CK.PLN_START_DATE, pln.getStart()); + } + if (pln.getEnd() != null) { + cc.setSessionData(CK.PLN_END_DATE, pln.getEnd()); + } + if (pln.getRepeat() != -1) { + cc.setSessionData(CK.PLN_REPEAT_CYCLE, pln.getRepeat()); + } + if (pln.getCooldown() != -1) { + cc.setSessionData(CK.PLN_COOLDOWN, pln.getCooldown()); + } + Options opt = q.getOptions(); + cc.setSessionData(CK.OPT_ALLOW_COMMANDS, opt.getAllowCommands()); + cc.setSessionData(CK.OPT_ALLOW_QUITTING, opt.getAllowQuitting()); + cc.setSessionData(CK.OPT_USE_DUNGEONSXL_PLUGIN, opt.getUseDungeonsXLPlugin()); + cc.setSessionData(CK.OPT_USE_PARTIES_PLUGIN, opt.getUsePartiesPlugin()); + cc.setSessionData(CK.OPT_SHARE_PROGRESS_LEVEL, opt.getShareProgressLevel()); + cc.setSessionData(CK.OPT_REQUIRE_SAME_QUEST, opt.getRequireSameQuest()); + // Stages (Objectives) + int index = 1; + for (Stage stage : q.getStages()) { + final String pref = "stage" + index; + index++; + cc.setSessionData(pref, Boolean.TRUE); + if (stage.blocksToBreak != null) { + LinkedList names = new LinkedList(); + LinkedList amnts = new LinkedList(); + LinkedList durab = new LinkedList(); + for (ItemStack e : stage.blocksToBreak) { + names.add(e.getType().name()); + amnts.add(e.getAmount()); + durab.add(e.getDurability()); + } + cc.setSessionData(pref + CK.S_BREAK_NAMES, names); + cc.setSessionData(pref + CK.S_BREAK_AMOUNTS, amnts); + cc.setSessionData(pref + CK.S_BREAK_DURABILITY, durab); + } + if (stage.blocksToDamage != null) { + LinkedList names = new LinkedList(); + LinkedList amnts = new LinkedList(); + LinkedList durab = new LinkedList(); + for (ItemStack e : stage.blocksToDamage) { + names.add(e.getType().name()); + amnts.add(e.getAmount()); + durab.add(e.getDurability()); + } + cc.setSessionData(pref + CK.S_DAMAGE_NAMES, names); + cc.setSessionData(pref + CK.S_DAMAGE_AMOUNTS, amnts); + cc.setSessionData(pref + CK.S_DAMAGE_DURABILITY, durab); + } + if (stage.blocksToPlace != null) { + LinkedList names = new LinkedList(); + LinkedList amnts = new LinkedList(); + LinkedList durab = new LinkedList(); + for (ItemStack e : stage.blocksToPlace) { + names.add(e.getType().name()); + amnts.add(e.getAmount()); + durab.add(e.getDurability()); + } + cc.setSessionData(pref + CK.S_PLACE_NAMES, names); + cc.setSessionData(pref + CK.S_PLACE_AMOUNTS, amnts); + cc.setSessionData(pref + CK.S_PLACE_DURABILITY, durab); + } + if (stage.blocksToUse != null) { + LinkedList names = new LinkedList(); + LinkedList amnts = new LinkedList(); + LinkedList durab = new LinkedList(); + for (ItemStack e : stage.blocksToUse) { + names.add(e.getType().name()); + amnts.add(e.getAmount()); + durab.add(e.getDurability()); + } + cc.setSessionData(pref + CK.S_USE_NAMES, names); + cc.setSessionData(pref + CK.S_USE_AMOUNTS, amnts); + cc.setSessionData(pref + CK.S_USE_DURABILITY, durab); + } + if (stage.blocksToCut != null) { + LinkedList names = new LinkedList(); + LinkedList amnts = new LinkedList(); + LinkedList durab = new LinkedList(); + for (ItemStack e : stage.blocksToCut) { + names.add(e.getType().name()); + amnts.add(e.getAmount()); + durab.add(e.getDurability()); + } + cc.setSessionData(pref + CK.S_CUT_NAMES, names); + cc.setSessionData(pref + CK.S_CUT_AMOUNTS, amnts); + cc.setSessionData(pref + CK.S_CUT_DURABILITY, durab); + } + if (stage.getItemsToCraft().isEmpty() == false) { + LinkedList items = new LinkedList(); + for (ItemStack is : stage.getItemsToCraft()) { + items.add(is); + } + cc.setSessionData(pref + CK.S_CRAFT_ITEMS, items); + } + if (stage.getItemsToSmelt().isEmpty() == false) { + LinkedList items = new LinkedList(); + for (ItemStack is : stage.getItemsToSmelt()) { + items.add(is); + } + cc.setSessionData(pref + CK.S_SMELT_ITEMS, items); + } + if (stage.itemsToEnchant.isEmpty() == false) { + LinkedList enchants = new LinkedList(); + LinkedList names = new LinkedList(); + LinkedList amounts = new LinkedList(); + for (Entry, Integer> e : stage.itemsToEnchant.entrySet()) { + amounts.add(e.getValue()); + for (Entry e2 : e.getKey().entrySet()) { + names.add(e2.getValue().name()); + enchants.add(ItemUtil.getPrettyEnchantmentName(e2.getKey())); + } + } + cc.setSessionData(pref + CK.S_ENCHANT_TYPES, enchants); + cc.setSessionData(pref + CK.S_ENCHANT_NAMES, names); + cc.setSessionData(pref + CK.S_ENCHANT_AMOUNTS, amounts); + } + if (stage.getItemsToBrew().isEmpty() == false) { + LinkedList items = new LinkedList(); + for (ItemStack is : stage.getItemsToBrew()) { + items.add(is); + } + cc.setSessionData(pref + CK.S_BREW_ITEMS, items); + } + if (stage.fishToCatch != null) { + cc.setSessionData(pref + CK.S_FISH, stage.fishToCatch); + } + if (stage.playersToKill != null) { + cc.setSessionData(pref + CK.S_PLAYER_KILL, stage.playersToKill); + } + if (stage.getItemsToDeliver().isEmpty() == false) { + LinkedList items = new LinkedList(); + LinkedList npcs = new LinkedList(); + for (ItemStack is : stage.getItemsToDeliver()) { + items.add(is); + } + for (Integer n : stage.getItemDeliveryTargets()) { + npcs.add(n); + } + cc.setSessionData(pref + CK.S_DELIVERY_ITEMS, items); + cc.setSessionData(pref + CK.S_DELIVERY_NPCS, npcs); + cc.setSessionData(pref + CK.S_DELIVERY_MESSAGES, stage.deliverMessages); + } + if (stage.citizensToInteract.isEmpty() == false) { + LinkedList npcs = new LinkedList(); + for (Integer n : stage.citizensToInteract) { + npcs.add(n); + } + cc.setSessionData(pref + CK.S_NPCS_TO_TALK_TO, npcs); + } + if (stage.citizensToKill.isEmpty() == false) { + LinkedList npcs = new LinkedList(); + for (Integer n : stage.citizensToKill) { + npcs.add(n); + } + cc.setSessionData(pref + CK.S_NPCS_TO_KILL, npcs); + cc.setSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS, stage.citizenNumToKill); + } + if (stage.mobsToKill.isEmpty() == false) { + LinkedList mobs = new LinkedList(); + for (EntityType et : stage.mobsToKill) { + mobs.add(MiscUtil.getPrettyMobName(et)); + } + cc.setSessionData(pref + CK.S_MOB_TYPES, mobs); + cc.setSessionData(pref + CK.S_MOB_AMOUNTS, stage.mobNumToKill); + if (stage.locationsToKillWithin.isEmpty() == false) { + LinkedList locs = new LinkedList(); + for (Location l : stage.locationsToKillWithin) { + locs.add(Quests.getLocationInfo(l)); + } + cc.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS, locs); + cc.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS, stage.radiiToKillWithin); + cc.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES, stage.killNames); + } + } + if (stage.locationsToReach.isEmpty() == false) { + LinkedList locs = new LinkedList(); + for (Location l : stage.locationsToReach) { + locs.add(Quests.getLocationInfo(l)); + } + cc.setSessionData(pref + CK.S_REACH_LOCATIONS, locs); + cc.setSessionData(pref + CK.S_REACH_LOCATIONS_RADIUS, stage.radiiToReachWithin); + cc.setSessionData(pref + CK.S_REACH_LOCATIONS_NAMES, stage.locationNames); + } + if (stage.mobsToTame.isEmpty() == false) { + LinkedList mobs = new LinkedList(); + LinkedList amnts = new LinkedList(); + for (Entry e : stage.mobsToTame.entrySet()) { + mobs.add(MiscUtil.getPrettyMobName(e.getKey())); + amnts.add(e.getValue()); + } + cc.setSessionData(pref + CK.S_TAME_TYPES, mobs); + cc.setSessionData(pref + CK.S_TAME_AMOUNTS, amnts); + } + if (stage.sheepToShear.isEmpty() == false) { + LinkedList colors = new LinkedList(); + LinkedList amnts = new LinkedList(); + for (Entry e : stage.sheepToShear.entrySet()) { + colors.add(MiscUtil.getPrettyDyeColorName(e.getKey())); + amnts.add(e.getValue()); + } + cc.setSessionData(pref + CK.S_SHEAR_COLORS, colors); + cc.setSessionData(pref + CK.S_SHEAR_AMOUNTS, amnts); + } + if (stage.passwordDisplays.isEmpty() == false) { + cc.setSessionData(pref + CK.S_PASSWORD_DISPLAYS, stage.passwordDisplays); + cc.setSessionData(pref + CK.S_PASSWORD_PHRASES, stage.passwordPhrases); + } + if (stage.customObjectives.isEmpty() == false) { + LinkedList list = new LinkedList(); + LinkedList countList = new LinkedList(); + LinkedList> datamapList = new LinkedList>(); + for (int i = 0; i < stage.customObjectives.size(); i++) { + list.add(stage.customObjectives.get(i).getName()); + countList.add(stage.customObjectiveCounts.get(i)); + } + datamapList.addAll(stage.customObjectiveData); + cc.setSessionData(pref + CK.S_CUSTOM_OBJECTIVES, list); + cc.setSessionData(pref + CK.S_CUSTOM_OBJECTIVES_COUNT, countList); + cc.setSessionData(pref + CK.S_CUSTOM_OBJECTIVES_DATA, datamapList); + } + if (stage.startEvent != null) { + cc.setSessionData(pref + CK.S_START_EVENT, stage.startEvent.getName()); + } + if (stage.finishEvent != null) { + cc.setSessionData(pref + CK.S_FINISH_EVENT, stage.finishEvent.getName()); + } + if (stage.deathEvent != null) { + cc.setSessionData(pref + CK.S_DEATH_EVENT, stage.deathEvent.getName()); + } + if (stage.disconnectEvent != null) { + cc.setSessionData(pref + CK.S_DISCONNECT_EVENT, stage.disconnectEvent.getName()); + } + if (stage.chatEvents != null) { + LinkedList chatEvents = new LinkedList(); + LinkedList chatEventTriggers = new LinkedList(); + for (String s : stage.chatEvents.keySet()) { + chatEventTriggers.add(s); + chatEvents.add(stage.chatEvents.get(s).getName()); + } + cc.setSessionData(pref + CK.S_CHAT_EVENTS, chatEvents); + cc.setSessionData(pref + CK.S_CHAT_EVENT_TRIGGERS, chatEventTriggers); + } + if (stage.commandEvents != null) { + LinkedList commandEvents = new LinkedList(); + LinkedList commandEventTriggers = new LinkedList(); + for (String s : stage.commandEvents.keySet()) { + commandEventTriggers.add(s); + commandEvents.add(stage.commandEvents.get(s).getName()); + } + cc.setSessionData(pref + CK.S_COMMAND_EVENTS, commandEvents); + cc.setSessionData(pref + CK.S_COMMAND_EVENT_TRIGGERS, commandEventTriggers); + } + if (stage.delay != -1) { + cc.setSessionData(pref + CK.S_DELAY, stage.delay); + if (stage.delayMessage != null) { + cc.setSessionData(pref + CK.S_DELAY_MESSAGE, stage.delayMessage); + } + } + if (stage.script != null) { + cc.setSessionData(pref + CK.S_DENIZEN, stage.script); + } + if (stage.objectiveOverride != null) { + cc.setSessionData(pref + CK.S_OVERRIDE_DISPLAY, stage.objectiveOverride); + } + if (stage.completeMessage != null) { + cc.setSessionData(pref + CK.S_COMPLETE_MESSAGE, stage.completeMessage); + } + if (stage.startMessage != null) { + cc.setSessionData(pref + CK.S_START_MESSAGE, stage.startMessage); + } + } + } private class QuestNamePrompt extends StringPrompt { @@ -1639,382 +2015,6 @@ public class QuestFactory implements ConversationAbandonedListener { sch.set("require-same-quest", requireSameQuestOpt); } - @SuppressWarnings("deprecation") - public static void loadQuest(ConversationContext cc, Quest q) { - cc.setSessionData(CK.ED_QUEST_EDIT, q.getName()); - cc.setSessionData(CK.Q_NAME, q.getName()); - if (q.npcStart != null) { - cc.setSessionData(CK.Q_START_NPC, q.npcStart.getId()); - } - cc.setSessionData(CK.Q_START_BLOCK, q.blockStart); - cc.setSessionData(CK.Q_ASK_MESSAGE, q.description); - cc.setSessionData(CK.Q_FINISH_MESSAGE, q.finished); - if (q.initialAction != null) { - cc.setSessionData(CK.Q_INITIAL_EVENT, q.initialAction.getName()); - } - if (q.region != null) { - cc.setSessionData(CK.Q_REGION, q.region); - } - if (q.guiDisplay != null) { - cc.setSessionData(CK.Q_GUIDISPLAY, q.guiDisplay); - } - Requirements reqs = q.getRequirements(); - if (reqs.getMoney() != 0) { - cc.setSessionData(CK.REQ_MONEY, reqs.getMoney()); - } - if (reqs.getQuestPoints() != 0) { - cc.setSessionData(CK.REQ_QUEST_POINTS, reqs.getQuestPoints()); - } - if (reqs.getItems().isEmpty() == false) { - cc.setSessionData(CK.REQ_ITEMS, reqs.getItems()); - cc.setSessionData(CK.REQ_ITEMS_REMOVE, reqs.getRemoveItems()); - } - if (reqs.getNeededQuests().isEmpty() == false) { - cc.setSessionData(CK.REQ_QUEST, reqs.getNeededQuests()); - } - if (reqs.getBlockQuests().isEmpty() == false) { - cc.setSessionData(CK.REQ_QUEST_BLOCK, reqs.getBlockQuests()); - } - if (reqs.getMcmmoSkills().isEmpty() == false) { - cc.setSessionData(CK.REQ_MCMMO_SKILLS, reqs.getMcmmoAmounts()); - cc.setSessionData(CK.REQ_MCMMO_SKILL_AMOUNTS, reqs.getMcmmoAmounts()); - } - if (reqs.getPermissions().isEmpty() == false) { - cc.setSessionData(CK.REQ_PERMISSION, reqs.getPermissions()); - } - if (reqs.getHeroesPrimaryClass() != null) { - cc.setSessionData(CK.REQ_HEROES_PRIMARY_CLASS, reqs.getHeroesPrimaryClass()); - } - if (reqs.getHeroesSecondaryClass() != null) { - cc.setSessionData(CK.REQ_HEROES_SECONDARY_CLASS, reqs.getHeroesSecondaryClass()); - } - if (reqs.getFailRequirements() != null) { - cc.setSessionData(CK.Q_FAIL_MESSAGE, reqs.getFailRequirements()); - } - if (reqs.getCustomRequirements().isEmpty() == false) { - LinkedList list = new LinkedList(); - LinkedList> datamapList = new LinkedList>(); - for (Entry> entry : reqs.getCustomRequirements().entrySet()) { - list.add(entry.getKey()); - datamapList.add(entry.getValue()); - } - cc.setSessionData(CK.REQ_CUSTOM, list); - cc.setSessionData(CK.REQ_CUSTOM_DATA, datamapList); - } - Rewards rews = q.getRewards(); - if (rews.getMoney() != 0) { - cc.setSessionData(CK.REW_MONEY, rews.getMoney()); - } - if (rews.getQuestPoints() != 0) { - cc.setSessionData(CK.REW_QUEST_POINTS, rews.getQuestPoints()); - } - if (rews.getExp() != 0) { - cc.setSessionData(CK.REW_EXP, rews.getExp()); - } - if (rews.getItems().isEmpty() == false) { - cc.setSessionData(CK.REW_ITEMS, rews.getItems()); - } - if (rews.getCommands().isEmpty() == false) { - cc.setSessionData(CK.REW_COMMAND, rews.getCommands()); - } - if (rews.getCommandsOverrideDisplay().isEmpty() == false) { - cc.setSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY, rews.getCommandsOverrideDisplay()); - } - if (rews.getPermissions().isEmpty() == false) { - cc.setSessionData(CK.REW_PERMISSION, rews.getPermissions()); - } - if (rews.getMcmmoSkills().isEmpty() == false) { - cc.setSessionData(CK.REW_MCMMO_SKILLS, rews.getMcmmoSkills()); - cc.setSessionData(CK.REW_MCMMO_AMOUNTS, rews.getMcmmoAmounts()); - } - if (rews.getHeroesClasses().isEmpty() == false) { - cc.setSessionData(CK.REW_HEROES_CLASSES, rews.getHeroesClasses()); - cc.setSessionData(CK.REW_HEROES_AMOUNTS, rews.getHeroesAmounts()); - } - if (rews.getPhatLoots().isEmpty() == false) { - cc.setSessionData(CK.REW_PHAT_LOOTS, rews.getPhatLoots()); - } - if (rews.getCustomRewards().isEmpty() == false) { - cc.setSessionData(CK.REW_CUSTOM, new LinkedList(rews.getCustomRewards().keySet())); - cc.setSessionData(CK.REW_CUSTOM_DATA, new LinkedList(rews.getCustomRewards().values())); - } - Planner pln = q.getPlanner(); - if (pln.getStart() != null) { - cc.setSessionData(CK.PLN_START_DATE, pln.getStart()); - } - if (pln.getEnd() != null) { - cc.setSessionData(CK.PLN_END_DATE, pln.getEnd()); - } - if (pln.getRepeat() != -1) { - cc.setSessionData(CK.PLN_REPEAT_CYCLE, pln.getRepeat()); - } - if (pln.getCooldown() != -1) { - cc.setSessionData(CK.PLN_COOLDOWN, pln.getCooldown()); - } - Options opt = q.getOptions(); - cc.setSessionData(CK.OPT_ALLOW_COMMANDS, opt.getAllowCommands()); - cc.setSessionData(CK.OPT_ALLOW_QUITTING, opt.getAllowQuitting()); - cc.setSessionData(CK.OPT_USE_DUNGEONSXL_PLUGIN, opt.getUseDungeonsXLPlugin()); - cc.setSessionData(CK.OPT_USE_PARTIES_PLUGIN, opt.getUsePartiesPlugin()); - cc.setSessionData(CK.OPT_SHARE_PROGRESS_LEVEL, opt.getShareProgressLevel()); - cc.setSessionData(CK.OPT_REQUIRE_SAME_QUEST, opt.getRequireSameQuest()); - // Stages (Objectives) - int index = 1; - for (Stage stage : q.getStages()) { - final String pref = "stage" + index; - index++; - cc.setSessionData(pref, Boolean.TRUE); - if (stage.blocksToBreak != null) { - LinkedList names = new LinkedList(); - LinkedList amnts = new LinkedList(); - LinkedList durab = new LinkedList(); - for (ItemStack e : stage.blocksToBreak) { - names.add(e.getType().name()); - amnts.add(e.getAmount()); - durab.add(e.getDurability()); - } - cc.setSessionData(pref + CK.S_BREAK_NAMES, names); - cc.setSessionData(pref + CK.S_BREAK_AMOUNTS, amnts); - cc.setSessionData(pref + CK.S_BREAK_DURABILITY, durab); - } - if (stage.blocksToDamage != null) { - LinkedList names = new LinkedList(); - LinkedList amnts = new LinkedList(); - LinkedList durab = new LinkedList(); - for (ItemStack e : stage.blocksToDamage) { - names.add(e.getType().name()); - amnts.add(e.getAmount()); - durab.add(e.getDurability()); - } - cc.setSessionData(pref + CK.S_DAMAGE_NAMES, names); - cc.setSessionData(pref + CK.S_DAMAGE_AMOUNTS, amnts); - cc.setSessionData(pref + CK.S_DAMAGE_DURABILITY, durab); - } - if (stage.blocksToPlace != null) { - LinkedList names = new LinkedList(); - LinkedList amnts = new LinkedList(); - LinkedList durab = new LinkedList(); - for (ItemStack e : stage.blocksToPlace) { - names.add(e.getType().name()); - amnts.add(e.getAmount()); - durab.add(e.getDurability()); - } - cc.setSessionData(pref + CK.S_PLACE_NAMES, names); - cc.setSessionData(pref + CK.S_PLACE_AMOUNTS, amnts); - cc.setSessionData(pref + CK.S_PLACE_DURABILITY, durab); - } - if (stage.blocksToUse != null) { - LinkedList names = new LinkedList(); - LinkedList amnts = new LinkedList(); - LinkedList durab = new LinkedList(); - for (ItemStack e : stage.blocksToUse) { - names.add(e.getType().name()); - amnts.add(e.getAmount()); - durab.add(e.getDurability()); - } - cc.setSessionData(pref + CK.S_USE_NAMES, names); - cc.setSessionData(pref + CK.S_USE_AMOUNTS, amnts); - cc.setSessionData(pref + CK.S_USE_DURABILITY, durab); - } - if (stage.blocksToCut != null) { - LinkedList names = new LinkedList(); - LinkedList amnts = new LinkedList(); - LinkedList durab = new LinkedList(); - for (ItemStack e : stage.blocksToCut) { - names.add(e.getType().name()); - amnts.add(e.getAmount()); - durab.add(e.getDurability()); - } - cc.setSessionData(pref + CK.S_CUT_NAMES, names); - cc.setSessionData(pref + CK.S_CUT_AMOUNTS, amnts); - cc.setSessionData(pref + CK.S_CUT_DURABILITY, durab); - } - if (stage.getItemsToCraft().isEmpty() == false) { - LinkedList items = new LinkedList(); - for (ItemStack is : stage.getItemsToCraft()) { - items.add(is); - } - cc.setSessionData(pref + CK.S_CRAFT_ITEMS, items); - } - if (stage.getItemsToSmelt().isEmpty() == false) { - LinkedList items = new LinkedList(); - for (ItemStack is : stage.getItemsToSmelt()) { - items.add(is); - } - cc.setSessionData(pref + CK.S_SMELT_ITEMS, items); - } - if (stage.itemsToEnchant.isEmpty() == false) { - LinkedList enchants = new LinkedList(); - LinkedList names = new LinkedList(); - LinkedList amounts = new LinkedList(); - for (Entry, Integer> e : stage.itemsToEnchant.entrySet()) { - amounts.add(e.getValue()); - for (Entry e2 : e.getKey().entrySet()) { - names.add(e2.getValue().name()); - enchants.add(ItemUtil.getPrettyEnchantmentName(e2.getKey())); - } - } - cc.setSessionData(pref + CK.S_ENCHANT_TYPES, enchants); - cc.setSessionData(pref + CK.S_ENCHANT_NAMES, names); - cc.setSessionData(pref + CK.S_ENCHANT_AMOUNTS, amounts); - } - if (stage.getItemsToBrew().isEmpty() == false) { - LinkedList items = new LinkedList(); - for (ItemStack is : stage.getItemsToBrew()) { - items.add(is); - } - cc.setSessionData(pref + CK.S_BREW_ITEMS, items); - } - if (stage.fishToCatch != null) { - cc.setSessionData(pref + CK.S_FISH, stage.fishToCatch); - } - if (stage.playersToKill != null) { - cc.setSessionData(pref + CK.S_PLAYER_KILL, stage.playersToKill); - } - if (stage.getItemsToDeliver().isEmpty() == false) { - LinkedList items = new LinkedList(); - LinkedList npcs = new LinkedList(); - for (ItemStack is : stage.getItemsToDeliver()) { - items.add(is); - } - for (Integer n : stage.getItemDeliveryTargets()) { - npcs.add(n); - } - cc.setSessionData(pref + CK.S_DELIVERY_ITEMS, items); - cc.setSessionData(pref + CK.S_DELIVERY_NPCS, npcs); - cc.setSessionData(pref + CK.S_DELIVERY_MESSAGES, stage.deliverMessages); - } - if (stage.citizensToInteract.isEmpty() == false) { - LinkedList npcs = new LinkedList(); - for (Integer n : stage.citizensToInteract) { - npcs.add(n); - } - cc.setSessionData(pref + CK.S_NPCS_TO_TALK_TO, npcs); - } - if (stage.citizensToKill.isEmpty() == false) { - LinkedList npcs = new LinkedList(); - for (Integer n : stage.citizensToKill) { - npcs.add(n); - } - cc.setSessionData(pref + CK.S_NPCS_TO_KILL, npcs); - cc.setSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS, stage.citizenNumToKill); - } - if (stage.mobsToKill.isEmpty() == false) { - LinkedList mobs = new LinkedList(); - for (EntityType et : stage.mobsToKill) { - mobs.add(MiscUtil.getPrettyMobName(et)); - } - cc.setSessionData(pref + CK.S_MOB_TYPES, mobs); - cc.setSessionData(pref + CK.S_MOB_AMOUNTS, stage.mobNumToKill); - if (stage.locationsToKillWithin.isEmpty() == false) { - LinkedList locs = new LinkedList(); - for (Location l : stage.locationsToKillWithin) { - locs.add(Quests.getLocationInfo(l)); - } - cc.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS, locs); - cc.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_RADIUS, stage.radiiToKillWithin); - cc.setSessionData(pref + CK.S_MOB_KILL_LOCATIONS_NAMES, stage.killNames); - } - } - if (stage.locationsToReach.isEmpty() == false) { - LinkedList locs = new LinkedList(); - for (Location l : stage.locationsToReach) { - locs.add(Quests.getLocationInfo(l)); - } - cc.setSessionData(pref + CK.S_REACH_LOCATIONS, locs); - cc.setSessionData(pref + CK.S_REACH_LOCATIONS_RADIUS, stage.radiiToReachWithin); - cc.setSessionData(pref + CK.S_REACH_LOCATIONS_NAMES, stage.locationNames); - } - if (stage.mobsToTame.isEmpty() == false) { - LinkedList mobs = new LinkedList(); - LinkedList amnts = new LinkedList(); - for (Entry e : stage.mobsToTame.entrySet()) { - mobs.add(MiscUtil.getPrettyMobName(e.getKey())); - amnts.add(e.getValue()); - } - cc.setSessionData(pref + CK.S_TAME_TYPES, mobs); - cc.setSessionData(pref + CK.S_TAME_AMOUNTS, amnts); - } - if (stage.sheepToShear.isEmpty() == false) { - LinkedList colors = new LinkedList(); - LinkedList amnts = new LinkedList(); - for (Entry e : stage.sheepToShear.entrySet()) { - colors.add(MiscUtil.getPrettyDyeColorName(e.getKey())); - amnts.add(e.getValue()); - } - cc.setSessionData(pref + CK.S_SHEAR_COLORS, colors); - cc.setSessionData(pref + CK.S_SHEAR_AMOUNTS, amnts); - } - if (stage.passwordDisplays.isEmpty() == false) { - cc.setSessionData(pref + CK.S_PASSWORD_DISPLAYS, stage.passwordDisplays); - cc.setSessionData(pref + CK.S_PASSWORD_PHRASES, stage.passwordPhrases); - } - if (stage.customObjectives.isEmpty() == false) { - LinkedList list = new LinkedList(); - LinkedList countList = new LinkedList(); - LinkedList> datamapList = new LinkedList>(); - for (int i = 0; i < stage.customObjectives.size(); i++) { - list.add(stage.customObjectives.get(i).getName()); - countList.add(stage.customObjectiveCounts.get(i)); - } - datamapList.addAll(stage.customObjectiveData); - cc.setSessionData(pref + CK.S_CUSTOM_OBJECTIVES, list); - cc.setSessionData(pref + CK.S_CUSTOM_OBJECTIVES_COUNT, countList); - cc.setSessionData(pref + CK.S_CUSTOM_OBJECTIVES_DATA, datamapList); - } - if (stage.startEvent != null) { - cc.setSessionData(pref + CK.S_START_EVENT, stage.startEvent.getName()); - } - if (stage.finishEvent != null) { - cc.setSessionData(pref + CK.S_FINISH_EVENT, stage.finishEvent.getName()); - } - if (stage.deathEvent != null) { - cc.setSessionData(pref + CK.S_DEATH_EVENT, stage.deathEvent.getName()); - } - if (stage.disconnectEvent != null) { - cc.setSessionData(pref + CK.S_DISCONNECT_EVENT, stage.disconnectEvent.getName()); - } - if (stage.chatEvents != null) { - LinkedList chatEvents = new LinkedList(); - LinkedList chatEventTriggers = new LinkedList(); - for (String s : stage.chatEvents.keySet()) { - chatEventTriggers.add(s); - chatEvents.add(stage.chatEvents.get(s).getName()); - } - cc.setSessionData(pref + CK.S_CHAT_EVENTS, chatEvents); - cc.setSessionData(pref + CK.S_CHAT_EVENT_TRIGGERS, chatEventTriggers); - } - if (stage.commandEvents != null) { - LinkedList commandEvents = new LinkedList(); - LinkedList commandEventTriggers = new LinkedList(); - for (String s : stage.commandEvents.keySet()) { - commandEventTriggers.add(s); - commandEvents.add(stage.commandEvents.get(s).getName()); - } - cc.setSessionData(pref + CK.S_COMMAND_EVENTS, commandEvents); - cc.setSessionData(pref + CK.S_COMMAND_EVENT_TRIGGERS, commandEventTriggers); - } - if (stage.delay != -1) { - cc.setSessionData(pref + CK.S_DELAY, stage.delay); - if (stage.delayMessage != null) { - cc.setSessionData(pref + CK.S_DELAY_MESSAGE, stage.delayMessage); - } - } - if (stage.script != null) { - cc.setSessionData(pref + CK.S_DENIZEN, stage.script); - } - if (stage.objectiveOverride != null) { - cc.setSessionData(pref + CK.S_OVERRIDE_DISPLAY, stage.objectiveOverride); - } - if (stage.completeMessage != null) { - cc.setSessionData(pref + CK.S_COMPLETE_MESSAGE, stage.completeMessage); - } - if (stage.startMessage != null) { - cc.setSessionData(pref + CK.S_START_MESSAGE, stage.startMessage); - } - } - } - private class SelectDeletePrompt extends StringPrompt { @Override diff --git a/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java b/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java index dc6e2bf69..82e155886 100644 --- a/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java +++ b/main/src/main/java/me/blackvein/quests/actions/ActionFactory.java @@ -51,6 +51,8 @@ import me.blackvein.quests.QuestMob; import me.blackvein.quests.Quester; import me.blackvein.quests.Quests; import me.blackvein.quests.Stage; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenCreatePromptEvent; +import me.blackvein.quests.events.editor.actions.ActionsEditorPostOpenMenuPromptEvent; import me.blackvein.quests.prompts.ItemStackPrompt; import me.blackvein.quests.util.CK; import me.blackvein.quests.util.ConfigUtil; @@ -146,104 +148,285 @@ public class ActionFactory implements ConversationAbandonedListener { } } - private class MenuPrompt extends FixedSetPrompt { - - public MenuPrompt() { - super("1", "2", "3", "4"); + public class MenuPrompt extends NumericPrompt { + private final int size = 4; + + public int getSize() { + return size; + } + + public String getTitle() { + return Lang.get("eventEditorTitle"); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + case 3: + return ChatColor.BLUE; + case 4: + return ChatColor.RED; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch (number) { + case 1: + return ChatColor.YELLOW + Lang.get("eventEditorCreate"); + case 2: + return ChatColor.YELLOW + Lang.get("eventEditorEdit"); + case 3: + return ChatColor.YELLOW + Lang.get("eventEditorDelete"); + case 4: + return ChatColor.RED + Lang.get("exit"); + default: + return null; + } } @Override public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + Lang.get("eventEditorTitle") + "\n" + ChatColor.BLUE + "" + ChatColor.BOLD - + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("eventEditorCreate") + "\n" - + ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorEdit") + "\n" + ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET - + ChatColor.YELLOW + " - " + Lang.get("eventEditorDelete") + "\n" + ChatColor.GREEN + "" - + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("exit"); + ActionsEditorPostOpenMenuPromptEvent event = new ActionsEditorPostOpenMenuPromptEvent(context); + plugin.getServer().getPluginManager().callEvent(event); + String text = ChatColor.GOLD + getTitle() + "\n"; + for (int i = 1; i <= size; i++) { + text += getNumberColor(context, i) + "" + ChatColor.BOLD + i + ChatColor.RESET + " - " + + getSelectionText(context, i) + "\n"; + } return text; } @Override - protected Prompt acceptValidatedInput(ConversationContext context, String input) { + protected Prompt acceptValidatedInput(ConversationContext context, Number input) { final Player player = (Player) context.getForWhom(); - if (input.equalsIgnoreCase("1")) { - if (player.hasPermission("quests.editor.actions.create") - || player.hasPermission("quests.editor.events.create")) { - context.setSessionData(CK.E_OLD_EVENT, ""); - return new ActionNamePrompt(); - } else { - player.sendMessage(ChatColor.RED + Lang.get("noPermission")); - return new MenuPrompt(); - } - } else if (input.equalsIgnoreCase("2")) { - if (player.hasPermission("quests.editor.actions.edit") - || player.hasPermission("quests.editor.events.edit")) { - if (plugin.getActions().isEmpty()) { - ((Player) context.getForWhom()).sendMessage(ChatColor.YELLOW - + Lang.get("eventEditorNoneToEdit")); - return new MenuPrompt(); + switch (input.intValue()) { + case 1: + if (player.hasPermission("quests.editor.actions.create") + || player.hasPermission("quests.editor.events.create")) { + context.setSessionData(CK.E_OLD_EVENT, ""); + return new ActionNamePrompt(); } else { - return new SelectEditPrompt(); - } - } else { - player.sendMessage(ChatColor.RED + Lang.get("noPermission")); - return new MenuPrompt(); - } - } else if (input.equalsIgnoreCase("3")) { - if (player.hasPermission("quests.editor.actions.delete") - || player.hasPermission("quests.editor.events.delete")) { - if (plugin.getActions().isEmpty()) { - ((Player) context.getForWhom()).sendMessage(ChatColor.YELLOW - + Lang.get("eventEditorNoneToDelete")); + player.sendMessage(ChatColor.RED + Lang.get("noPermission")); return new MenuPrompt(); - } else { - return new SelectDeletePrompt(); } - } else { - player.sendMessage(ChatColor.RED + Lang.get("noPermission")); - return new MenuPrompt(); - } - } else if (input.equalsIgnoreCase("4")) { - ((Player) context.getForWhom()).sendMessage(ChatColor.YELLOW + Lang.get("exited")); - return Prompt.END_OF_CONVERSATION; + case 2: + if (player.hasPermission("quests.editor.actions.edit") + || player.hasPermission("quests.editor.events.edit")) { + if (plugin.getActions().isEmpty()) { + ((Player) context.getForWhom()).sendMessage(ChatColor.YELLOW + + Lang.get("eventEditorNoneToEdit")); + return new MenuPrompt(); + } else { + return new SelectEditPrompt(); + } + } else { + player.sendMessage(ChatColor.RED + Lang.get("noPermission")); + return new MenuPrompt(); + } + case 3: + if (player.hasPermission("quests.editor.actions.delete") + || player.hasPermission("quests.editor.events.delete")) { + if (plugin.getActions().isEmpty()) { + ((Player) context.getForWhom()).sendMessage(ChatColor.YELLOW + + Lang.get("eventEditorNoneToDelete")); + return new MenuPrompt(); + } else { + return new SelectDeletePrompt(); + } + } else { + player.sendMessage(ChatColor.RED + Lang.get("noPermission")); + return new MenuPrompt(); + } + case 4: + ((Player) context.getForWhom()).sendMessage(ChatColor.YELLOW + Lang.get("exited")); + return Prompt.END_OF_CONVERSATION; + default: + return null; } - return null; } } public Prompt returnToMenu() { return new CreateMenuPrompt(); } + + public class CreateMenuPrompt extends NumericPrompt { + private final int size = 9; + + public int getSize() { + return size; + } + + public String getTitle(ConversationContext context) { + return Lang.get("event") + ": " + context.getSessionData(CK.E_NAME); + } + + public ChatColor getNumberColor(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + return ChatColor.BLUE; + case 8: + return ChatColor.GREEN; + case 9: + return ChatColor.RED; + default: + return null; + } + } + + public String getSelectionText(ConversationContext context, int number) { + switch (number) { + case 1: + return ChatColor.YELLOW + Lang.get("eventEditorSetName"); + case 2: + return ChatColor.GOLD + Lang.get("eventEditorPlayer"); + case 3: + return ChatColor.GOLD + Lang.get("eventEditorTimer"); + case 4: + return ChatColor.GOLD + Lang.get("eventEditorEffect"); + case 5: + return ChatColor.GOLD + Lang.get("eventEditorWeather"); + case 6: + return ChatColor.YELLOW + Lang.get("eventEditorSetMobSpawns"); + case 7: + return ChatColor.YELLOW + Lang.get("eventEditorFailQuest") + ":"; + case 8: + return ChatColor.GREEN + Lang.get("save"); + case 9: + return ChatColor.RED + Lang.get("exit"); + default: + return null; + } + } + + @SuppressWarnings("unchecked") + public String getAdditionalText(ConversationContext context, int number) { + switch (number) { + case 1: + case 2: + case 3: + case 4: + case 5: + return ""; + case 6: + if (context.getSessionData(CK.E_MOB_TYPES) == null) { + return ChatColor.GRAY + "(" + Lang.get("noneSet") + ")"; + } else { + LinkedList types = (LinkedList) context.getSessionData(CK.E_MOB_TYPES); + String text = ""; + for (String s : types) { + QuestMob qm = QuestMob.fromString(s); + text += ChatColor.GRAY + " - " + ChatColor.AQUA + qm.getType().name() + + ((qm.getName() != null) ? ": " + qm.getName() : "") + ChatColor.GRAY + " x " + + ChatColor.DARK_AQUA + qm.getSpawnAmounts() + ChatColor.GRAY + " -> " + + ChatColor.GREEN + ConfigUtil.getLocationInfo(qm.getSpawnLocation()) + "\n"; + } + return text; + } + case 7: + if (context.getSessionData(CK.E_FAIL_QUEST) == null) { + context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord")); + } + return "" + ChatColor.AQUA + context.getSessionData(CK.E_FAIL_QUEST); + case 8: + case 9: + return ""; + default: + return null; + } + } - public static void clearData(ConversationContext context) { - context.setSessionData(CK.E_OLD_EVENT, null); - context.setSessionData(CK.E_NAME, null); - context.setSessionData(CK.E_MESSAGE, null); - context.setSessionData(CK.E_CLEAR_INVENTORY, null); - context.setSessionData(CK.E_FAIL_QUEST, null); - context.setSessionData(CK.E_ITEMS, null); - context.setSessionData(CK.E_ITEMS_AMOUNTS, null); - context.setSessionData(CK.E_EXPLOSIONS, null); - context.setSessionData(CK.E_EFFECTS, null); - context.setSessionData(CK.E_EFFECTS_LOCATIONS, null); - context.setSessionData(CK.E_WORLD_STORM, null); - context.setSessionData(CK.E_WORLD_STORM_DURATION, null); - context.setSessionData(CK.E_WORLD_THUNDER, null); - context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null); - context.setSessionData(CK.E_MOB_TYPES, null); - context.setSessionData(CK.E_LIGHTNING, null); - context.setSessionData(CK.E_POTION_TYPES, null); - context.setSessionData(CK.E_POTION_DURATIONS, null); - context.setSessionData(CK.E_POTION_STRENGHT, null); - context.setSessionData(CK.E_HUNGER, null); - context.setSessionData(CK.E_SATURATION, null); - context.setSessionData(CK.E_HEALTH, null); - context.setSessionData(CK.E_TELEPORT, null); - context.setSessionData(CK.E_COMMANDS, null); - context.setSessionData(CK.E_TIMER, null); - context.setSessionData(CK.E_CANCEL_TIMER, null); + @Override + public String getPromptText(ConversationContext context) { + ActionsEditorPostOpenCreatePromptEvent event = new ActionsEditorPostOpenCreatePromptEvent(context); + plugin.getServer().getPluginManager().callEvent(event); + + String text = ChatColor.GOLD + "- " + getTitle(context).replaceFirst(": ", ": " + ChatColor.AQUA) + + ChatColor.GOLD + " -\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 + public Prompt acceptValidatedInput(ConversationContext context, Number input) { + switch (input.intValue()) { + case 1: + return new SetNamePrompt(); + case 2: + return new PlayerPrompt(); + case 3: + return new TimerPrompt(); + case 4: + return new EffectPrompt(); + case 5: + return new WeatherPrompt(); + case 6: + return new MobPrompt(); + case 7: + String s = (String) context.getSessionData(CK.E_FAIL_QUEST); + if (s.equalsIgnoreCase(Lang.get("yesWord"))) { + context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord")); + } else { + context.setSessionData(CK.E_FAIL_QUEST, Lang.get("yesWord")); + } + return new CreateMenuPrompt(); + case 8: + if (context.getSessionData(CK.E_OLD_EVENT) != null) { + return new SavePrompt((String) context.getSessionData(CK.E_OLD_EVENT)); + } else { + return new SavePrompt(null); + } + case 9: + return new ExitPrompt(); + default: + return null; + } + } } + private class SelectEditPrompt extends StringPrompt { + + @Override + public String getPromptText(ConversationContext context) { + String text = ChatColor.GOLD + "- " + Lang.get("eventEditorEdit") + " -\n"; + for (Action a : plugin.getActions()) { + text += ChatColor.AQUA + a.getName() + ChatColor.YELLOW + ", "; + } + text = text.substring(0, text.length() - 2) + "\n"; + text += ChatColor.YELLOW + Lang.get("eventEditorEnterEventName"); + return text; + } + + @Override + public Prompt acceptInput(ConversationContext context, String input) { + if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { + Action a = plugin.getAction(input); + if (a != null) { + context.setSessionData(CK.E_OLD_EVENT, a.getName()); + context.setSessionData(CK.E_NAME, a.getName()); + loadData(a, context); + return new CreateMenuPrompt(); + } + ((Player) context.getForWhom()).sendMessage(ChatColor.RED + Lang.get("eventEditorNotFound")); + return new SelectEditPrompt(); + } else { + return new MenuPrompt(); + } + } + } + public static void loadData(Action event, ConversationContext context) { if (event.message != null) { context.setSessionData(CK.E_MESSAGE, event.message); @@ -338,37 +521,6 @@ public class ActionFactory implements ConversationAbandonedListener { } } - private class SelectEditPrompt extends StringPrompt { - - @Override - public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + "- " + Lang.get("eventEditorEdit") + " -\n"; - for (Action a : plugin.getActions()) { - text += ChatColor.AQUA + a.getName() + ChatColor.YELLOW + ", "; - } - text = text.substring(0, text.length() - 2) + "\n"; - text += ChatColor.YELLOW + Lang.get("eventEditorEnterEventName"); - return text; - } - - @Override - public Prompt acceptInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase(Lang.get("cmdCancel")) == false) { - Action a = plugin.getAction(input); - if (a != null) { - context.setSessionData(CK.E_OLD_EVENT, a.getName()); - context.setSessionData(CK.E_NAME, a.getName()); - loadData(a, context); - return new CreateMenuPrompt(); - } - ((Player) context.getForWhom()).sendMessage(ChatColor.RED + Lang.get("eventEditorNotFound")); - return new SelectEditPrompt(); - } else { - return new MenuPrompt(); - } - } - } - private class SelectDeletePrompt extends StringPrompt { @Override @@ -443,90 +595,6 @@ public class ActionFactory implements ConversationAbandonedListener { } } } - - private class CreateMenuPrompt extends FixedSetPrompt { - - public CreateMenuPrompt() { - super("1", "2", "3", "4", "5", "6", "7", "8", "9"); - } - - @SuppressWarnings("unchecked") - @Override - public String getPromptText(ConversationContext context) { - String text = ChatColor.GOLD + "- " + Lang.get("event") + ": " + ChatColor.AQUA - + context.getSessionData(CK.E_NAME) + ChatColor.GOLD + " -\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetName") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GOLD + " - " - + Lang.get("eventEditorPlayer") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.GOLD + " - " - + Lang.get("eventEditorTimer") +"\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.GOLD + " - " - + Lang.get("eventEditorEffect") +"\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "5" + ChatColor.RESET + ChatColor.GOLD + " - " - + Lang.get("eventEditorWeather") +"\n"; - if (context.getSessionData(CK.E_MOB_TYPES) == null) { - text += ChatColor.BLUE + "" + ChatColor.BOLD + "6" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetMobSpawns") + ChatColor.GRAY + " (" + Lang.get("noneSet") + ")\n"; - } else { - LinkedList types = (LinkedList) context.getSessionData(CK.E_MOB_TYPES); - text += ChatColor.BLUE + "" + ChatColor.BOLD + "6" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorSetMobSpawns") + "\n"; - for (String s : types) { - QuestMob qm = QuestMob.fromString(s); - text += ChatColor.GRAY + " - " + ChatColor.AQUA + qm.getType().name() - + ((qm.getName() != null) ? ": " + qm.getName() : "") + ChatColor.GRAY + " x " - + ChatColor.DARK_AQUA + qm.getSpawnAmounts() + ChatColor.GRAY + " -> " + ChatColor.GREEN - + ConfigUtil.getLocationInfo(qm.getSpawnLocation()) + "\n"; - } - } - if (context.getSessionData(CK.E_FAIL_QUEST) == null) { - context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord")); - } - text += ChatColor.BLUE + "" + ChatColor.BOLD + "7" + ChatColor.RESET + ChatColor.YELLOW + " - " - + Lang.get("eventEditorFailQuest") + ": " + ChatColor.AQUA + context.getSessionData(CK.E_FAIL_QUEST) - + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "8" + ChatColor.RESET + ChatColor.GREEN + " - " - + Lang.get("save") + "\n"; - text += ChatColor.BLUE + "" + ChatColor.BOLD + "9" + ChatColor.RESET + ChatColor.RED + " - " - + Lang.get("exit"); - return text; - } - - @Override - public Prompt acceptValidatedInput(ConversationContext context, String input) { - if (input.equalsIgnoreCase("1")) { - return new SetNamePrompt(); - } else if (input.equalsIgnoreCase("2")) { - return new PlayerPrompt(); - } else if (input.equalsIgnoreCase("3")) { - return new TimerPrompt(); - } else if (input.equalsIgnoreCase("4")) { - return new EffectPrompt(); - } else if (input.equalsIgnoreCase("5")) { - return new WeatherPrompt(); - } else if (input.equalsIgnoreCase("6")) { - return new MobPrompt(); - } else if (input.equalsIgnoreCase("7")) { - String s = (String) context.getSessionData(CK.E_FAIL_QUEST); - if (s.equalsIgnoreCase(Lang.get("yesWord"))) { - context.setSessionData(CK.E_FAIL_QUEST, Lang.get("noWord")); - } else { - context.setSessionData(CK.E_FAIL_QUEST, Lang.get("yesWord")); - } - return new CreateMenuPrompt(); - } else if (input.equalsIgnoreCase("8")) { - if (context.getSessionData(CK.E_OLD_EVENT) != null) { - return new SavePrompt((String) context.getSessionData(CK.E_OLD_EVENT)); - } else { - return new SavePrompt(null); - } - } else if (input.equalsIgnoreCase("9")) { - return new ExitPrompt(); - } - return null; - } - } private class PlayerPrompt extends FixedSetPrompt { @@ -904,6 +972,35 @@ public class ActionFactory implements ConversationAbandonedListener { } } + public static void clearData(ConversationContext context) { + context.setSessionData(CK.E_OLD_EVENT, null); + context.setSessionData(CK.E_NAME, null); + context.setSessionData(CK.E_MESSAGE, null); + context.setSessionData(CK.E_CLEAR_INVENTORY, null); + context.setSessionData(CK.E_FAIL_QUEST, null); + context.setSessionData(CK.E_ITEMS, null); + context.setSessionData(CK.E_ITEMS_AMOUNTS, null); + context.setSessionData(CK.E_EXPLOSIONS, null); + context.setSessionData(CK.E_EFFECTS, null); + context.setSessionData(CK.E_EFFECTS_LOCATIONS, null); + context.setSessionData(CK.E_WORLD_STORM, null); + context.setSessionData(CK.E_WORLD_STORM_DURATION, null); + context.setSessionData(CK.E_WORLD_THUNDER, null); + context.setSessionData(CK.E_WORLD_THUNDER_DURATION, null); + context.setSessionData(CK.E_MOB_TYPES, null); + context.setSessionData(CK.E_LIGHTNING, null); + context.setSessionData(CK.E_POTION_TYPES, null); + context.setSessionData(CK.E_POTION_DURATIONS, null); + context.setSessionData(CK.E_POTION_STRENGHT, null); + context.setSessionData(CK.E_HUNGER, null); + context.setSessionData(CK.E_SATURATION, null); + context.setSessionData(CK.E_HEALTH, null); + context.setSessionData(CK.E_TELEPORT, null); + context.setSessionData(CK.E_COMMANDS, null); + context.setSessionData(CK.E_TIMER, null); + context.setSessionData(CK.E_CANCEL_TIMER, null); + } + // Convenience methods to reduce typecasting private static String getCString(ConversationContext context, String path) { return (String) context.getSessionData(path); diff --git a/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorEvent.java b/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorEvent.java new file mode 100644 index 000000000..7ee406885 --- /dev/null +++ b/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorEvent.java @@ -0,0 +1,30 @@ +package me.blackvein.quests.events.editor.actions; + +import org.bukkit.conversations.ConversationContext; + +import me.blackvein.quests.events.QuestsEvent; + +/** + * Represents an Actions Editor-related event + */ +public abstract class ActionsEditorEvent extends QuestsEvent { + protected ConversationContext context; + + public ActionsEditorEvent(final ConversationContext context) { + this.context = context; + } + + public ActionsEditorEvent(final ConversationContext context, boolean async) { + super(async); + this.context = context; + } + + /** + * Returns the context involved in this event + * + * @return ConversationContext which is involved in this event + */ + public final ConversationContext getConversationContext() { + return context; + } +} diff --git a/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorPostOpenCreatePromptEvent.java b/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorPostOpenCreatePromptEvent.java new file mode 100644 index 000000000..5fd962826 --- /dev/null +++ b/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorPostOpenCreatePromptEvent.java @@ -0,0 +1,22 @@ +package me.blackvein.quests.events.editor.actions; + +import org.bukkit.conversations.ConversationContext; +import org.bukkit.event.HandlerList; + +public class ActionsEditorPostOpenCreatePromptEvent extends ActionsEditorEvent { + private static final HandlerList handlers = new HandlerList(); + + public ActionsEditorPostOpenCreatePromptEvent(ConversationContext context) { + super(context); + this.context = context; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +} diff --git a/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorPostOpenMenuPromptEvent.java b/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorPostOpenMenuPromptEvent.java new file mode 100644 index 000000000..2f7ac29a0 --- /dev/null +++ b/main/src/main/java/me/blackvein/quests/events/editor/actions/ActionsEditorPostOpenMenuPromptEvent.java @@ -0,0 +1,22 @@ +package me.blackvein.quests.events.editor.actions; + +import org.bukkit.conversations.ConversationContext; +import org.bukkit.event.HandlerList; + +public class ActionsEditorPostOpenMenuPromptEvent extends ActionsEditorEvent { + private static final HandlerList handlers = new HandlerList(); + + public ActionsEditorPostOpenMenuPromptEvent(ConversationContext context) { + super(context); + this.context = context; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public static HandlerList getHandlerList() { + return handlers; + } +}