diff --git a/core/src/main/java/me/blackvein/quests/Quester.java b/core/src/main/java/me/blackvein/quests/Quester.java index 0d1f7cc77..6c2539fff 100644 --- a/core/src/main/java/me/blackvein/quests/Quester.java +++ b/core/src/main/java/me/blackvein/quests/Quester.java @@ -3022,7 +3022,8 @@ public class Quester implements IQuester { final String[] message = ConfigUtil.parseStringWithPossibleLineBreaks(getCurrentStage(quest) .getDeliverMessages().get(new Random().nextInt(getCurrentStage(quest).getDeliverMessages() .size())), plugin.getDependencies().getCitizens().getNPCRegistry() - .getByUniqueId(getCurrentStage(quest).getItemDeliveryTargets().get(items.indexOf(found)))); + .getByUniqueId(getCurrentStage(quest).getItemDeliveryTargets().get(items.indexOf(found))), + toDeliver - newAmount); player.sendMessage(message); } diff --git a/core/src/main/java/me/blackvein/quests/Quests.java b/core/src/main/java/me/blackvein/quests/Quests.java index 872e25cd3..a57df9295 100644 --- a/core/src/main/java/me/blackvein/quests/Quests.java +++ b/core/src/main/java/me/blackvein/quests/Quests.java @@ -1545,7 +1545,7 @@ public class Quests extends JavaPlugin implements QuestsAPI { for (int i = 0 ; i < stage.getLocationsToReach().size(); i++) { if (i < data.locationsReached.size()) { final ChatColor color = !data.locationsReached.get(i) ? ChatColor.GREEN : ChatColor.GRAY; - String message = color + Lang.get(quester.getPlayer(), "goTo"); + String message = color + "- " + Lang.get(quester.getPlayer(), "goTo"); message = message.replace("", stage.getLocationNames().get(i)); quester.sendMessage(message); } diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/MobsPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/MobsPrompt.java index ea2d78676..066a684c0 100644 --- a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/MobsPrompt.java +++ b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/MobsPrompt.java @@ -542,6 +542,7 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { } @Override + @SuppressWarnings("unchecked") public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { if (input == null) { return null; @@ -558,6 +559,19 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { } } context.setSessionData(pref + CK.S_MOB_TYPES, mobTypes); + + LinkedList amounts = new LinkedList<>(); + if (context.getSessionData(pref + CK.S_MOB_AMOUNTS) != null) { + amounts = (LinkedList) context.getSessionData(pref + CK.S_MOB_AMOUNTS); + } + if (amounts != null) { + for (int i = 0; i < mobTypes.size(); i++) { + if (i >= amounts.size()) { + amounts.add(1); + } + } + } + context.setSessionData(pref + CK.S_MOB_AMOUNTS, amounts); } return new MobsKillListPrompt(context); } @@ -778,112 +792,6 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { } } - public class MobsFishPrompt extends QuestsEditorStringPrompt { - - public MobsFishPrompt(final ConversationContext context) { - super(context); - } - - @Override - public String getTitle(final ConversationContext context) { - return null; - } - - @Override - public String getQueryText(final ConversationContext context) { - return Lang.get("stageEditorCatchFishPrompt"); - } - - @Override - public @NotNull String getPromptText(final @NotNull ConversationContext context) { - if (context.getPlugin() != null) { - final QuestsEditorPostOpenStringPromptEvent event - = new QuestsEditorPostOpenStringPromptEvent(context, this); - context.getPlugin().getServer().getPluginManager().callEvent(event); - } - - return ChatColor.YELLOW + getQueryText(context); - } - - @Override - public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { - if (input == null) { - return null; - } - if (!input.equalsIgnoreCase(Lang.get("cmdCancel")) && !input.equalsIgnoreCase(Lang.get("cmdClear"))) { - try { - final int i = Integer.parseInt(input); - if (i < 0) { - context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorPositiveAmount")); - return new MobsFishPrompt(context); - } else if (i > 0) { - context.setSessionData(pref + CK.S_FISH, i); - } - } catch (final NumberFormatException e) { - context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") - .replace("", input)); - return new MobsFishPrompt(context); - } - } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { - context.setSessionData(pref + CK.S_FISH, null); - } - return new MobsPrompt(stageNum, context); - } - } - - public class MobsCowsPrompt extends QuestsEditorStringPrompt { - - public MobsCowsPrompt(final ConversationContext context) { - super(context); - } - - @Override - public String getTitle(final ConversationContext context) { - return null; - } - - @Override - public String getQueryText(final ConversationContext context) { - return Lang.get("stageEditorMilkCowsPrompt"); - } - - @Override - public @NotNull String getPromptText(final @NotNull ConversationContext context) { - if (context.getPlugin() != null) { - final QuestsEditorPostOpenStringPromptEvent event - = new QuestsEditorPostOpenStringPromptEvent(context, this); - context.getPlugin().getServer().getPluginManager().callEvent(event); - } - - return ChatColor.YELLOW + getQueryText(context); - } - - @Override - public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { - if (input == null) { - return null; - } - if (!input.equalsIgnoreCase(Lang.get("cmdCancel")) && !input.equalsIgnoreCase(Lang.get("cmdClear"))) { - try { - final int i = Integer.parseInt(input); - if (i < 0) { - context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorPositiveAmount")); - return new MobsCowsPrompt(context); - } else if (i > 0) { - context.setSessionData(pref + CK.S_COW_MILK, i); - } - } catch (final NumberFormatException e) { - context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") - .replace("", input)); - return new MobsCowsPrompt(context); - } - } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { - context.setSessionData(pref + CK.S_COW_MILK, null); - } - return new MobsPrompt(stageNum, context); - } - } - public class MobsTameListPrompt extends QuestsEditorNumericPrompt { public MobsTameListPrompt(final ConversationContext context) { @@ -1073,6 +981,7 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { } @Override + @SuppressWarnings("unchecked") public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { if (input == null) { return null; @@ -1087,6 +996,19 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { if (type.isAlive() || (ec != null && Tameable.class.isAssignableFrom(ec))) { mobTypes.add(s); context.setSessionData(pref + CK.S_TAME_TYPES, mobTypes); + + LinkedList amounts = new LinkedList<>(); + if (context.getSessionData(pref + CK.S_TAME_AMOUNTS) != null) { + amounts = (LinkedList) context.getSessionData(pref + CK.S_TAME_AMOUNTS); + } + if (amounts != null) { + for (int i = 0; i < mobTypes.size(); i++) { + if (i >= amounts.size()) { + amounts.add(1); + } + } + } + context.setSessionData(pref + CK.S_TAME_AMOUNTS, amounts); } else { context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidMob")); @@ -1159,6 +1081,112 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { } } + public class MobsFishPrompt extends QuestsEditorStringPrompt { + + public MobsFishPrompt(final ConversationContext context) { + super(context); + } + + @Override + public String getTitle(final ConversationContext context) { + return null; + } + + @Override + public String getQueryText(final ConversationContext context) { + return Lang.get("stageEditorCatchFishPrompt"); + } + + @Override + public @NotNull String getPromptText(final @NotNull ConversationContext context) { + if (context.getPlugin() != null) { + final QuestsEditorPostOpenStringPromptEvent event + = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + } + + return ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { + if (input == null) { + return null; + } + if (!input.equalsIgnoreCase(Lang.get("cmdCancel")) && !input.equalsIgnoreCase(Lang.get("cmdClear"))) { + try { + final int i = Integer.parseInt(input); + if (i < 0) { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorPositiveAmount")); + return new MobsFishPrompt(context); + } else if (i > 0) { + context.setSessionData(pref + CK.S_FISH, i); + } + } catch (final NumberFormatException e) { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") + .replace("", input)); + return new MobsFishPrompt(context); + } + } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { + context.setSessionData(pref + CK.S_FISH, null); + } + return new MobsPrompt(stageNum, context); + } + } + + public class MobsCowsPrompt extends QuestsEditorStringPrompt { + + public MobsCowsPrompt(final ConversationContext context) { + super(context); + } + + @Override + public String getTitle(final ConversationContext context) { + return null; + } + + @Override + public String getQueryText(final ConversationContext context) { + return Lang.get("stageEditorMilkCowsPrompt"); + } + + @Override + public @NotNull String getPromptText(final @NotNull ConversationContext context) { + if (context.getPlugin() != null) { + final QuestsEditorPostOpenStringPromptEvent event + = new QuestsEditorPostOpenStringPromptEvent(context, this); + context.getPlugin().getServer().getPluginManager().callEvent(event); + } + + return ChatColor.YELLOW + getQueryText(context); + } + + @Override + public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { + if (input == null) { + return null; + } + if (!input.equalsIgnoreCase(Lang.get("cmdCancel")) && !input.equalsIgnoreCase(Lang.get("cmdClear"))) { + try { + final int i = Integer.parseInt(input); + if (i < 0) { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("stageEditorPositiveAmount")); + return new MobsCowsPrompt(context); + } else if (i > 0) { + context.setSessionData(pref + CK.S_COW_MILK, i); + } + } catch (final NumberFormatException e) { + context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("reqNotANumber") + .replace("", input)); + return new MobsCowsPrompt(context); + } + } else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) { + context.setSessionData(pref + CK.S_COW_MILK, null); + } + return new MobsPrompt(stageNum, context); + } + } + public class MobsShearListPrompt extends QuestsEditorNumericPrompt { public MobsShearListPrompt(final ConversationContext context) { @@ -1340,6 +1368,7 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { } @Override + @SuppressWarnings("unchecked") public Prompt acceptInput(final @NotNull ConversationContext context, final String input) { if (input == null) { return null; @@ -1350,6 +1379,19 @@ public class MobsPrompt extends QuestsEditorNumericPrompt { if (MiscUtil.getProperDyeColor(s) != null) { colors.add(s); context.setSessionData(pref + CK.S_SHEAR_COLORS, colors); + + LinkedList amounts = new LinkedList<>(); + if (context.getSessionData(pref + CK.S_SHEAR_AMOUNTS) != null) { + amounts = (LinkedList) context.getSessionData(pref + CK.S_SHEAR_AMOUNTS); + } + if (amounts != null) { + for (int i = 0; i < colors.size(); i++) { + if (i >= amounts.size()) { + amounts.add(1); + } + } + } + context.setSessionData(pref + CK.S_SHEAR_AMOUNTS, amounts); } else { context.getForWhom().sendRawMessage(ChatColor.LIGHT_PURPLE + s + " " + ChatColor.RED + Lang.get("stageEditorInvalidDye")); diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java index eb76faeb3..aeadf87d7 100644 --- a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java +++ b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java @@ -479,6 +479,15 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt { } } context.setSessionData(pref + CK.S_DELIVERY_NPCS, npcs); + + LinkedList messages = new LinkedList<>(); + if (context.getSessionData(pref + CK.S_DELIVERY_MESSAGES) != null) { + messages = (LinkedList) context.getSessionData(pref + CK.S_DELIVERY_MESSAGES); + } + if (messages != null && messages.size() == 0) { + messages.add(Lang.get("thankYouMore")); + } + context.setSessionData(pref + CK.S_DELIVERY_MESSAGES, messages); } final Set selectingNpcs = plugin.getQuestFactory().getSelectingNpcs(); selectingNpcs.remove(((Player) context.getForWhom()).getUniqueId()); @@ -816,6 +825,19 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt { } } context.setSessionData(pref + CK.S_NPCS_TO_KILL, npcs); + + LinkedList amounts = new LinkedList<>(); + if (context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS) != null) { + amounts = (LinkedList) context.getSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS); + } + if (npcs != null && amounts != null) { + for (int i = 0; i < npcs.size(); i++) { + if (i >= amounts.size()) { + amounts.add(1); + } + } + } + context.setSessionData(pref + CK.S_NPCS_TO_KILL_AMOUNTS, amounts); } final Set selectingNpcs = plugin.getQuestFactory().getSelectingNpcs(); selectingNpcs.remove(((Player) context.getForWhom()).getUniqueId()); diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java index 53414b18a..2cc43add6 100644 --- a/core/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java +++ b/core/src/main/java/me/blackvein/quests/convo/quests/stages/StageMainPrompt.java @@ -857,23 +857,42 @@ public class StageMainPrompt extends QuestsEditorNumericPrompt { final Block block = plugin.getQuestFactory().getSelectedReachLocations().get(player.getUniqueId()); if (block != null) { final Location loc = block.getLocation(); - final LinkedList locations; - if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) != null) { - locations = (LinkedList) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS); - } else { - locations = new LinkedList<>(); - } + final LinkedList locations + = context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) != null + ? (LinkedList) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS) + : new LinkedList<>(); if (locations != null) { locations.add(ConfigUtil.getLocationInfo(loc)); } context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS, locations); - final Map temp = plugin.getQuestFactory().getSelectedReachLocations(); - temp.remove(player.getUniqueId()); - plugin.getQuestFactory().setSelectedReachLocations(temp); + + LinkedList amounts = new LinkedList<>(); + LinkedList names = new LinkedList<>(); + if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS) != null) { + amounts = (LinkedList) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS); + } + if (context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES) != null) { + names = (LinkedList) context.getSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES); + } + if (locations != null && amounts != null && names != null) { + for (int i = 0; i < locations.size(); i++) { + if (i >= amounts.size()) { + amounts.add(5); + } + if (i >= names.size()) { + names.add(Lang.get("location").replace("", "#" + (i + 1))); + } + } + } + context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS_RADIUS, amounts); + context.setSessionData(stagePrefix + CK.S_REACH_LOCATIONS_NAMES, names); } else { player.sendMessage(ChatColor.RED + Lang.get("stageEditorNoBlockSelected")); return new ReachLocationPrompt(context); } + final Map temp = plugin.getQuestFactory().getSelectedReachLocations(); + temp.remove(player.getUniqueId()); + plugin.getQuestFactory().setSelectedReachLocations(temp); return new ReachListPrompt(context); } else if (input != null && input.equalsIgnoreCase(Lang.get("cmdCancel"))) { final Map temp = plugin.getQuestFactory().getSelectedReachLocations(); diff --git a/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java b/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java index f41c8cc31..77d3da2f5 100644 --- a/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java +++ b/core/src/main/java/me/blackvein/quests/util/ConfigUtil.java @@ -128,11 +128,14 @@ public class ConfigUtil { return parsed.split("\n"); } - public static String[] parseStringWithPossibleLineBreaks(final String s, final NPC npc) { + public static String[] parseStringWithPossibleLineBreaks(final String s, final NPC npc, int amount) { String parsed = parseString(s); if (parsed.contains("")) { parsed = parsed.replace("", npc.getName()); } + if (parsed.contains("")) { + parsed = parsed.replace("", String.valueOf(amount)); + } return parsed.split("\n"); } diff --git a/core/src/main/resources/strings.yml b/core/src/main/resources/strings.yml index 1d5a33055..81f1f29e4 100644 --- a/core/src/main/resources/strings.yml +++ b/core/src/main/resources/strings.yml @@ -666,6 +666,7 @@ talkTo: "Talk to " tame: "Tame : " shearSheep: "Shear Sheep: " goTo: "Go to " +location: "Location " completed: "Completed" redoCompleted: "(Completed)" consoleError: "This operation may only be performed in-game." @@ -777,6 +778,7 @@ enterNpcUniqueIds: "Enter NPC UUIDs, , " enterOrClearNpcUniqueIds: "Enter NPC UUIDs, , , " listsNotSameSize: "All required lists must have the same number of entries!" listDuplicate: "List contains duplicates!" +thankYouMore: "Thank you. Only more to go!" id: "ID" quest: "Quest" event: "Action"