# Events Overview
> Lectern dispatches Bukkit events when the client sends data to the server.
`gg.lode.lecternapi.api.event`
---
## Base Class
All Lectern events extend [[LecternClientEvent]]:
```java
public abstract class LecternClientEvent extends Event {
public Player getPlayer();
public String getEventId();
}
```
---
## Event Categories
### Button Events
| Event | Description |
|---|---|
| [[ButtonClickEvent]] | Player clicked a HUD button. |
| [[ButtonHoverEvent]] | Player hovered/unhovered a button. |
### Input Events
| Event | Description |
|---|---|
| [[KeybindPressedEvent]] | Player pressed or released a keybind. |
| [[KeybindChangeEvent]] | Player changed a keybind assignment. |
### Menu Events
| Event | Description |
|---|---|
| [[MenuCloseEvent]] | Player closed a packet menu. |
### Modal Prompt Events
| Event | Description |
|---|---|
| [[ModalPromptClickEvent]] | Player clicked a CONSUMER button on a modal prompt. |
### Cutscene Events
| Event | Description |
|---|---|
| [[CutsceneCallbackEvent]] | Cutscene reached a callback marker. |
| [[CutsceneCompleteEvent]] | Cutscene finished playing. |
### Voice Chat Events
| Event | Description |
|---|---|
| [[PlayerMuteEvent]] | Player muted themselves (suggestive). |
| [[PlayerUnmuteEvent]] | Player unmuted themselves. |
| [[PlayerDeafenEvent]] | Player deafened themselves. |
| [[PlayerUndeafenEvent]] | Player undeafened themselves. |
### Layout Events
| Event | Description |
|---|---|
| [[LayoutOpenEvent]] | A layout page is about to open. Cancellable. |
| [[LayoutInteractEvent]] | Player interacted with an element on an open page. Cancellable. |
| [[LayoutCloseEvent]] | A layout page closed, with the reason it closed. |
### Emote Wheel Events
| Event | Description |
|---|---|
| [[EmoteWheelSelectEvent]] | Player picked a slot on the emote wheel. |
| [[EmoteWheelCancelEvent]] | Player dismissed the wheel without picking. |
### Config Screen Events
| Event | Description |
|---|---|
| [[ConfigScreenChangeEvent]] | Player changed a widget value on a config screen. |
| [[ConfigScreenCloseEvent]] | Player closed a config screen. |
### Scrollable Screen Events
| Event | Description |
|---|---|
| [[ScrollableScreenClickEvent]] | Player clicked a button on a scrollable text screen. |
### Session Events
| Event | Description |
|---|---|
| [[PlayerAltF4Event]] | Player pressed Alt+F4 to close the game. Fires before the window goes. |
### Client Reporting Events
| Event | Description |
|---|---|
| [[ClientModsReportEvent]] | Client reported installed mods. |
| [[ClientPacksReportEvent]] | Client reported resource packs. |
| [[ClientPackDataEvent]] | Complete resource pack received from client. |
| [[ClientKeybindsReportEvent]] | Client reported its full keybind layout, once per handshake. |
| [[ClientInstallIdEvent]] | Client reported the id of its Lectern installation. |
| [[ClientInputTelemetryEvent]] | Batch of raw input events. Deprecated, the client no longer sends these. |
### Handshake Events
| Event | Description |
|---|---|
| [[LecternHandshakeEvent]] | Player's Lectern client completed the handshake. After this event, the player can receive effect packets. |
### Screenshot & Integrity Events
| Event | Description |
|---|---|
| [[ClientScreenshotEvent]] | Server received a screenshot from a client after requesting one. |
| [[ClientIntegrityReportEvent]] | Server received a client integrity report containing class hashes, JVM args, and classloader info. |
| [[ClientDownloadResourcePackEvent]] | Server finished downloading resource packs from a client. |
### HWID Events
| Event | Description |
|---|---|
| [[HWIDAltDetectedEvent]] | Player joined with a hardware fingerprint matching known alt accounts. |
### Security Events
| Event | Description |
|---|---|
| [[PossibleInjectedClientEvent]] | Client detected potentially injected mod. |
---
## Listening to Events
Register event listeners like any Bukkit event:
```java
public class MyListener implements Listener {
@EventHandler
public void onButtonClick(ButtonClickEvent event) {
Player player = event.getPlayer();
String reference = event.getReference();
player.sendMessage("You clicked: " + reference);
}
@EventHandler
public void onKeybind(KeybindPressedEvent event) {
if (event.isPressed() && event.getKey().equals("key.jump")) {
event.getPlayer().sendMessage("Jump pressed!");
}
}
@EventHandler
public void onCutsceneComplete(CutsceneCompleteEvent event) {
Player player = event.getPlayer();
String id = event.getCutsceneId();
player.sendMessage("Finished cutscene: " + id);
}
}
```
---
## Related Pages
- [[Lectern/Developers/Overview]]. Developer overview