Plugin Initialization and Registration
In this final section, you'll learn how everything comes together in the main plugin class.
Goal
Ensure that all components (loaders, actions, permissibles, inventories) are registered properly when the plugin is enabled.
Step 1: Create Your Main Class
Example: ZMenuExample.java
import fr.maxlego08.example.buttons.BooksButton;
import fr.maxlego08.example.loaders.BasicLoader;
import fr.maxlego08.example.loaders.ExampleActionLoader;
import fr.maxlego08.example.loaders.ExampleMaterialLoader;
import fr.maxlego08.example.loaders.ExamplePermissibleLoader;
import fr.maxlego08.menu.api.ButtonManager;
import fr.maxlego08.menu.api.InventoryManager;
import fr.maxlego08.menu.api.exceptions.InventoryException;
import fr.maxlego08.menu.api.loader.NoneLoader;
import fr.maxlego08.menu.api.pattern.PatternManager;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
public final class ZMenuExample extends JavaPlugin {
@Override
public void onEnable() {
this.saveDefaultConfig();
InventoryManager inventoryManager = getProvider(InventoryManager.class);
ButtonManager buttonManager = getProvider(ButtonManager.class);
PatternManager patternManager = getProvider(PatternManager.class);
// Register custom material loader
inventoryManager.registerMaterialLoader(new ExampleMaterialLoader());
// Register custom button loaders
buttonManager.register(new BasicLoader(this));
buttonManager.register(new NoneLoader(this, BooksButton.class, "PAGINATION_EXAMPLE"));
// Register actions and permissions
buttonManager.registerAction(new ExampleActionLoader());
buttonManager.registerPermissible(new ExamplePermissibleLoader(buttonManager));
// Load inventory file
try {
inventoryManager.loadInventoryOrSaveResource(this, "inventories/example.yml");
} catch (InventoryException exception) {
exception.printStackTrace();
}
}
@Override
public void onDisable() {
// Any cleanup if needed
}
private <T> T getProvider(Class<T> classz) {
RegisteredServiceProvider<T> provider = getServer().getServicesManager().getRegistration(classz);
if (provider == null) {
throw new RuntimeException("Unable to retrieve the provider " + classz);
}
return provider.getProvider();
}
}
Step 2: Define plugin.yml
name: zMenuExample
version: '1.0.0'
main: fr.maxlego08.example.ZMenuExample
api-version: '1.21'
authors: [Maxlego08]
description: Example for zMenu
website: https://groupez.dev/
Result
Once compiled and installed on your server with zMenu installed, your plugin will:
Register all custom logic
Load inventories
Be ready to use
/menu open example
or call menus programmatically
Last updated