package com.alttd.altitudequests.util; import com.alttd.altitudequests.config.Config; 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 org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class ProgressBookOpener { private static final MiniMessage miniMessage = MiniMessage.miniMessage(); public static void openProgressBook(Player player) { player.openBook(getProgressBook(player)); } private static Book getProgressBook (Player player) { return Book.builder() .author(miniMessage.deserialize(Config.PROGRESS_BOOK_AUTHOR)) .title(miniMessage.deserialize(Config.PROGRESS_BOOK_TITLE)) .pages(getPages(player)) .build(); } private static final Component error = MiniMessage.miniMessage().deserialize("Error retrieving quest data"); private static List 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.component("quest", dailyQuest.getDisplayName())), TagResolver.resolver(Placeholder.component("variant", dailyQuest.getVariant().getName())), dailyQuest.getTagResolvers() ); List pages = new ArrayList<>(Config.PROGRESS_PAGES); return (pages.stream() .map(page -> miniMessage.deserialize(page, tagResolver)) .collect(Collectors.toList())); } }