# 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