Skip to content

Instantly share code, notes, and snippets.

@Revxrsal
Created March 28, 2024 21:00
Show Gist options
  • Save Revxrsal/12eedcb9666af359c32ee404fee739d3 to your computer and use it in GitHub Desktop.
Save Revxrsal/12eedcb9666af359c32ee404fee739d3 to your computer and use it in GitHub Desktop.
HelpRenderer for Lamp
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