GroupeZ Docs
Development

Introduction a l'API

Premiers pas avec l'API zMenu

zMenu fournit une API complete permettant aux developpeurs de s'integrer et d'etendre les fonctionnalites du plugin. Ce guide vous aidera a demarrer avec l'API zMenu.

Depot Maven

Ajoutez le depot GroupeZ a votre pom.xml :

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

Dependance Maven

Ajoutez l'API zMenu comme dependance :

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

Gradle

Pour les utilisateurs de Gradle :

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")
}

Dependance du Plugin

Ajoutez zMenu comme dependance dans votre plugin.yml :

# Dependance obligatoire (le plugin ne se chargera pas sans zMenu)
depend: [zMenu]

# Dependance optionnelle (le plugin se chargera meme sans zMenu)
softdepend: [zMenu]

Obtenir l'API

Acceder a l'Instance du Plugin

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() {
        // Obtenir l'instance de zMenu
        this.menuPlugin = (MenuPlugin) Bukkit.getPluginManager().getPlugin("zMenu");

        if (this.menuPlugin == null) {
            getLogger().severe("zMenu non trouve ! Desactivation du plugin...");
            Bukkit.getPluginManager().disablePlugin(this);
            return;
        }

        getLogger().info("Connexion reussie a zMenu !");
    }

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

Connexion Securisee avec Dependance Optionnelle

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() {
        // Tenter de se connecter a zMenu
        hookZMenu();

        if (zMenuEnabled) {
            getLogger().info("Integration zMenu activee !");
            // Enregistrer les fonctionnalites specifiques a zMenu
        } else {
            getLogger().info("zMenu non trouve, fonctionnement sans 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;
    }
}

Interfaces Principales

L'API zMenu fournit plusieurs interfaces principales :

L'interface principale du plugin donnant acces a tous les gestionnaires :

MenuPlugin menuPlugin = ...;

// Gestion des inventaires
InventoryManager inventoryManager = menuPlugin.getInventoryManager();

// Enregistrement des types de boutons
ButtonManager buttonManager = menuPlugin.getButtonManager();

// Gestion des commandes
CommandManager commandManager = menuPlugin.getCommandManager();

// Gestion des donnees joueur
DataManager dataManager = menuPlugin.getDataManager();

Gestionnaires Principaux

GestionnaireFonction
InventoryManagerCharger, gerer et ouvrir les inventaires
ButtonManagerEnregistrer des types de boutons personnalises
CommandManagerEnregistrer des commandes personnalisees
DataManagerAcceder au stockage des donnees joueur

Structure de l'API

fr.maxlego08.menu.api
├── MenuPlugin              # Interface principale du plugin
├── InventoryManager        # Operations sur les inventaires
├── ButtonManager           # Enregistrement des boutons
├── CommandManager          # Gestion des commandes
├── DataManager             # Acces aux donnees joueur
├── button/
│   ├── Button              # Interface des boutons
│   └── ButtonLoader        # Chargement des boutons
├── action/
│   ├── Action              # Interface des actions
│   └── ActionLoader        # Chargement des actions
├── requirement/
│   ├── Requirement         # Interface des conditions
│   └── Permissible         # Verification des permissions
└── event/
    ├── ButtonLoadEvent
    ├── InventoryLoadEvent
    └── PlayerOpenInventoryEvent

Bonnes Pratiques

  1. Toujours verifier la nullite lors de la recuperation de l'instance du plugin zMenu
  2. Utiliser les dependances optionnelles si votre plugin peut fonctionner sans zMenu
  3. Ne pas stocker les references aux gestionnaires - les recuperer au moment ou vous en avez besoin
  4. Gerer les exceptions correctement lors du travail avec les inventaires
  5. Tester minutieusement avec differentes versions de zMenu

Exemple de Plugin Complet

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() {
        // Se connecter a zMenu
        this.menuPlugin = (MenuPlugin) Bukkit.getPluginManager().getPlugin("zMenu");

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

        getLogger().info("MyPlugin active avec l'integration zMenu !");
    }

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

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

        // Ouvrir un inventaire zMenu
        manager.getInventory("my-menu").ifPresent(inv -> {
            manager.openInventory(player, inv);
        });

        return true;
    }
}

Etapes Suivantes

Support

Pour le support de l'API :

Sur cette page

GroupeZ MCP

La documentation dans ton IA

Le MCP permet à ton IA de chercher dans la documentation GroupeZ et de lire les exemples à jour pour t’aider à configurer tes plugins.

Lecture seule · Sans clé API côté documentation

1. Copie l’adresse du serveur

Transport : HTTP (Streamable HTTP). Authentification : aucune. Ton outil utilise son propre modèle et ses propres limites d’abonnement.

  1. Ouvre Plugins dans ChatGPT sur le web, puis + → Ajouter un serveur MCP personnalisé.
  2. Nomme-le « GroupeZ Documentation », colle l’URL ci-dessus et choisis « Aucune authentification ». Crée puis installe le plugin.
  3. Dans une conversation, tape @ et sélectionne ce plugin avant d’envoyer ta question. Si nécessaire, active search, get_page et list_pages dans ses paramètres.
Guide officiel de cet outil

3. Pose une question

Utilise le MCP GroupeZ pour m’aider à créer un inventaire zMenu. Recherche les pages pertinentes, lis les exemples et cite tes sources.
Autres clients et dépannage

Pour les clients utilisant mcpServers, adapte cet exemple à leur format :

{
  "mcpServers": {
    "groupez-docs": {
      "url": ""
    }
  }
}

Les outils disponibles sont search, get_page et list_pages. Après une mise à jour, actualise les outils du connecteur. Si ton IA n’y accède pas, vérifie que le connecteur est activé dans la conversation et que ton compte autorise les MCP personnalisés. Ouvrir l’URL dans un navigateur n’est pas un test MCP.