2.6
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
---
|
||||
front:
|
||||
hard: 入门
|
||||
time: 8分钟
|
||||
---
|
||||
|
||||
|
||||
# 事件管理器
|
||||
|
||||
## 监听事件
|
||||
通常情况下也就能使用到此功能
|
||||
比如我们要监听玩家进入游戏的事件 应该如何书写?
|
||||
|
||||
```kotlin
|
||||
@SubscribeEvent
|
||||
fun hello(event: PlayerJoinEvent) {
|
||||
event.player.sendMessage("Hello, ${event.player.name}")
|
||||
}
|
||||
```
|
||||
和原版的监听器相似 都是在方法上 进行标记 但是我们不需要去主类注册
|
||||
|
||||
## 注册事件
|
||||
|
||||
在一些情况下 我们可以用事件来解决一些复杂问题 我这里仅进行举例
|
||||
我要设计一个打招呼的事件 在玩家进入游戏时触发 然后传入的内容是打招呼的内容
|
||||
1. 声明一个事件对象
|
||||
|
||||
```kotlin
|
||||
data class HelloEvent(
|
||||
val player: Player,
|
||||
val message: String
|
||||
) : BukkitProxyEvent()
|
||||
```
|
||||
|
||||
2. 事件注册
|
||||
```kotlin
|
||||
@SubscribeEvent
|
||||
fun hello(event: PlayerJoinEvent) {
|
||||
val helloEvent = HelloEvent(event.player, "Hello, ${event.player.name}")
|
||||
helloEvent.call()
|
||||
if (!helloEvent.isCancelled) {
|
||||
event.player.sendMessage(helloEvent.message)
|
||||
}
|
||||
}
|
||||
```
|
||||
> 上述两个东西你可以理解Bukkit当中 `Bukkit.callEvent` 的处理办法
|
||||
Reference in New Issue
Block a user