# ButtonListener
> Handles click and hover events for button elements in PacketMenu and PacketComponent.
`gg.lode.lecternapi.api.menu.ButtonListener`
---
## Signature
```java
public interface ButtonListener
```
---
## Overview
ButtonListener provides callback methods for button interactions. All methods have default no-op implementations, so you only need to override the ones you care about. Static factory methods are provided for common patterns.
---
## Usage
```java
// Click only
ButtonListener.onClick(origin -> origin.menu().close());
// Click and hover
ButtonListener.of(
origin -> origin.player().sendMessage("Clicked!"),
origin -> origin.player().sendMessage("Hovering!"),
origin -> origin.player().sendMessage("Stopped hovering!")
);
// Full implementation
new ButtonListener() {
@Override
public void onClick(Origin origin) {
origin.player().sendMessage("Clicked " + origin.reference());
}
@Override
public void onHoverStart(Origin origin) {
// highlight effect
}
@Override
public void onHoverEnd(Origin origin) {
// remove highlight
}
};
```
---
## Origin
```java
record Origin(Player player, PacketMenu menu, String reference)
```
Context provided to all listener callbacks.
| Field | Type | Description |
|---|---|---|
| `player` | `Player` | The player interacting with the button. |
| `menu` | `PacketMenu` | The menu containing the button. |
| `reference` | `String` | The button's reference ID. |
---
## Default Methods
### onClick
```java
default void onClick(Origin origin)
```
Called when the button is clicked. No-op by default.
---
### onHoverStart
```java
default void onHoverStart(Origin origin)
```
Called when the player starts hovering over the button. No-op by default.
---
### onHoverEnd
```java
default void onHoverEnd(Origin origin)
```
Called when the player stops hovering over the button. No-op by default.
---
## Static Factory Methods
### onClick (factory)
```java
static ButtonListener onClick(Consumer<Origin> handler)
```
Creates a listener that only handles clicks.
| Parameter | Type | Description |
|---|---|---|
| `handler` | `Consumer<Origin>` | The click handler. |
---
### of
```java
static ButtonListener of(Consumer<Origin> onClick, Consumer<Origin> onHoverStart, Consumer<Origin> onHoverEnd)
```
Creates a listener with all three callbacks.
| Parameter | Type | Description |
|---|---|---|
| `onClick` | `Consumer<Origin>` | The click handler. |
| `onHoverStart` | `Consumer<Origin>` | The hover-start handler. |
| `onHoverEnd` | `Consumer<Origin>` | The hover-end handler. |
---
## Related Pages
- [[PacketMenu]] — Uses ButtonListener for button elements
- [[PacketComponent]] — Uses ButtonListener for button elements