Creating a Basic Button

In this section, you'll learn how to create a basic custom button using zMenu.

Goal

We will create a button that sends a message to the player when clicked. The button is registered with the name BASIC_EXAMPLE.

Step 1: Create the Button Class

Create a class BasicButton that extends Button:

import fr.maxlego08.menu.api.button.Button;
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 org.bukkit.event.inventory.InventoryClickEvent;

public class BasicButton extends Button {

    private final String key;

    public BasicButton(String key) {
        this.key = key;
    }

    @Override
    public void onClick(Player player, InventoryClickEvent event, InventoryEngine inventory, int slot, Placeholders placeholders) {
        super.onClick(player, event, inventory, slot, placeholders);
        player.sendMessage(Component.text("Hey, it's nice to meet you! Button key: ").append(Component.text(key)));
    }

    @Override
    public boolean isPermanent() {
        return true;
    }
}

Step 2: Create a Loader

A loader allows zMenu to instantiate your button from a configuration file.

import fr.maxlego08.example.buttons.BasicButton;
import fr.maxlego08.menu.api.button.Button;
import fr.maxlego08.menu.api.button.DefaultButtonValue;
import fr.maxlego08.menu.api.loader.ButtonLoader;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.Plugin;

public class BasicLoader extends ButtonLoader {

    public BasicLoader(Plugin plugin) {
        super(plugin, "BASIC_EXAMPLE");
    }

    @Override
    public Button load(YamlConfiguration configuration, String path, DefaultButtonValue defaultButtonValue) {
        String key = configuration.getString(path + "key-example", "default key");
        return new BasicButton(key);
    }
}

Step 3: Register the Loader

In your plugin’s onEnable() method, register the loader:

buttonManager.register(new BasicLoader(this));

Step 4: Use It in an Inventory

Example usage in inventories/example.yml:

basic:
  type: BASIC_EXAMPLE
  slot: 10
  key-example: basic
  item:
    material: DIAMOND
    name: "&7Basic"

Result

When a player clicks the button, they will receive a message like:

Hey, it's nice to meet you! Button key: basic

Last updated