Add VanillaCrafts style page navigation

This commit is contained in:
whitebelyash 2026-02-08 22:04:41 +04:00
parent 29d698b38f
commit 8e727c5f3b

View file

@ -2,6 +2,11 @@ package net.coreprotect.utility;
import net.coreprotect.language.Phrase; import net.coreprotect.language.Phrase;
import net.coreprotect.language.Selector; 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 net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.command.ConsoleCommandSender; 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(); 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<Component> backButtonHover = HoverEvent
.showText(Component.text("Нажмите, чтобы перейти на предыдущую страницу", NamedTextColor.RED));
HoverEvent<Component> 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) { public static String getTimeSince(long resultTime, long currentTime, boolean component) {
StringBuilder message = new StringBuilder(); StringBuilder message = new StringBuilder();
double timeSince = currentTime - (resultTime + 0.00); double timeSince = currentTime - (resultTime + 0.00);