Skip to content

Event Specification

Overview

The Yeow event system is the mechanism by which the runtime delivers game events to plugins. Plugins subscribe to events via event.subscribe, and the runtime delivers event data through the cb channel.


Registration and Unregistration

Plugins manage event subscriptions through the event.subscribe and event.unsubscribe methods on the task channel. See the Event System task specification for details.

Field Adaptation Rules

In event data:

  • The player field holds the player's UUID string; the caller can look up the Player by UUID
  • The from, to, and respawnLocation fields hold location objects of the form { "x": <double>, "y": <double>, "z": <double>, "yaw": <double>, "pitch": <double>, "world": "<name>" }
  • Events use the _cancellable field to indicate whether they can be cancelled

Event Name Table

All event names use camelCase format. Complete list:

Event nameCategoryCancellableDescription
playerJoinPlayerNoPlayer joined
playerQuitPlayerNoPlayer quit
playerChatPlayerYesPlayer chatted
playerMovePlayerYesPlayer moved
playerInteractPlayerYesPlayer interacted
playerCommandPlayerYesPlayer ran a command
playerDeathPlayerNoPlayer died
playerRespawnPlayerNoPlayer respawned
playerTeleportPlayerYesPlayer teleported
playerItemConsumePlayerYesPlayer consumed an item
playerDropItemPlayerYesPlayer dropped an item
playerPickupItemPlayerYesPlayer picked up an item
playerBucketFillPlayerYesPlayer filled a bucket with liquid
playerBucketEmptyPlayerYesPlayer emptied a bucket
playerExpChangePlayerNoPlayer experience changed
playerLevelChangePlayerNoPlayer level changed
playerGameModeChangePlayerNoPlayer game mode changed
playerAdvancementDonePlayerNoPlayer completed an advancement
playerToggleSneakPlayerNoPlayer toggled sneaking
playerToggleFlightPlayerNoPlayer toggled flying
foodLevelChangePlayerYesPlayer hunger changed
entityDamageEntityYesEntity damaged
entityDeathEntityNoEntity died
entitySpawnEntityNoEntity spawned
entityExplodeEntityYesEntity exploded
entityRegainHealthEntityNoEntity regained health
entityTargetEntityNoEntity changed target
projectileLaunchEntityNoProjectile launched
projectileHitEntityNoProjectile hit
blockBreakBlockYesBlock broken
blockPlaceBlockYesBlock placed
blockFadeBlockYesBlock faded
blockGrowBlockNoBlock grew
blockSpreadBlockNoBlock spread
blockExplodeBlockYesBlock exploded
inventoryOpenInventoryYesInventory opened
inventoryCloseInventoryNoInventory closed
inventoryClickInventoryYesInventory clicked
serverPingServerNoServer pinged
serverCommandServerYesConsole command
playerResourcePackStatusResource PackNoResource pack status changed
permissionCheckPermissionNoYeow ecosystem permission check (not a Paper-based event; see below)

permissionCheck (Yeow ecosystem permission check)

Yeow plugins intercept permission checks by returning { "allowed": <bool> } from the handler; not returning a value is treated as unhandled. When multiple handlers return conflicting results, the last one returned wins (execution order is not guaranteed).

  • Trigger scope (Yeow ecosystem only):
    • The player.hasPermission task
    • Execution-time checks for commands registered by Yeow plugins
    • hasPermission / command execution from other Java plugins does not trigger this — this check is not bound to other ecosystems
  • Priority: when permissionCheck produces a result, it overrides the Paper-based hasPermission; when unhandled, it falls back to the Paper-based one
  • Node merge: permission nodes are still registered into the Paper permission system at the same time (so traditional Java plugins / permission plugins can manage them); Yeow's check just has higher priority
FieldTypeDescription
targetstringThe check target: a player UUID or "CONSOLE"
nodestringThe permission node (e.g. myplugin.home)
permissionobjectThe permission object: { "node": "<node>", "default": "all" | "op" | "none" } (default is the registered default for that node, omitted when not registered)

Example:

json
{ "t": "cb", "p": "<cbId>", "r": { "target": "<uuid>", "node": "myplugin.home", "permission": { "node": "myplugin.home", "default": "all" } } }
// handler returns: { "allowed": true } or { "allowed": false }; or returns nothing (unhandled)

Module Documentation

ModuleDescription
player-events21 player events
entity-events6 entity events + 2 projectile events
block-events6 block events
inventory-events3 inventory events
server-events3 server events