Developers2 min read
Events
Ready, consent, staff, keybind, UI and client events on every platform.
Every platform delivers the same moments. On Bukkit you also get dedicated events for keybinds, UI, the inspector and staff actions; elsewhere those arrive through TehoListener.
What fires when
| Moment | TehoListener | Bukkit event |
|---|---|---|
| The handshake finished and sends will work | onReady | TehoPlayerReadyEvent |
| The player left | onLeave | |
| The player accepted or declined staff tools or a data request | onConsent | TehoConsentEvent |
| A staff tool was switched on or off | onStaffTool | TehoStaffToolEvent |
| A generic client event, such as a hologram click | onEvent | TehoClientEvent |
| A server keybind was pressed or released | onKey | TehoKeyEvent |
| A server screen was clicked, changed, submitted or closed | onUi | TehoUiEvent |
| A moderator looked at something with the inspector | onInspect | TehoInspectEvent |
| A moderator picked an action on the wheel or a card | onStaffAction | TehoStaffActionEvent (cancellable) |
A hologram marked clickable was clicked | onHologramClick | TehoClientEvent with kind hologram.click |
| A cutscene finished or was skipped | onCutsceneEnded | |
| A resource pack prefetch finished | onPackStatus | |
| Your private grant was checked | onPrivileges |
Platform event classes
@EventHandler
public void onReady(TehoPlayerReadyEvent event) {
Player player = event.getPlayer();
TehoPlayer teho = event.getTehoPlayer();
}
@EventHandler
public void onTool(TehoStaffToolEvent event) {
if (event.getTool() == StaffTool.FREECAM && event.isActive()) {
vanish(event.getPlayer());
}
}@Subscribe
public void onReady(TehoPlayerReadyEvent event) {
Player player = event.getPlayer();
TehoPlayer teho = event.getTehoPlayer();
}Package dev.tehoclient.api.velocity.event: TehoPlayerReadyEvent, TehoConsentEvent, TehoStaffToolEvent, TehoClientEvent.
@EventHandler
public void onReady(TehoPlayerReadyEvent event) {
ProxiedPlayer player = event.getPlayer();
TehoPlayer teho = event.getTehoPlayer();
}Package dev.tehoclient.api.bungee.event: TehoPlayerReadyEvent, TehoConsentEvent, TehoStaffToolEvent, TehoClientEvent.
MinecraftServer.getGlobalEventHandler().addListener(TehoPlayerReadyEvent.class, event -> {
Player player = event.getPlayer();
TehoPlayer teho = event.getTehoPlayer();
});Package dev.tehoclient.api.minestom.event. The events implement PlayerEvent.
TehoFabricEvents.READY.register((teho, player) -> greet(teho, player));
TehoFabricEvents.CONSENT.register((teho, player, scope, items, granted) -> audit(player, scope, granted));READY, CLIENT_EVENT, CONSENT, STAFF_TOOL.
NeoForge.EVENT_BUS.addListener(TehoNeoForgeEvent.Ready.class, event -> greet(event.getTehoPlayer(), event.getPlayer()));TehoNeoForgeEvent.Ready, ClientEvent, Consent, StaffToolChanged.
@Listener
public void onReady(TehoSpongeEvent.Ready event) {
greet(event.tehoPlayer(), event.player());
}TehoSpongeEvent.Ready, ClientEvent, Consent, StaffToolChanged.
Consent results
TehoConsentEvent tells you how a player answered a prompt. getScope() says what was asked, getItems() lists what the answer covers, such as tool ids or info fields, and isGranted() says whether they agreed.
@EventHandler
public void onConsent(TehoConsentEvent event) {
if (!event.isGranted()) {
getLogger().info(event.getPlayer().getName() + " declined " + event.getScope() + " " + event.getItems());
}
}Cancelling staff actions
TehoStaffActionEvent fires on Bukkit before any action from the wheel or an inspector card runs, whether it is built in or a configured command. Cancel it to stop that behaviour and handle the action yourself.
@EventHandler
public void onAction(TehoStaffActionEvent event) {
if (event.getAction().equals("freeze") && event.getTarget().kind() == Target.Kind.PLAYER) {
Player suspect = Bukkit.getPlayer(event.getTarget().id());
if (suspect != null && suspect.hasPermission("skyline.freeze.exempt")) {
event.setCancelled(true);
event.getPlayer().sendMessage("That player cannot be frozen.");
}
}
}Through a proxy
When a proxy plugin owns the session, client replies such as consent, staff tool state and client events are relayed to the current backend, so these events fire on both the proxy and the backend. See Networks & proxies.