From 8e727c5f3bf59834a50c974f9340c554d37a97ee Mon Sep 17 00:00:00 2001 From: whitebelyash Date: Sun, 8 Feb 2026 22:04:41 +0400 Subject: [PATCH] Add VanillaCrafts style page navigation --- .../net/coreprotect/utility/ChatUtils.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/main/java/net/coreprotect/utility/ChatUtils.java b/src/main/java/net/coreprotect/utility/ChatUtils.java index 865a5f9..37acdec 100644 --- a/src/main/java/net/coreprotect/utility/ChatUtils.java +++ b/src/main/java/net/coreprotect/utility/ChatUtils.java @@ -2,6 +2,11 @@ package net.coreprotect.utility; import net.coreprotect.language.Phrase; import net.coreprotect.language.Selector; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.event.HoverEvent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.command.ConsoleCommandSender; @@ -143,6 +148,57 @@ public class ChatUtils { return message.append(Color.WHITE + backArrow + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_PAGE, Color.WHITE + page + "/" + totalPages) + nextArrow + pagination).toString(); } + public static String getPageNavigationVC(String command, int page, int totalPages) { + if (totalPages < 1) + return ""; + Component separator = Component.text(" | ", NamedTextColor.DARK_GRAY, TextDecoration.BOLD); + String backButtonText = "[назад]"; + String nextButtonText = "[далее]"; + + HoverEvent backButtonHover = HoverEvent + .showText(Component.text("Нажмите, чтобы перейти на предыдущую страницу", NamedTextColor.RED)); + HoverEvent nextButtonHover = HoverEvent + .showText(Component.text("Нажмите, чтобы перейти на следующую страницу", NamedTextColor.GREEN)); + + ClickEvent backButtonClick = ClickEvent.runCommand("/" + command + " l " + (page - 1)); + ClickEvent nextButtonClick = ClickEvent.runCommand("/" + command + " l " + (page + 1)); + + + Component backButton; + if (page > 1) { + backButton = Component.text(backButtonText) + .color(NamedTextColor.RED) + .hoverEvent(backButtonHover) + .clickEvent(backButtonClick); + } else { + backButton = Component.text(backButtonText) + .color(NamedTextColor.GRAY) + .decorate(TextDecoration.ITALIC); + } + + Component nextButton; + if (page < totalPages) { + nextButton = Component.text(nextButtonText) + .color(NamedTextColor.GREEN) + .hoverEvent(nextButtonHover) + .clickEvent(nextButtonClick); + } else { + nextButton = Component.text(nextButtonText) + .color(NamedTextColor.GRAY) + .decorate(TextDecoration.ITALIC); + } + + Component pageCounter = Component.text(page + "/" + totalPages, NamedTextColor.GRAY); + + Component navigation = Component.empty() + .append(backButton) + .append(separator) + .append(pageCounter) + .append(separator) + .append(nextButton); + return MiniMessage.miniMessage().serialize(navigation); + } + public static String getTimeSince(long resultTime, long currentTime, boolean component) { StringBuilder message = new StringBuilder(); double timeSince = currentTime - (resultTime + 0.00);