New command reward display override, fixes #738

This commit is contained in:
PikaMug 2019-07-11 04:06:31 -04:00
parent 7187e06f25
commit d6d781e61d
8 changed files with 146 additions and 7 deletions

View File

@ -619,8 +619,14 @@ public class Quest {
none = null;
}
if (rews.getCommands().isEmpty() == false) {
int index = 0;
for (String s : rews.getCommands()) {
player.sendMessage("- " + ChatColor.DARK_GREEN + rews.getCommands().get(rews.getCommands().indexOf(s)));
if (rews.getCommandsOverrideDisplay().isEmpty() == false && rews.getCommandsOverrideDisplay().size() >= index) {
player.sendMessage("- " + ChatColor.DARK_GREEN + rews.getCommandsOverrideDisplay().get(index));
} else {
player.sendMessage("- " + ChatColor.DARK_GREEN + s);
}
index++;
}
none = null;
}

View File

@ -799,6 +799,7 @@ public class QuestFactory implements ConversationAbandonedListener {
List<Integer> RPGItemAmounts = null;
Integer expRew = null;
List<String> commandRews = null;
List<String> commandDisplayOverrideRews = null;
List<String> permRews = null;
List<String> mcMMOSkillRews = null;
List<Integer> mcMMOSkillAmounts = null;
@ -894,6 +895,10 @@ public class QuestFactory implements ConversationAbandonedListener {
commandRews = new LinkedList<String>();
commandRews.addAll((List<String>)cc.getSessionData(CK.REW_COMMAND));
}
if (cc.getSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY) != null) {
commandDisplayOverrideRews = new LinkedList<String>();
commandDisplayOverrideRews.addAll((List<String>)cc.getSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY));
}
if (cc.getSessionData(CK.REW_PERMISSION) != null) {
permRews = new LinkedList<String>();
permRews.addAll((List<String>) cc.getSessionData(CK.REW_PERMISSION));
@ -1363,7 +1368,11 @@ public class QuestFactory implements ConversationAbandonedListener {
stage.set("start-message", startMessage == null ? startMessage : startMessage.replace("\\n", "\n"));
stage.set("complete-message", completeMessage == null ? completeMessage : completeMessage.replace("\\n", "\n"));
}
if (moneyRew != null || questPointsRew != null || itemRews != null && itemRews.isEmpty() == false || permRews != null && permRews.isEmpty() == false || expRew != null || commandRews != null && commandRews.isEmpty() == false || mcMMOSkillRews != null || RPGItemRews != null || heroesClassRews != null && heroesClassRews.isEmpty() == false || phatLootRews != null && phatLootRews.isEmpty() == false || customRews != null && customRews.isEmpty() == false) {
if (moneyRew != null || questPointsRew != null || itemRews != null && itemRews.isEmpty() == false
|| permRews != null && permRews.isEmpty() == false || expRew != null || commandRews != null && commandRews.isEmpty() == false
|| commandDisplayOverrideRews != null && commandDisplayOverrideRews.isEmpty() == false || mcMMOSkillRews != null
|| RPGItemRews != null || heroesClassRews != null && heroesClassRews.isEmpty() == false
|| phatLootRews != null && phatLootRews.isEmpty() == false || customRews != null && customRews.isEmpty() == false) {
ConfigurationSection rews = cs.createSection("rewards");
rews.set("items", (itemRews != null && itemRews.isEmpty() == false) ? itemRews : null);
rews.set("money", moneyRew);
@ -1371,6 +1380,7 @@ public class QuestFactory implements ConversationAbandonedListener {
rews.set("exp", expRew);
rews.set("permissions", permRews);
rews.set("commands", commandRews);
rews.set("commands-override-display", commandDisplayOverrideRews);
rews.set("mcmmo-skills", mcMMOSkillRews);
rews.set("mcmmo-levels", mcMMOSkillAmounts);
rews.set("rpgitem-names", RPGItemRews);
@ -1492,6 +1502,9 @@ public class QuestFactory implements ConversationAbandonedListener {
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());
}

View File

@ -1565,12 +1565,18 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
}
if (config.contains("quests." + questKey + ".rewards.commands")) {
if (Quests.checkList(config.getList("quests." + questKey + ".rewards.commands"), String.class)) {
rews.setCommands(config.getStringList("quests." + questKey + ".rewards.commands"));
} else {
skipQuestProcess("commands: Reward in Quest " + quest.getName() + " is not a list of commands!");
}
}
if (config.contains("quests." + questKey + ".rewards.commands-override-display")) {
if (Quests.checkList(config.getList("quests." + questKey + ".rewards.commands-override-display"), String.class)) {
rews.setCommandsOverrideDisplay(config.getStringList("quests." + questKey + ".rewards.commands-override-display"));
} else {
skipQuestProcess("commands-override-display: Reward in Quest " + quest.getName() + " is not a list of strings!");
}
}
if (config.contains("quests." + questKey + ".rewards.permissions")) {
if (Quests.checkList(config.getList("quests." + questKey + ".rewards.permissions"), String.class)) {
rews.setPermissions(config.getStringList("quests." + questKey + ".rewards.permissions"));

View File

@ -24,6 +24,7 @@ public class Rewards {
private int questPoints = 0;
private int exp = 0;
private List<String> commands = new LinkedList<String>();
private List<String> commandsOverrideDisplay = new LinkedList<String>();
private List<String> permissions = new LinkedList<String>();
private List<ItemStack> items = new LinkedList<ItemStack>();
private List<String> mcmmoSkills = new LinkedList<String>();
@ -57,6 +58,12 @@ public class Rewards {
public void setCommands(List<String> commands) {
this.commands = commands;
}
public List<String> getCommandsOverrideDisplay() {
return commandsOverrideDisplay;
}
public void setCommandsOverrideDisplay(List<String> commandsOverrideDisplay) {
this.commandsOverrideDisplay = commandsOverrideDisplay;
}
public List<String> getPermissions() {
return permissions;
}

View File

@ -133,7 +133,10 @@ public class RequirementsPrompt extends FixedSetPrompt {
text += ChatColor.RESET + "" + ChatColor.DARK_PURPLE + " - " + ChatColor.LIGHT_PURPLE + s + "\n";
}
}
if (context.getSessionData(CK.REQ_MONEY) == null && context.getSessionData(CK.REQ_QUEST_POINTS) == null && context.getSessionData(CK.REQ_QUEST_BLOCK) == null && context.getSessionData(CK.REQ_ITEMS) == null && context.getSessionData(CK.REQ_PERMISSION) == null && context.getSessionData(CK.REQ_QUEST) == null && context.getSessionData(CK.REQ_QUEST_BLOCK) == null && context.getSessionData(CK.REQ_MCMMO_SKILLS) == null && context.getSessionData(CK.REQ_HEROES_PRIMARY_CLASS) == null && context.getSessionData(CK.REQ_HEROES_SECONDARY_CLASS) == null && context.getSessionData(CK.REQ_CUSTOM) == null) {
if (context.getSessionData(CK.REQ_MONEY) == null && context.getSessionData(CK.REQ_QUEST_POINTS) == null && context.getSessionData(CK.REQ_QUEST_BLOCK) == null
&& context.getSessionData(CK.REQ_ITEMS) == null && context.getSessionData(CK.REQ_PERMISSION) == null && context.getSessionData(CK.REQ_QUEST) == null
&& context.getSessionData(CK.REQ_QUEST_BLOCK) == null && context.getSessionData(CK.REQ_MCMMO_SKILLS) == null && context.getSessionData(CK.REQ_HEROES_PRIMARY_CLASS) == null
&& context.getSessionData(CK.REQ_HEROES_SECONDARY_CLASS) == null && context.getSessionData(CK.REQ_CUSTOM) == null) {
text += ChatColor.GRAY + "" + ChatColor.BOLD + "10 - " + ChatColor.RESET + ChatColor.GRAY + Lang.get("reqSetFail") + " (" + Lang.get("reqNone") + ")\n";
} else if (context.getSessionData(CK.Q_FAIL_MESSAGE) == null) {
text += ChatColor.RED + "" + ChatColor.BOLD + "10 - " + ChatColor.RESET + ChatColor.RED + Lang.get("reqSetFail") + " (" + Lang.get("questRequiredNoneSet") + ")\n";

View File

@ -78,8 +78,11 @@ public class RewardsPrompt extends FixedSetPrompt {
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "5" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("rewSetCommands") + "\n";
List<String> commands = (List<String>) context.getSessionData(CK.REW_COMMAND);
List<String> overrides = (List<String>) context.getSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY);
int index = 0;
for (String cmd : commands) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + cmd + "\n";
text += ChatColor.GRAY + " - " + ChatColor.AQUA + cmd + (overrides != null ? ChatColor.GRAY + " (\"" + ChatColor.AQUA + overrides.get(index) + ChatColor.GRAY + "\")" : "") + "\n";
index++;
}
}
if (context.getSessionData(CK.REW_PERMISSION) == null) {
@ -156,7 +159,7 @@ public class RewardsPrompt extends FixedSetPrompt {
} else if (input.equalsIgnoreCase("4")) {
return new ExperiencePrompt();
} else if (input.equalsIgnoreCase("5")) {
return new CommandsPrompt();
return new CommandsListPrompt();
} else if (input.equalsIgnoreCase("6")) {
return new PermissionsPrompt();
} else if (input.equalsIgnoreCase("7")) {
@ -340,6 +343,72 @@ public class RewardsPrompt extends FixedSetPrompt {
}
}
private class CommandsListPrompt extends FixedSetPrompt {
public CommandsListPrompt() {
super("1", "2", "3", "4");
}
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.GOLD + "- " + Lang.get("rewCommands") + " -\n";
if (context.getSessionData(CK.REW_COMMAND) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("rewSetCommands") + " (" + Lang.get("noneSet") + ")\n";
text += ChatColor.GRAY + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.GRAY + " - " + Lang.get("rewSetCommandsOverrides") + " (" + Lang.get("noneSet") + ")\n";
text += ChatColor.RED + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("clear") + "\n";
text += ChatColor.GREEN + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("done");
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "1" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("rewSetCommands") + "\n";
for (String s : getCommand(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
if (context.getSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY) == null) {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("rewSetCommandsOverrides") + " (" + Lang.get("stageEditorOptional") + ")\n";
} else {
text += ChatColor.BLUE + "" + ChatColor.BOLD + "2" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("rewSetCommandsOverrides") + "\n";
for (String s : getCommandOverrideDisplay(context)) {
text += ChatColor.GRAY + " - " + ChatColor.AQUA + s + "\n";
}
}
text += ChatColor.RED + "" + ChatColor.BOLD + "3" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("clear") + "\n";
text += ChatColor.GREEN + "" + ChatColor.BOLD + "4" + ChatColor.RESET + ChatColor.YELLOW + " - " + Lang.get("done");
}
return text;
}
@Override
protected Prompt acceptValidatedInput(ConversationContext context, String input) {
if (input.equalsIgnoreCase("1")) {
return new CommandsPrompt();
} else if (input.equalsIgnoreCase("2")) {
if (context.getSessionData(CK.REW_COMMAND) == null) {
context.getForWhom().sendRawMessage(ChatColor.RED + Lang.get("rewNoCommands"));
return new CommandsListPrompt();
} else {
return new CommandsOverrideDisplayPrompt();
}
} else if (input.equalsIgnoreCase("3")) {
context.getForWhom().sendRawMessage(ChatColor.YELLOW + Lang.get("rewCommandsCleared"));
context.setSessionData(CK.REW_COMMAND, null);
context.setSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY, null);
return new CommandsListPrompt();
} else if (input.equalsIgnoreCase("4")) {
return new RewardsPrompt(plugin, factory);
}
return null;
}
@SuppressWarnings("unchecked")
private List<String> getCommand(ConversationContext context) {
return (List<String>) context.getSessionData(CK.REW_COMMAND);
}
@SuppressWarnings("unchecked")
private List<String> getCommandOverrideDisplay(ConversationContext context) {
return (List<String>) context.getSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY);
}
}
private class CommandsPrompt extends StringPrompt {
@Override
@ -365,7 +434,35 @@ public class RewardsPrompt extends FixedSetPrompt {
} else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) {
context.setSessionData(CK.REW_COMMAND, null);
}
return new RewardsPrompt(plugin, factory);
return new CommandsListPrompt();
}
}
private class CommandsOverrideDisplayPrompt extends StringPrompt {
@Override
public String getPromptText(ConversationContext context) {
String text = ChatColor.YELLOW + Lang.get("rewCommandsOverridePrompt") + "\n";
text += ChatColor.ITALIC + "" + ChatColor.GOLD + Lang.get("rewCommandsOverrideHint");
return text;
}
@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(Lang.get("charSemi"));
List<String> overrides = new LinkedList<String>();
for (String s : args) {
if (s.startsWith("/")) {
s = s.substring(1);
}
overrides.add(s);
}
context.setSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY, overrides);
} else if (input.equalsIgnoreCase(Lang.get("cmdClear"))) {
context.setSessionData(CK.REW_COMMAND_OVERRIDE_DISPLAY, null);
}
return new CommandsListPrompt();
}
}

View File

@ -114,6 +114,7 @@ public class CK {
public static final String REW_ITEMS = "itemRews";
public static final String REW_EXP = "expRew";
public static final String REW_COMMAND = "commandRews";
public static final String REW_COMMAND_OVERRIDE_DISPLAY = "commandOverrideDisplay";
public static final String REW_PERMISSION = "permissionRews";
public static final String REW_MCMMO_SKILLS = "mcMMOSkillRews";
public static final String REW_MCMMO_AMOUNTS = "mcMMOSkillAmounts";

View File

@ -495,6 +495,12 @@ rewSetQuestPoints: "Set Quest Points reward"
rewSetItems: "Set item rewards"
rewSetExperience: "Set experience reward"
rewSetCommands: "Set command rewards"
rewCommands: "Command rewards"
rewSetCommandsOverrides: "Set command display overrides"
rewCommandsCleared: "Command rewards cleared."
rewCommandsOverridePrompt: "Enter command display override, <clear>, <cancel>"
rewCommandsOverrideHint: "(This override will display your own text as the reward)"
rewNoCommands: "You must set commands first!"
rewSetPermission: "Set permission rewards"
rewSetMcMMO: "Set mcMMO skill rewards"
rewSetHeroes: "Set Heroes experience rewards"