跳到主要内容

监听器注册

EnderDragon expansion提供了简化的监听器注册方式,具体参考以下示例:

//设置包名,不填问题也不大
package expansion.groovy.Example

//正常情况下,只有导入对应的类之后,才能使用它们
//但是插件在脚本引擎初始化时已帮你自动导入了一些类,所以一些类名和变量可以直接使用
import org.bukkit.Bukkit //例如,如果你删掉这句import,你会发现Bukkit依然可以使用,因为我已经帮你导入了
import org.bukkit.event.EventPriority
import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.event.player.PlayerQuitEvent
import pers.xanadu.enderdragon.script.Events //这句import同理

/**
* 脚本在加载/重载时会调用enable()函数
* 如果缺少这个函数,后台会输出一条警告信息
*/
static void enable(){
// 为了避免为你带来困扰,默认未注册监听器
// 如果你想测试效果,删掉下面的"//"注释符号即可
// registerListener()
// registerAnotherListener()
Bukkit.getLogger().info("Example script has been reloaded!") //脚本加载时向后台输出一条信息
}

// 注册监听器的例子
// 插件已简化了监听器注册方式,两种注册方式如下
// 你不需要担心取消注册的问题,插件内部已经帮你处理了
/**
* Events.register(Class clazz, Consumer consumer)
* @param clazz 要监听事件的类名
* @param consumer 事件发生时执行的代码
*/
static void registerListener(){
Events.register(PlayerJoinEvent.class, e -> Bukkit.broadcastMessage(e.getPlayer().getName()+ " joined!"))
}
/**
* Events.register(Class clazz, EventPriority priority, boolean ignoreCancelled, Consumer consumer)
* @param clazz 要监听事件的类名
* @param priority 监听优先级,默认为EventPriority.NORMAL
* @param ignoreCancelled 是否忽略已取消事件,默认为false
* @param consumer 事件发生时执行的代码
*/
static def registerAnotherListener(){
Events.register(PlayerQuitEvent.class, EventPriority.NORMAL,false,event->{
Bukkit.broadcastMessage("Quit message is:" + event.getQuitMessage())
Bukkit.broadcastMessage("Player's name is " + event.player.displayName)
})
}
/**
* 可用的优先级有:
* EventPriority.LOWEST (最先处理)
* EventPriority.LOW
* EventPriority.NORMAL
* EventPriority.HIGH
* EventPriority.HIGHEST
* EventPriority.MONITOR (最后处理)
*/

上述代码实现了分别监听玩家加入服务器事件和玩家退出服务器事件,并输出一些信息。