# IPacketMenuManager
> Manages the lifecycle of PacketMenu instances for players.
`gg.lode.lecternapi.api.manager.IPacketMenuManager`
---
## Signature
```java
public interface IPacketMenuManager
```
---
## Methods
### open
```java
void open(Player player, PacketMenu menu)
```
Opens a menu for a player. If the player already has a menu open, it is closed first. The menu is initialized, all element packets are sent, and the button overlay is started automatically.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
| `menu` | `PacketMenu` | The menu to open. |
---
### close
```java
void close(Player player)
```
Closes the currently open menu for a player, removing all elements and stopping the button overlay. If a close action was set on the menu, it is executed.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
---
### getOpenMenu
```java
@Nullable PacketMenu getOpenMenu(Player player)
```
Returns the currently open menu for a player, or `null` if none is open.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
**Returns:** `PacketMenu` — The open menu, or `null`.
---
### hasOpenMenu
```java
default boolean hasOpenMenu(Player player)
```
Returns whether the player has a menu open.
| Parameter | Type | Description |
|---|---|---|
| `player` | `Player` | The target player. |
**Returns:** `boolean` — `true` if the player has an open menu.
---
## Related Pages
- [[ILecternAPI]] — Access via `getPacketMenuManager()`
- [[PacketMenu]] — Menu base class
- [[ButtonListener]] — Button event handler
- [[MenuTransform]] — Element positioning