Skip to main content

API Introduction

zMenu provides a comprehensive API for developers to integrate with and extend the plugin's functionality. This guide will help you get started with the zMenu API.

Javadoc

The complete API documentation is available at: https://repo.groupez.dev/javadoc/releases/fr/maxlego08/menu/zmenu-api/1.1.0.6

Maven Repository

Add the GroupeZ repository to your pom.xml:

<repositories>
<repository>
<id>groupez</id>
<url>https://repo.groupez.dev/releases</url>
</repository>
</repositories>

Maven Dependency

Add the zMenu API as a dependency:

<dependencies>
<dependency>
<groupId>fr.maxlego08.menu</groupId>
<artifactId>zmenu-api</artifactId>
<version>1.1.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

Gradle

For Gradle users:

repositories {
maven { url 'https://repo.groupez.dev/releases' }
}

dependencies {
compileOnly 'fr.maxlego08.menu:zmenu-api:1.1.0.0'
}

Kotlin DSL

repositories {
maven("https://repo.groupez.dev/releases")
}

dependencies {
compileOnly("fr.maxlego08.menu:zmenu-api:1.1.0.0")
}

Plugin Dependency

Add zMenu as a dependency in your plugin.yml:

# Hard dependency (plugin won't load without zMenu)
depend: [zMenu]

# Soft dependency (plugin will load even without zMenu)
softdepend: [zMenu]

Getting the API

Access the Plugin Instance

import fr.maxlego08.menu.api.MenuPlugin;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin {

private MenuPlugin menuPlugin;

@Override
public void onEnable() {
// Get zMenu instance
this.menuPlugin = (MenuPlugin) Bukkit.getPluginManager().getPlugin("zMenu");

if (this.menuPlugin == null) {
getLogger().severe("zMenu not found! Disabling plugin...");
Bukkit.getPluginManager().disablePlugin(this);
return;
}

getLogger().info("Successfully hooked into zMenu!");
}

public MenuPlugin getMenuPlugin() {
return this.menuPlugin;
}
}

Safe Hook with Soft Dependency

import fr.maxlego08.menu.api.MenuPlugin;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin {

private MenuPlugin menuPlugin;
private boolean zMenuEnabled = false;

@Override
public void onEnable() {
// Try to hook into zMenu
hookZMenu();

if (zMenuEnabled) {
getLogger().info("zMenu integration enabled!");
// Register zMenu-specific features
} else {
getLogger().info("zMenu not found, running without integration.");
}
}

private void hookZMenu() {
Plugin plugin = Bukkit.getPluginManager().getPlugin("zMenu");
if (plugin != null && plugin.isEnabled()) {
this.menuPlugin = (MenuPlugin) plugin;
this.zMenuEnabled = true;
}
}

public boolean isZMenuEnabled() {
return this.zMenuEnabled;
}

public MenuPlugin getMenuPlugin() {
return this.menuPlugin;
}
}

Core Interfaces

The zMenu API provides several core interfaces:

The main plugin interface providing access to all managers:

MenuPlugin menuPlugin = ...;

// Inventory management
InventoryManager inventoryManager = menuPlugin.getInventoryManager();

// Button type registration
ButtonManager buttonManager = menuPlugin.getButtonManager();

// Command management
CommandManager commandManager = menuPlugin.getCommandManager();

// Player data management
DataManager dataManager = menuPlugin.getDataManager();

Key Managers

ManagerPurpose
InventoryManagerLoad, manage, and open inventories
ButtonManagerRegister custom button types
CommandManagerRegister custom commands
DataManagerAccess player data storage

API Structure

fr.maxlego08.menu.api
├── MenuPlugin # Main plugin interface
├── InventoryManager # Inventory operations
├── ButtonManager # Button registration
├── CommandManager # Command handling
├── DataManager # Player data access
├── button/
│ ├── Button # Button interface
│ └── ButtonLoader # Button loading
├── action/
│ ├── Action # Action interface
│ └── ActionLoader # Action loading
├── requirement/
│ ├── Requirement # Requirement interface
│ └── Permissible # Permission checking
└── event/
├── ButtonLoadEvent
├── InventoryLoadEvent
└── PlayerOpenInventoryEvent

Best Practices

  1. Always check for null when getting the zMenu plugin instance
  2. Use soft dependencies if your plugin can function without zMenu
  3. Don't store manager references - get them fresh when needed
  4. Handle exceptions gracefully when working with inventories
  5. Test thoroughly with different zMenu versions

Complete Example Plugin

package com.example.myplugin;

import fr.maxlego08.menu.api.MenuPlugin;
import fr.maxlego08.menu.api.InventoryManager;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class MyPlugin extends JavaPlugin {

private MenuPlugin menuPlugin;

@Override
public void onEnable() {
// Hook into zMenu
this.menuPlugin = (MenuPlugin) Bukkit.getPluginManager().getPlugin("zMenu");

if (this.menuPlugin == null) {
getLogger().severe("zMenu is required!");
Bukkit.getPluginManager().disablePlugin(this);
return;
}

getLogger().info("MyPlugin enabled with zMenu integration!");
}

@Override
public boolean onCommand(CommandSender sender, Command command,
String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("Players only!");
return true;
}

Player player = (Player) sender;
InventoryManager manager = menuPlugin.getInventoryManager();

// Open a zMenu inventory
manager.getInventory("my-menu").ifPresent(inv -> {
manager.openInventory(player, inv);
});

return true;
}
}

Next Steps

Support

For API support:

Copyright © 2026 GroupeZ|Build #loading...|-