🇱🇷
zMenu
Marketplace
English
English
  • 🍾Getting started
  • 🔌Installing zMenu
  • ➕Supported Plugins
  • 👍zMenu+
  • â›°ī¸Configurations
    • â„šī¸Informations
    • 📜Commands and Permissions
    • đŸĒ§PlaceHolder
    • How to create an inventory step by step
    • 👨‍đŸ’ģInventories
    • âšī¸Buttons
    • 🏁Requirements
    • â˜ĸī¸Actions
    • đŸĒItems
    • Global Placeholders
    • 🔋Patterns
    • Commands
    • 🛝Player data
    • đŸĻŦConfig.json
  • API
    • â„šī¸Getting Started with zMenu API
    • Creating a Basic Button
    • Creating a Pagination Button
    • Creating a Custom Loader
    • Creating a Custom Action
    • Creating a Custom Material Loader
    • Creating a Custom Permission System
    • Creating and Using Inventory Files
  • Plugin Initialization and Registration
  • đŸ—ƒī¸Plugin's files
  • Update to new API
Powered by GitBook
On this page
  • Goal
  • Step 1: Create the Button Class
  • Step 2: Register the Button
  • Step 3: Use It in an Inventory
  • Result
Edit on GitHub
  1. API

Creating a Pagination Button

In this section, you'll learn how to create a pagination button that displays a list of items dynamically, such as books.

Goal

We want to display a list of book titles in a paginated format. When a player clicks on one, they receive a message and the inventory closes.

Step 1: Create the Button Class

Create a class BooksButton that extends PaginateButton:

import fr.maxlego08.menu.api.button.PaginateButton;
import fr.maxlego08.menu.api.engine.InventoryEngine;
import fr.maxlego08.menu.api.utils.Placeholders;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;

import java.util.List;

public class BooksButton extends PaginateButton {

    List<String> bestsellers = List.of(
        "The First Gentleman", "Stuart Woods' Finders Keepers", "Badlands",
        "Hidden Nature", "Atmosphere: A Love Story", "Nightshade",
        "Project Hail Mary", "Problematic Summer Romance", "The Wedding People",
        "The Let Them Theory", "Original Sin", "Atomic Habits",
        "The Alchemist", "Great Big Beautiful Life", "The Emperor of Gladness",
        "Never Flinch", "Onyx Storm", "Fourth Wing", "Till Summer Do Us Part",
        "Iron Flame", "My Hero Academia, Vol. 41", "Dandadan, Vol. 13",
        "The Tenant", "Remarkably Bright Creatures", "Funny Story",
        "One Golden Summer", "The Wager", "On Tyranny",
        "Braiding Sweetgrass", "The Body Keeps the Score"
    );

    @Override
    public void onRender(Player player, InventoryEngine inventoryEngine) {
        this.paginate(this.bestsellers, inventoryEngine, (slot, book) -> {
            Placeholders placeholders = new Placeholders();
            placeholders.register("book", book);

            inventoryEngine.addItem(slot, this.getItemStack().build(player, false, placeholders))
                .setClick(event -> {
                    player.sendMessage(Component.text("You clicked on ").append(Component.text(book)));
                    player.closeInventory();
                });
        });
    }

    @Override
    public int getPaginationSize(Player player) {
        return this.bestsellers.size();
    }
}

Step 2: Register the Button

You can register this button directly using NoneLoader in your main plugin class:

buttonManager.register(new NoneLoader(this, BooksButton.class, "PAGINATION_EXAMPLE"));

Step 3: Use It in an Inventory

Example usage in inventories/example.yml:

pagination:
  type: PAGINATION_EXAMPLE
  slots:
    - 0-8
  item:
    material: BOOK
    name: "&7Book&8: &f%book%"

Result

The inventory displays a list of book titles. Clicking on one shows a message and closes the inventory.

PreviousCreating a Basic ButtonNextCreating a Custom Loader

Last updated 1 day ago