This commit is contained in:
bluefireoly
2020-10-24 21:12:50 +02:00
2 changed files with 68 additions and 1 deletions

View File

@@ -4,17 +4,21 @@ import net.axay.kspigot.chat.KColors
import net.axay.kspigot.event.listen
import net.axay.kspigot.event.unregister
import net.axay.kspigot.extensions.bukkit.closeForViewers
import net.axay.kspigot.extensions.bukkit.content
import net.axay.kspigot.items.itemStack
import net.axay.kspigot.items.meta
import net.axay.kspigot.main.KSpigotMainInstance
import net.axay.kspigot.runnables.taskRunLater
import net.wesjd.anvilgui.AnvilGUI
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.entity.Player
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.player.AsyncPlayerChatEvent
import org.bukkit.event.player.PlayerEditBookEvent
import org.bukkit.persistence.PersistentDataType
fun Player.awaitChatInput(
question: String = "Type your input in the chat!",
@@ -59,6 +63,7 @@ internal abstract class PlayerInput(
init {
taskRunLater(delay = (20 * timeoutSeconds).toLong()) {
if (!received) onTimeout()
onReceive(null)
}
}
@@ -72,7 +77,9 @@ internal class PlayerInputChat(
question: String
) : PlayerInput(player, callback, timeoutSeconds) {
init { player.sendMessage("${KColors.ORANGERED}$question") }
init {
player.sendMessage("${KColors.ORANGERED}$question")
}
override val inputListeners = listOf(
listen<AsyncPlayerChatEvent>(EventPriority.LOWEST) {
@@ -126,4 +133,51 @@ internal class PlayerInputAnvilInv(
anvilInv.inventory.closeForViewers()
}
}
internal class PlayerInputBook(
player: Player,
callback: (String?) -> Unit,
timeoutSeconds: Int
) : PlayerInput(player, callback, timeoutSeconds) {
private val id = getID()
init {
player.openBook(itemStack(Material.WRITABLE_BOOK) {
meta {
persistentDataContainer[idKey, PersistentDataType.INTEGER] = id
}
})
}
override val inputListeners = listOf(
listen<PlayerEditBookEvent> {
val meta = it.newBookMeta
if (meta.persistentDataContainer[idKey, PersistentDataType.INTEGER] == id) {
onReceive(meta.content)
usedIDs -= id
}
}
)
override fun onTimeout() {
player.closeInventory()
usedIDs -= id
}
companion object {
val idKey = NamespacedKey(KSpigotMainInstance, "kspigot_bookinput_id")
internal val usedIDs = ArrayList<Int>()
fun getID(): Int {
var returnID = (0..Int.MAX_VALUE).random()
while (usedIDs.contains(returnID)) returnID = (0..Int.MAX_VALUE).random()
return returnID
}
}
}

View File

@@ -0,0 +1,13 @@
package net.axay.kspigot.extensions.bukkit
import org.bukkit.inventory.meta.BookMeta
import java.lang.StringBuilder
val BookMeta.content get() =
StringBuilder().apply {
for (it in pages) {
if (isNotEmpty())
append('\n')
append(it)
}
}.toString()