Skip to content

avionik-world/event-requirement-manager

Repository files navigation

Event Requirement Manager 🚦

In this project, you can register Bukkit listeners and add one or more requirements. A "requirement" is a condition that must be fulfilled for this event to be executed.

Using Event Requirement Manager in your plugin

Maven

<dependencies>
 <dependency>
    <groupId>world.avionik</groupId>
    <artifactId>event-requirement-manager</artifactId>
    <version>1.0.2</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

Gradle

dependencies {
    compileOnly 'world.avionik:event-requirement-manager:1.0.2'
}

How to register a Listener with some requirements

Register a requirement

Bukkit.getPluginManager().registerEvents(PlayerMoveListener(), javaPlugin) {
    it is PlayerEvent // Here you must return a Boolean that specifies whether you want to call the event or not.
}

Register multiple requirements at once

Bukkit.getPluginManager().registerEvents(
    PlayerMoveListener(), // The listener class to register
    javaPlugin,
    FirstEventRequirementHandler(), // Here you can add all requerements
    SecondEventRequirementHandler()
)

Register a requirement without Kotlin extensions

EventRequirement.registerEvents(
    PlayerMoveListener(), // The listener class to register
    javaPlugin,
    FirstEventRequirementHandler(), // Here you can add all requerements
    SecondEventRequirementHandler()
)

Whenever a listener is registered, this triggers a Bukkit event called ListenerRegisterEvent. This event contains the registered listener.

How to register a cancelled Event with some requirements

You can use these methods to automatically cancel events. Of course, you can also set a requerement here.

Register a cancelled event

Bukkit.getPluginManager().registerCancelledEvent<PlayerMoveEvent>(EventPriority.HIGHEST, javaPlugin) { // PlayerMoveEvent is the event that is cancelled 
    it is Cancelled // Here you must return a Boolean that specifies whether you want to call the event or not.
}

Register multiple requirements at once

Bukkit.getPluginManager().registerCancelledEvent<PlayerMoveEvent>( // PlayerMoveEvent is the event that is cancelled 
    EventPriority.HIGHEST,
    javaPlugin,
    FirstEventRequirementHandler(), // Here you can add all requerements
    SecondEventRequirementHandler()
)

Register a requirement without Kotlin extensions

EventRequirement.registerCancelledEvent(
    PlayerMoveEvent::class.java, // The event to cancel
    EventPriority.HIGHEST,
    javaPlugin,
    FirstEventRequirementHandler(), // Here you can add all requerements
    SecondEventRequirementHandler()
)

How to use the EventRequirementHandler

There is an EventRequirementHandler class. You can implement this class in your code to have a more elegant way of creating requirements.

Here is an example of how to use the EventRequirementHandler

class FirstEventRequirementHandler : EventRequirementHandler {

    /**
     * This method is executed when an event with this requirement is called.
     * @param event that is about to be executed
     * @return whether this event should be executed or not
     */
    override fun execute(event: Event): Boolean {
        if (event !is PlayerEvent)
            return false
        return event.player.gameMode == GameMode.SPECTATOR
    }

}