Added a way to open books outside of the interact with entity event

open book after turning in item
moved more things from MineQuest to just Quest
Made Variant and made MineQuestObject extend Variant
Made quests reset if they aren't from (irl) today
Made quests reset when a new (irl) day starts

Basically made everything work
This commit is contained in:
2022-06-02 22:12:29 +02:00
parent e9bdb6a70d
commit 39900153d8
17 changed files with 389 additions and 163 deletions
@@ -24,9 +24,6 @@ public class LogoutEvent implements Listener {
public void run() {
if (Config.DEBUG)
Logger.info("Syncing %", event.getPlayer().getName());
Quest dailyQuest = Quest.getDailyQuest(uuid);
if (dailyQuest != null)
dailyQuest.save();
Quest.unloadUser(uuid);
ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF("try-unlock");
@@ -5,6 +5,7 @@ import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.database.Database;
import com.alttd.altitudequests.objects.Quest;
import com.alttd.altitudequests.util.Logger;
import com.alttd.altitudequests.util.Utilities;
import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteStreams;
import org.bukkit.Bukkit;
@@ -70,7 +71,7 @@ public class PluginMessageListener implements org.bukkit.plugin.messaging.Plugin
PreparedStatement statement = Database.getDatabase().getConnection().prepareStatement(sql);
statement.setString(1, uuid.toString());
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
if (resultSet.next() && resultSet.getInt("year_day") < Utilities.getYearDay()) {
Quest.loadDailyQuest(
resultSet.getString("quest"),
resultSet.getString("quest_variant"),
@@ -1,14 +1,8 @@
package com.alttd.altitudequests.events;
import com.alttd.altitudequests.AQuest;
import com.alttd.altitudequests.config.Config;
import com.alttd.altitudequests.config.LocalConfig;
import com.alttd.altitudequests.objects.Quest;
import net.kyori.adventure.inventory.Book;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import com.alttd.altitudequests.util.BookOpener;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -17,15 +11,11 @@ import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
public class TalkToQuest implements Listener {
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
private static final Set<UUID> inProcess = new HashSet<>();
@EventHandler(priority = EventPriority.HIGH)
@@ -42,38 +32,11 @@ public class TalkToQuest implements Listener {
new BukkitRunnable() {
@Override
public void run() {
player.openBook(getBook(event));
BookOpener.openBook(player);
inProcess.remove(uniqueId);
}
}.runTaskAsynchronously(AQuest.getInstance());
//TODO make it so everything can be done with commands and just don't let them tab complete and do them through the book instead
//TODO in config allow a multitude of events to be prepared and randomly select from them at certain times of day?
}
private Book getBook (PlayerInteractEntityEvent event) {
Player player = event.getPlayer();
return Book.builder()
.author(miniMessage.deserialize(Config.QUEST_BOOK_AUTHOR))
.title(miniMessage.deserialize(Config.QUEST_BOOK_TITLE))
.pages(getPages(player))
.build();
}
private static final Component error = MiniMessage.miniMessage().deserialize("<red>Error retrieving quest data</red>");
private List<Component> getPages(Player player) {
Quest dailyQuest = Quest.getDailyQuest(player.getUniqueId());
if (dailyQuest == null)
return List.of(error);
TagResolver tagResolver = TagResolver.resolver(
TagResolver.resolver(Placeholder.component("player", player.name())),
TagResolver.resolver(Placeholder.parsed("br", "\n")),
dailyQuest.getTagResolvers()
);
//TODO add weekly quest?
List<Component> pages = dailyQuest.getPages().stream()
.map(page -> miniMessage.deserialize(page, tagResolver))
.collect(Collectors.toList());
return (pages);
}
}