> For the complete documentation index, see [llms.txt](https://vulkan-technologies.gitbook.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://vulkan-technologies.gitbook.io/documentation/vulkan-menu/api/events.md).

# Events

VulkanMenu provides several events that you can listen to in your plugins to interact with menu operations.

## Available Events

### VMenuOpenEvent

Fired when a menu is about to be opened for a player. This event is cancellable.

```java
import com.vulkantechnologies.menu.event.VMenuOpenEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class MenuListener implements Listener {
    @EventHandler
    public void onMenuOpen(VMenuOpenEvent event) {
        // Get the player opening the menu
        Player player = event.getPlayer();
        
        // Get the menu being opened
        Menu menu = event.getMenu();
        
        // Cancel the event if needed
        if (shouldCancelMenuOpen(player)) {
            event.setCancelled(true);
        }
    }
}
```

**Properties:**

* `getPlayer()`: Returns the player opening the menu
* `getMenu()`: Returns the menu being opened
* `isCancelled()`: Check if the event is cancelled
* `setCancelled(boolean)`: Cancel or uncancel the event

### VMenuCloseEvent

Fired when a menu is closed by a player.

```java
import com.vulkantechnologies.menu.event.VMenuCloseEvent;

@EventHandler
public void onMenuClose(VMenuCloseEvent event) {
    Player player = event.getPlayer();
    Menu menu = event.getMenu();
    
    // Perform actions when menu is closed
    player.sendMessage("You closed the menu: " + menu.getId());
}
```

**Properties:**

* `getPlayer()`: Returns the player who closed the menu
* `getMenu()`: Returns the menu that was closed

### VMenuReloadEvent

Fired when the plugin configuration or a specific menu is reloaded.

```java
import com.vulkantechnologies.menu.event.VMenuReloadEvent;

@EventHandler
public void onMenuReload(VMenuReloadEvent event) {
    // This event is fired when menus are reloaded
    // You can use this to update your plugin's cached data
    reloadYourPluginData();
}
```

### VMenuEvent (Base Class)

Abstract base class for all menu events. Contains common properties shared by menu events.

**Properties:**

* `getPlayer()`: Returns the player associated with the event
* `getMenu()`: Returns the menu associated with the event
* `getHandlers()`: Returns the event handlers (inherited from Bukkit Event)
* `getHandlerList()`: Static method to get the handler list

## Registering Event Listeners

To use these events in your plugin, register your listener class:

```java
public class YourPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
        // Register your event listener
        getServer().getPluginManager().registerEvents(new MenuListener(), this);
    }
}
```

## Usage Examples

### Logging Menu Usage

```java
@EventHandler
public void onMenuOpen(VMenuOpenEvent event) {
    getLogger().info(String.format("Player %s opened menu %s",
        event.getPlayer().getName(),
        event.getMenu().getId()));
}
```

### Preventing Menu Access Based on Conditions

```java
@EventHandler
public void onMenuOpen(VMenuOpenEvent event) {
    Player player = event.getPlayer();
    
    // Example: Prevent opening menus in certain worlds
    if (player.getWorld().getName().equals("pvp_world")) {
        event.setCancelled(true);
        player.sendMessage("You cannot open menus in the PVP world!");
    }
}
```

### Performing Actions on Menu Close

```java
@EventHandler
public void onMenuClose(VMenuCloseEvent event) {
    // Example: Save player data when they close a specific menu
    if (event.getMenu().getId().equals("player_settings")) {
        savePlayerSettings(event.getPlayer());
    }
}
```
