Only provide a register extension function for SingleListener

This commit is contained in:
Jakob K
2021-06-15 18:10:31 +02:00
parent f27614dff4
commit ef1b3a7103

View File

@@ -7,11 +7,6 @@ import org.bukkit.event.EventPriority
import org.bukkit.event.HandlerList import org.bukkit.event.HandlerList
import org.bukkit.event.Listener import org.bukkit.event.Listener
/**
* Shortcut for registering this listener on the given plugin.
*/
fun Listener.register() = pluginManager.registerEvents(this, KSpigotMainInstance)
/** /**
* Shortcut for unregistering all events in this listener. * Shortcut for unregistering all events in this listener.
*/ */
@@ -37,8 +32,11 @@ inline fun <reified T : Event> Listener.register(
* This class represents a [Listener] with * This class represents a [Listener] with
* only one event to listen to. * only one event to listen to.
*/ */
interface SingleListener<T : Event> : Listener { abstract class SingleListener<T : Event>(
fun onEvent(event: T) val priority: EventPriority,
val ignoreCancelled: Boolean,
) : Listener {
abstract fun onEvent(event: T)
} }
/** /**
@@ -48,13 +46,15 @@ interface SingleListener<T : Event> : Listener {
* @param priority the priority when multiple listeners handle this event * @param priority the priority when multiple listeners handle this event
* @param ignoreCancelled if manual cancellation should be ignored * @param ignoreCancelled if manual cancellation should be ignored
*/ */
inline fun <reified T : Event> SingleListener<T>.register( inline fun <reified T : Event> SingleListener<T>.register() {
priority: EventPriority = EventPriority.NORMAL, pluginManager.registerEvent(
ignoreCancelled: Boolean = false, T::class.java,
) { this,
register<T>(priority, ignoreCancelled) { _, event -> priority,
(event as? T)?.let { this.onEvent(it) } { _, event -> (event as? T)?.let { this.onEvent(it) } },
} KSpigotMainInstance,
ignoreCancelled
)
} }
/** /**
@@ -70,9 +70,9 @@ inline fun <reified T : Event> listen(
register: Boolean = true, register: Boolean = true,
crossinline onEvent: (event: T) -> Unit, crossinline onEvent: (event: T) -> Unit,
): SingleListener<T> { ): SingleListener<T> {
val listener = object : SingleListener<T> { val listener = object : SingleListener<T>(priority, ignoreCancelled) {
override fun onEvent(event: T) = onEvent.invoke(event) override fun onEvent(event: T) = onEvent.invoke(event)
} }
if (register) listener.register(priority, ignoreCancelled) if (register) listener.register()
return listener return listener
} }