Skip to content

Event as a lambda

Gabriel Souza edited this page Jan 8, 2020 · 4 revisions

The Event lambda is an Extension for Bukkit events simple to use. The goal is to replace the common event way, that you create a function, with an event parameter and @EventHandler annotation.

// MyClassListener : Listener

@EventHandler
fun onPlayerPickupItem(event: PlayerPickupItemEvent) {
  event.isCancelled = true
}

// in Main class
pluginManager.registerEvents(MyClassListener())

With KotlinBukkitAPI

*The events is auto registered

// MyClassListener : Listener

event<PlayerPickupItemEvent>(myPlugin) {
  isCancelled = true
}

inline fun <reified T : Event> Listener.event(
        plugin: Plugin,
        priority: EventPriority = EventPriority.NORMAL,
        ignoreCancelled: Boolean = true,
        crossinline block: T.() -> Unit
)

Events lambda

If you don't want to create a Listener class you can use the events lambda.

val listener = myPlugin.events {
  event<PlayerPickupItemEvent> {
    isCancelled = true
  }
}

In the case of events you don't need to add your plugin as a parameter, because the lambda block from events is an Extension from KListener.

inline fun Plugin.events(
      block: KListener<*>.() -> Unit
)

KListener interface

With this interface you can use event lambda without Plugin parameter.

class MyListenerClass(override val plugin: MyPlugin) : KListener<MyPlugin> {
  init {
    event<PlayerPickupItemEvent> {
      isCancelled = true
    }
  }
}

You can find the implementation and more of Event extensions here

Clone this wiki locally