Triggers
Triggers are what cause the enchantment to get activated in the first place.
Creating a trigger
To start, create a class that implements the interface RegistrableTrigger
.
class MyTrigger : RegistrableTrigger {
override val aliases = listOf<String>()
override fun getTriggerDataHolder(): TriggerDataHolder = TODO()
}
Fill the aliases list with however you want to identify your trigger.
TriggerDataHolder
The TriggerDataHolder is the key part of the trigger. It holds the event that is listened to by enchantments, and the methods for obtaining data.
The common method for building a TriggerDataHolder is using a convenience method fromStringMethods
:
override fun getTriggerDataHolder(): TriggerDataHolder = TriggerDataHolder.fromStringMethods(
// The event of the trigger
MyEvent::class.java,
// Every trigger must contain a FIRST_PLAYER DataRetrievalType, which returns the
// player who has activated the enchantment
DataRetrievalType.FIRST_PLAYER to "getPlayer",
// All other DataRetrievalTypes are optional. It is recommended to add as many
// as possible for as many actions/conditions/placeholders to be able to use it
DataRetrievalType.SECOND_PLAYER to "getVictim"
)
The usage of the trigger data holder is well outlined in the actions guide and the differences between it and the TargetType are outlined in the users' guide for triggers.
Example trigger
Built-in PVPTrigger
class PVPTrigger : RegistrableTrigger {
override val aliases = listOf("pvp", "player-vs-player", "playervsplayer", "pvpevent", "pvp-event")
override fun getTriggerDataHolder(): TriggerDataHolder = TriggerDataHolder.fromStringMethods(
PVPEvent::class.java,
DataRetrievalType.FIRST_PLAYER to "getDamager",
DataRetrievalType.SECOND_PLAYER to "getVictim",
DataRetrievalType.DAMAGE to "getDamage",
)
}