Created
March 28, 2024 21:00
-
-
Save Revxrsal/12eedcb9666af359c32ee404fee739d3 to your computer and use it in GitHub Desktop.
HelpRenderer for Lamp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package powerhomes.command.process; | |
import net.kyori.adventure.audience.Audience; | |
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.serializer.legacy.LegacyComponentSerializer; | |
import org.bukkit.command.CommandSender; | |
import powerhomes.PowerHomes; | |
import powerhomes.util.Preconditions; | |
import revxrsal.commands.annotation.Default; | |
import revxrsal.commands.command.ExecutableCommand; | |
import revxrsal.commands.help.CommandHelp; | |
public interface HelpRenderer { | |
static void renderHelpMenu(CommandSender sender, | |
CommandHelp<Component> help, | |
@Default("1") int page, | |
ExecutableCommand command) { | |
Helper.sendHelp(sender, help, page, command); | |
} | |
class Helper { | |
private static final int PAGE_SIZE = 9; | |
private static void sendHelp(CommandSender sender, CommandHelp<Component> help, int page, ExecutableCommand command) { | |
Audience audience = PowerHomes.get().getAudiences().sender(sender); | |
int pageSize = help.getPageSize(PAGE_SIZE); | |
int index = Preconditions.coerce(page, 1, pageSize); | |
sendTopBar(audience, index, pageSize, command); | |
CommandHelp<Component> helpPage = help.paginate(index, PAGE_SIZE); | |
for (Component component : helpPage) { | |
audience.sendMessage(component); | |
} | |
sendBottomBar(audience, index, pageSize); | |
} | |
private static void sendTopBar(Audience audience, int currentPage, int pageSize, ExecutableCommand command) { | |
String previous = "/" + command.getPath().toRealString() + " " + (currentPage - 1); | |
String next = "/" + command.getPath().toRealString() + " " + (currentPage + 1); | |
Component bar = Component.text() | |
.append(lg("&7&m------")) | |
.append( | |
currentPage <= 1 ? lg("&7&l <<") | |
.hoverEvent(HoverEvent.showText(lg("&fThis is the first page"))) | |
: lg("&a&l <<").clickEvent(ClickEvent.runCommand(previous)) | |
.hoverEvent(HoverEvent.showText(lg("&aPrevious page"))) | |
) | |
.append(lg("&r &8| ")) | |
.append( | |
currentPage >= pageSize ? lg("&a&l>> ") | |
.hoverEvent(HoverEvent.showText(lg("&fThis is the last page"))) | |
: lg("&a&l>> ").clickEvent(ClickEvent.runCommand(next)) | |
.hoverEvent(HoverEvent.showText(lg("&aNext page"))) | |
) | |
.append(lg("&7&m------")) | |
.build(); | |
audience.sendMessage(bar); | |
} | |
private static void sendBottomBar(Audience audience, int index, int pageSize) { | |
Component bar = Component.text() | |
.append(lg("&7&m-------&a (")) | |
.append(lg((index == pageSize ? "&2" : "&e") + index + "&7/&2" + pageSize)) | |
.append(lg("&a) &7&m-------")) | |
.build(); | |
audience.sendMessage(bar); | |
} | |
private static Component lg(String m) { // very long line D: | |
return LegacyComponentSerializer.legacyAmpersand().deserialize(m); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment