72 lines
1.6 KiB
Markdown
72 lines
1.6 KiB
Markdown
---
|
|
front:
|
|
hard: 入门
|
|
time: 12分钟
|
|
---
|
|
|
|
|
|
# 输入捕获
|
|
## 介绍
|
|
有的时候需要玩家输入一些功能 比如想点击按钮后输入某个值
|
|
然后根据这个值进行操作
|
|
TabooLib基于Kotlin的函数式编程风格写了几个工具供你使用
|
|
|
|
## 基于告示牌捕获
|
|
```kotlin
|
|
player.inputSign(arrayOf("", "", "请在第一行输入内容")) { line ->
|
|
// line 是输入完成后的内容
|
|
val name = line.getOrNull(0)
|
|
println("输入的内容是 $name")
|
|
}
|
|
```
|
|
|
|
## 基于书本的内容捕获
|
|
```kotlin
|
|
/**
|
|
* 向玩家发送一本书
|
|
* 并捕获该书本的编辑动作
|
|
*
|
|
* @param display 展示名称
|
|
* @param disposable 编辑后销毁
|
|
* @param content 原始内容
|
|
* @param catcher 编辑动作
|
|
*/
|
|
fun Player.inputBook(display: String, disposable: Boolean = true, content: List<String> = emptyList(), catcher: (List<String>) -> Unit)
|
|
|
|
player.inputBook("书本名称", true, listOf("原始内容")) { book ->
|
|
//book 是编辑后的书本
|
|
println("输出第一页内容")
|
|
println(book[0])
|
|
}
|
|
```
|
|
|
|
## 基于聊天框捕获
|
|
```kotlin
|
|
player.nextChat {
|
|
// it 是玩家输入的内容
|
|
println("玩家输入了 $it")
|
|
}
|
|
|
|
player.nextChatInTick(20 * 5, {
|
|
// it 是玩家输入的内容
|
|
println("玩家输入了 $it")
|
|
}, {
|
|
// 超时回调
|
|
println("超时了")
|
|
}, {
|
|
// 取消回调
|
|
println("取消了")
|
|
})
|
|
```
|
|
|
|
## 拓展 - 铁砧捕获
|
|
利用了UI模块 具体实现还请自行编写
|
|
```kotlin
|
|
player.openMenu<Anvil>("输入内容"){
|
|
onRename { player, s, inventory ->
|
|
// s 是玩家输入的内容
|
|
println("玩家输入了 $s")
|
|
}
|
|
}
|
|
```
|