Clickable quest accept prompt

This commit is contained in:
PikaMug 2021-11-01 03:29:36 -04:00
parent 095fd8c419
commit 7b7b676b8d
3 changed files with 39 additions and 26 deletions

View File

@ -49,6 +49,8 @@ import me.clip.placeholderapi.PlaceholderAPI;
import me.pikamug.localelib.LocaleManager;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
@ -642,8 +644,18 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
final MiscPostQuestAcceptEvent event = new MiscPostQuestAcceptEvent(context, this);
getServer().getPluginManager().callEvent(event);
return ChatColor.YELLOW + getQueryText(context) + " " + ChatColor.GREEN
+ getSelectionText(context, 1) + ChatColor.RESET + " / " + getSelectionText(context, 2);
final TextComponent component = new TextComponent("");
component.addExtra(ChatColor.YELLOW + getQueryText(context) + " " + ChatColor.GREEN);
final TextComponent yes = new TextComponent(getSelectionText(context, 1));
yes.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, Lang.get("yesWord")));
component.addExtra(yes);
component.addExtra(ChatColor.RESET + " / ");
final TextComponent no = new TextComponent(getSelectionText(context, 2));
no.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, Lang.get("noWord")));
component.addExtra(no);
((Player)context.getForWhom()).spigot().sendMessage(component);
return "";
}
@Override
@ -653,7 +665,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
return Prompt.END_OF_CONVERSATION;
}
final Player player = (Player) context.getForWhom();
if (input.equalsIgnoreCase("1") || input.equalsIgnoreCase(Lang.get(player, "yesWord"))) {
if (input.equalsIgnoreCase("1") || input.equalsIgnoreCase("y")
|| input.equalsIgnoreCase(Lang.get(player, "yesWord"))) {
Quester quester = getQuester(player.getUniqueId());
if (quester == null) {
// Must be new player
@ -678,7 +691,8 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
e.printStackTrace();
}
return Prompt.END_OF_CONVERSATION;
} else if (input.equalsIgnoreCase("2") || input.equalsIgnoreCase(Lang.get("noWord"))) {
} else if (input.equalsIgnoreCase("2") || input.equalsIgnoreCase("n")
|| input.equalsIgnoreCase(Lang.get("noWord"))) {
Lang.send(player, ChatColor.YELLOW + Lang.get("cancelled"));
return Prompt.END_OF_CONVERSATION;
} else {

View File

@ -12,22 +12,23 @@
package me.blackvein.quests.convo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversable;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.NumericPrompt;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public abstract class QuestsNumericPrompt extends NumericPrompt {
private static final HandlerList HANDLERS = new HandlerList();
private static final Pattern NUMBER_PATTERN = Pattern.compile("^(\\d+) - ");
public QuestsNumericPrompt() {
}
@ -44,7 +45,7 @@ public abstract class QuestsNumericPrompt extends NumericPrompt {
}
@Override
public String getPromptText(ConversationContext cc) {
public @NotNull String getPromptText(@NotNull ConversationContext cc) {
return sendClickableSelection(getBasicPromptText(cc), cc.getForWhom());
}
@ -60,16 +61,16 @@ public abstract class QuestsNumericPrompt extends NumericPrompt {
* @param forWhom the conversation participant
* @return plain text to deliver
*/
public static String sendClickableSelection(String input, Conversable forWhom) {
public static String sendClickableSelection(final String input, final Conversable forWhom) {
if (!(forWhom instanceof Player)) {
return input;
}
String[] basicText = input.split("\n");
TextComponent component = new TextComponent("");
final String[] basicText = input.split("\n");
final TextComponent component = new TextComponent("");
boolean first = true;
for (String line : basicText) {
Matcher matcher = NUMBER_PATTERN.matcher(ChatColor.stripColor(line));
TextComponent lineComponent = new TextComponent(TextComponent.fromLegacyText(line));
for (final String line : basicText) {
final Matcher matcher = NUMBER_PATTERN.matcher(ChatColor.stripColor(line));
final TextComponent lineComponent = new TextComponent(TextComponent.fromLegacyText(line));
if (matcher.find()) {
lineComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, matcher.group(1)));
}
@ -80,8 +81,7 @@ public abstract class QuestsNumericPrompt extends NumericPrompt {
}
component.addExtra(lineComponent);
}
Player player = (Player)forWhom;
player.spigot().sendMessage(component);
((Player)forWhom).spigot().sendMessage(component);
return "";
}
}

View File

@ -12,16 +12,15 @@
package me.blackvein.quests.convo;
import java.util.List;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.conversations.Conversable;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import java.util.List;
public abstract class QuestsStringPrompt extends StringPrompt {
private static final HandlerList HANDLERS = new HandlerList();
@ -53,7 +52,8 @@ public abstract class QuestsStringPrompt extends StringPrompt {
* @param forWhom the conversation participant
* @return plain text to deliver
*/
protected String sendClickableMenu(String header, List<String> list, String footer, Conversable forWhom) {
protected String sendClickableMenu(final String header, final List<String> list, final String footer,
final Conversable forWhom) {
if (!(forWhom instanceof Player)) {
return ChatColor.GOLD + header + "\n" + ChatColor.AQUA + String.join(ChatColor.GRAY + ", " + ChatColor.AQUA, list) + "\n" + ChatColor.YELLOW + footer;
}
@ -73,8 +73,7 @@ public abstract class QuestsStringPrompt extends StringPrompt {
}
}
component.addExtra(footerComponent);
Player player = (Player)forWhom;
player.spigot().sendMessage(component);
((Player)forWhom).spigot().sendMessage(component);
return "";
}
}