Initial attempt

This commit is contained in:
PikaMug 2024-01-01 01:21:46 -05:00
parent a587a0c1c0
commit 71e2b82984
8 changed files with 88 additions and 62 deletions

View File

@ -16,7 +16,7 @@
<repositories>
<repository>
<!-- DungeonsXL, LocaleLib, mcMMO Classic, PhatLoots, Unite, ZNPCsPlus -->
<!-- ConversationAPI, DungeonsXL, LocaleLib, mcMMO Classic, PhatLoots, Unite, ZNPCsPlus -->
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
@ -178,6 +178,11 @@
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>com.github.Browsit</groupId>
<artifactId>ConversationAPI</artifactId>
<version>67983728aa</version>
</dependency>
<dependency>
<groupId>me.pikamug.quests</groupId>
<artifactId>quests-api</artifactId>
@ -250,8 +255,12 @@
</executions>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
<artifactSet>
<includes>
<include>com.github.Browsit.ConversationAPI:*</include>
<include>me.*</include>
<include>com.github.PikaMug:LocaleLib</include>
<include>org.slf4j:slf4j-simple</include>
@ -260,12 +269,6 @@
</includes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.MF</exclude>
</excludes>
</filter>
<filter>
<artifact>com.github.PikaMug:LocaleLib</artifact>
<excludes>
@ -274,6 +277,14 @@
</filter>
</filters>
<relocations>
<relocation>
<pattern>org.browsit.conversation</pattern>
<shadedPattern>me.pikamug.quests.libs.conversation</shadedPattern>
</relocation>
<relocation>
<pattern>org.browsit.libs.kyori</pattern>
<shadedPattern>me.pikamug.quests.libs.kyori</shadedPattern>
</relocation>
<relocation>
<pattern>me.pikamug.localelib</pattern>
<shadedPattern>me.pikamug.quests.libs.localelib</shadedPattern>

View File

