diff --git a/src/main/kotlin/net/axay/kspigot/event/Listeners.kt b/src/main/kotlin/net/axay/kspigot/event/Listeners.kt index 73fcb97e..ba6575ea 100644 --- a/src/main/kotlin/net/axay/kspigot/event/Listeners.kt +++ b/src/main/kotlin/net/axay/kspigot/event/Listeners.kt @@ -7,11 +7,6 @@ import org.bukkit.event.EventPriority import org.bukkit.event.HandlerList 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. */ @@ -37,8 +32,11 @@ inline fun Listener.register( * This class represents a [Listener] with * only one event to listen to. */ -interface SingleListener : Listener { - fun onEvent(event: T) +abstract class SingleListener( + val priority: EventPriority, + val ignoreCancelled: Boolean, +) : Listener { + abstract fun onEvent(event: T) } /** @@ -48,13 +46,15 @@ interface SingleListener : Listener { * @param priority the priority when multiple listeners handle this event * @param ignoreCancelled if manual cancellation should be ignored */ -inline fun SingleListener.register( - priority: EventPriority = EventPriority.NORMAL, - ignoreCancelled: Boolean = false, -) { - register(priority, ignoreCancelled) { _, event -> - (event as? T)?.let { this.onEvent(it) } - } +inline fun SingleListener.register() { + pluginManager.registerEvent( + T::class.java, + this, + priority, + { _, event -> (event as? T)?.let { this.onEvent(it) } }, + KSpigotMainInstance, + ignoreCancelled + ) } /** @@ -70,9 +70,9 @@ inline fun listen( register: Boolean = true, crossinline onEvent: (event: T) -> Unit, ): SingleListener { - val listener = object : SingleListener { + val listener = object : SingleListener(priority, ignoreCancelled) { override fun onEvent(event: T) = onEvent.invoke(event) } - if (register) listener.register(priority, ignoreCancelled) + if (register) listener.register() return listener }