@ -18,14 +18,20 @@ import me.pikamug.quests.conditions.Condition;
import me.pikamug.quests.config.BukkitConfigSettings;
import me.pikamug.quests.config.ConfigSettings;
import me.pikamug.quests.convo.misc.NpcOfferQuestPrompt;
import me.pikamug.quests.convo.misc.QuestAcceptPrompt;
import me.pikamug.quests.dependencies.BukkitDenizenTrigger;
import me.pikamug.quests.dependencies.BukkitDependencies;
import me.pikamug.quests.interfaces.ReloadCallback;
import me.pikamug.quests.listeners.*;
import me.pikamug.quests.listeners.BukkitBlockListener;
import me.pikamug.quests.listeners.BukkitCitizensListener;
import me.pikamug.quests.listeners.BukkitCommandManager;
import me.pikamug.quests.listeners.BukkitConvoListener;
import me.pikamug.quests.listeners.BukkitItemListener;
import me.pikamug.quests.listeners.BukkitPartiesListener;
import me.pikamug.quests.listeners.BukkitPlayerListener;
import me.pikamug.quests.listeners.BukkitUniteListener;
import me.pikamug.quests.listeners.BukkitZnpcsApiListener;
import me.pikamug.quests.listeners.BukkitZnpcsListener;
import me.pikamug.quests.logging.BukkitQuestsLog4JFilter;
import me.pikamug.quests.storage.implementation.jar.BukkitModuleJarStorage;
import me.pikamug.quests.storage.implementation.ModuleStorageImpl;
import me.pikamug.quests.module.CustomObjective;
import me.pikamug.quests.module.CustomRequirement;
import me.pikamug.quests.module.CustomReward;
@ -36,14 +42,19 @@ import me.pikamug.quests.quests.Quest;
import me.pikamug.quests.statistics.BukkitMetrics;
import me.pikamug.quests.storage.BukkitStorageFactory;
import me.pikamug.quests.storage.QuesterStorage;
import me.pikamug.quests.storage.implementation.ModuleStorageImpl;
import me.pikamug.quests.storage.implementation.file.BukkitActionYamlStorage;
import me.pikamug.quests.storage.implementation.file.BukkitConditionYamlStorage;
import me.pikamug.quests.storage.implementation.file.BukkitQuestYamlStorage;
import me.pikamug.quests.storage.implementation.jar.BukkitModuleJarStorage;
import me.pikamug.quests.tasks.BukkitNpcEffectThread;
import me.pikamug.quests.tasks.BukkitPlayerMoveThread;
import me.pikamug.quests.util.BukkitLang;
import me.pikamug.quests.util.BukkitUpdateChecker;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.apache.logging.log4j.LogManager;
import org.browsit.conversations.api.Conversations;
import org.browsit.conversations.bukkit.BukkitConversationsForwarder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@ -114,6 +125,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
@Override
public void onEnable() {
/*----> WARNING: ORDER OF STEPS MATTERS <----*/
Conversations.init(BukkitAudiences.create(this));
new BukkitConversationsForwarder().register(this);
// 1 - Trigger server to initialize Legacy Material Support
try {
@ -203,11 +216,11 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
}
// 10 - Build conversation factories
this.conversationFactory = new ConversationFactory(this).withModality(false)
/*this.conversationFactory = new ConversationFactory(this).withModality(false)
.withPrefix(context -> ChatColor.GRAY.toString())
.withFirstPrompt(new QuestAcceptPrompt(this)).withTimeout(configSettings.getAcceptTimeout())
.thatExcludesNonPlayersWithMessage("Console may not perform this conversation!")
.addConversationAbandonedListener(convoListener);
.addConversationAbandonedListener(convoListener);*/
this.npcConversationFactory = new ConversationFactory(this).withModality(false)
.withFirstPrompt(new NpcOfferQuestPrompt(this)).withTimeout(configSettings.getAcceptTimeout())
.withLocalEcho(false).addConversationAbandonedListener(convoListener);
@ -245,6 +258,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
@Override
public void onDisable() {
Conversations.cleanUp();
getLogger().info("Saving Quester data...");
for (final Player p : getServer().getOnlinePlayers()) {
getQuester(p.getUniqueId()).saveData();

View File

@ -10,10 +10,10 @@
package me.pikamug.quests.convo.misc;
import me.pikamug.quests.quests.BukkitQuest;
import me.pikamug.quests.BukkitQuestsPlugin;
import me.pikamug.quests.events.misc.MiscPostNpcOfferQuestEvent;
import me.pikamug.quests.player.Quester;
import me.pikamug.quests.quests.BukkitQuest;
import me.pikamug.quests.quests.Quest;
import me.pikamug.quests.util.BukkitLang;
import net.md_5.bungee.api.chat.ClickEvent;
@ -227,7 +227,7 @@ public class NpcOfferQuestPrompt extends MiscStringPrompt {
if (!plugin.getConfigSettings().canConfirmAccept()) {
quester.takeQuest(q, false);
} else {
plugin.getConversationFactory().buildConversation(player).begin();
new QuestAcceptPrompt(player.getUniqueId(), plugin).start();
}
}
return Prompt.END_OF_CONVERSATION;

View File

@ -1,47 +1,40 @@
package me.pikamug.quests.convo.misc;
import me.pikamug.quests.BukkitQuestsPlugin;
import me.pikamug.quests.events.misc.MiscPostQuestAcceptEvent;
import me.pikamug.quests.player.Quester;
import me.pikamug.quests.util.BukkitLang;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.browsit.conversations.api.action.Prompt;
import org.browsit.conversations.api.data.Conversation;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
public class QuestAcceptPrompt extends MiscStringPrompt {
import java.util.UUID;
private ConversationContext context;
public class QuestAcceptPrompt {
private final UUID uuid;
private final BukkitQuestsPlugin plugin;
public QuestAcceptPrompt(BukkitQuestsPlugin plugin) {
super(null);
public QuestAcceptPrompt(final UUID uuid, BukkitQuestsPlugin plugin) {
super();
this.uuid = uuid;
this.plugin = plugin;
}
public QuestAcceptPrompt(final ConversationContext context) {
super(context);
plugin = (BukkitQuestsPlugin)context.getPlugin();
}
@Override
public ConversationContext getConversationContext() {
return context;
}
public int getSize() {
return 2;
}
public String getTitle(final ConversationContext context) {
public String getTitle() {
return null;
}
@SuppressWarnings("unused")
public ChatColor getNumberColor(final ConversationContext context, final int number) {
public ChatColor getNumberColor(final int number) {
switch (number) {
case 1:
return ChatColor.GREEN;
@ -53,7 +46,7 @@ public class QuestAcceptPrompt extends MiscStringPrompt {
}
@SuppressWarnings("unused")
public String getSelectionText(final ConversationContext context, final int number) {
public String getSelectionText(final int number) {
switch (number) {
case 1:
return ChatColor.GREEN + BukkitLang.get("yesWord");
@ -64,53 +57,50 @@ public class QuestAcceptPrompt extends MiscStringPrompt {
}
}
public String getQueryText(final ConversationContext context) {
public String getQueryText() {
return BukkitLang.get("acceptQuest");
}
@Override
public @NotNull String getPromptText(final @NotNull ConversationContext context) {
this.context = context;
public @NotNull String getPromptText(final @NotNull UUID uuid) {
if (plugin == null) {
return ChatColor.YELLOW + BukkitLang.get("itemCreateCriticalError");
}
final MiscPostQuestAcceptEvent event = new MiscPostQuestAcceptEvent(context, this);
plugin.getServer().getPluginManager().callEvent(event);
// TODO resolve
/*final MiscPostQuestAcceptEvent event = new MiscPostQuestAcceptEvent(this);
plugin.getServer().getPluginManager().callEvent(event);*/
if (!plugin.getConfigSettings().canClickablePrompts()) {
return ChatColor.YELLOW + getQueryText(context) + " " + ChatColor.GREEN
+ getSelectionText(context, 1) + ChatColor.RESET + " / " + getSelectionText(context, 2);
return ChatColor.YELLOW + getQueryText() + " " + ChatColor.GREEN
+ getSelectionText(1) + ChatColor.RESET + " / " + getSelectionText(2);
}
final TextComponent component = new TextComponent("");
component.addExtra(ChatColor.YELLOW + getQueryText(context) + " " + ChatColor.GREEN);
final TextComponent yes = new TextComponent(getSelectionText(context, 1));
component.addExtra(ChatColor.YELLOW + getQueryText() + " " + ChatColor.GREEN);
final TextComponent yes = new TextComponent(getSelectionText(1));
yes.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/quests choice " + BukkitLang.get("yesWord")));
component.addExtra(yes);
component.addExtra(ChatColor.RESET + " / ");
final TextComponent no = new TextComponent(getSelectionText(context, 2));
final TextComponent no = new TextComponent(getSelectionText(2));
no.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/quests choice " + BukkitLang.get("noWord")));
component.addExtra(no);
((Player)context.getForWhom()).spigot().sendMessage(component);
Bukkit.getPlayer(uuid).spigot().sendMessage(component);
return "";
}
@Override
public Prompt acceptInput(final @NotNull ConversationContext context, final String input) {
final BukkitQuestsPlugin plugin = (BukkitQuestsPlugin)context.getPlugin();
public void acceptInput(final @NotNull UUID uuid, final String input) {
if (plugin == null || input == null) {
return Prompt.END_OF_CONVERSATION;
return;
}
final Player player = (Player) context.getForWhom();
final Player player = Bukkit.getPlayer(uuid);
if (input.equalsIgnoreCase("1") || input.equalsIgnoreCase("y")
|| input.equalsIgnoreCase(BukkitLang.get("yesWord"))
|| input.equalsIgnoreCase(BukkitLang.get(player, "yesWord"))) {
final Quester quester = plugin.getQuester(player.getUniqueId());
final Quester quester = plugin.getQuester(uuid);
if (quester == null) {
plugin.getLogger().info("Ended conversation because quester for " + getName() + "was null");
return Prompt.END_OF_CONVERSATION;
plugin.getLogger().info("Ended conversation because quester for " + player.getName() + "was null");
return;
}
final String questIdToTake = quester.getQuestIdToTake();
if (plugin.getQuestById(questIdToTake) == null) {
@ -121,18 +111,25 @@ public class QuestAcceptPrompt extends MiscStringPrompt {
} else {
quester.takeQuest(plugin.getQuestById(questIdToTake), false);
}
return Prompt.END_OF_CONVERSATION;
return;
} else if (input.equalsIgnoreCase("2") || input.equalsIgnoreCase("n")
|| input.equalsIgnoreCase(BukkitLang.get("noWord"))
|| input.equalsIgnoreCase(BukkitLang.get(player, "noWord"))) {
BukkitLang.send(player, ChatColor.YELLOW + BukkitLang.get("cancelled"));
return Prompt.END_OF_CONVERSATION;
return;
} else {
final String msg = BukkitLang.get(player, "questInvalidChoice")
.replace("<yes>", BukkitLang.get(player, "yesWord"))
.replace("<no>", BukkitLang.get(player, "noWord"));
BukkitLang.send(player, ChatColor.RED + msg);
return new QuestAcceptPrompt(context);
return;
}
}
public void start() {
new Conversation(uuid)
.prompt(new Prompt<String>(getPromptText(uuid))
.fetch((input, sender) -> acceptInput(uuid, input)))
.run();
}
}

View File

@ -11,6 +11,7 @@
package me.pikamug.quests.listeners;
import me.pikamug.quests.BukkitQuestsPlugin;
import me.pikamug.quests.convo.misc.QuestAcceptPrompt;
import me.pikamug.quests.enums.ObjectiveType;
import me.pikamug.quests.player.BukkitQuestProgress;
import me.pikamug.quests.player.Quester;
@ -251,7 +252,7 @@ public class BukkitCitizensListener implements Listener {
for (final String msg : extracted(quester).split("<br>")) {
player.sendMessage(msg);
}
plugin.getConversationFactory().buildConversation(player).begin();
new QuestAcceptPrompt(player.getUniqueId(), plugin).start();
}
}
}

View File

@ -10,6 +10,7 @@
package me.pikamug.quests.listeners;
import me.pikamug.quests.convo.misc.QuestAcceptPrompt;
import me.pikamug.quests.quests.BukkitQuest;
import me.pikamug.quests.player.BukkitQuester;
import me.pikamug.quests.BukkitQuestsPlugin;
@ -415,7 +416,7 @@ public class BukkitPlayerListener implements Listener {
for (final String msg : s.split("<br>")) {
BukkitLang.send(player, msg);
}
plugin.getConversationFactory().buildConversation(player).begin();
new QuestAcceptPrompt(player.getUniqueId(), plugin).start();
}
break;
}

View File

@ -4,6 +4,7 @@ import lol.pyr.znpcsplus.api.event.NpcInteractEvent;
import lol.pyr.znpcsplus.api.interaction.InteractionType;
import lol.pyr.znpcsplus.api.npc.Npc;
import me.pikamug.quests.BukkitQuestsPlugin;
import me.pikamug.quests.convo.misc.QuestAcceptPrompt;
import me.pikamug.quests.enums.ObjectiveType;
import me.pikamug.quests.player.BukkitQuestProgress;
import me.pikamug.quests.player.Quester;
@ -244,7 +245,7 @@ public class BukkitZnpcsApiListener implements Listener {
for (final String msg : extracted(quester).split("<br>")) {
player.sendMessage(msg);
}
plugin.getConversationFactory().buildConversation(player).begin();
new QuestAcceptPrompt(player.getUniqueId(), plugin).start();
}
}
}

View File

@ -23,6 +23,7 @@ import me.pikamug.quests.conditions.BukkitCondition;
import me.pikamug.quests.config.BukkitConfigSettings;
import me.pikamug.quests.config.ConfigSettings;
import me.pikamug.quests.convo.misc.QuestAbandonPrompt;
import me.pikamug.quests.convo.misc.QuestAcceptPrompt;
import me.pikamug.quests.dependencies.BukkitDependencies;
import me.pikamug.quests.entity.BukkitCountableMob;
import me.pikamug.quests.enums.ObjectiveType;
@ -522,7 +523,7 @@ public class BukkitQuester implements Quester {
if (!plugin.getConfigSettings().canConfirmAccept()) {
takeQuest(quest, false);
} else {
plugin.getConversationFactory().buildConversation(getPlayer()).begin();
new QuestAcceptPrompt(getPlayer().getUniqueId(), plugin).start();
}
return true;
} else {