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.listen
import net.axay.kspigot.event.unregister import net.axay.kspigot.event.unregister
import net.axay.kspigot.extensions.bukkit.closeForViewers 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.itemStack
import net.axay.kspigot.items.meta import net.axay.kspigot.items.meta
import net.axay.kspigot.main.KSpigotMainInstance import net.axay.kspigot.main.KSpigotMainInstance
import net.axay.kspigot.runnables.taskRunLater import net.axay.kspigot.runnables.taskRunLater
import net.wesjd.anvilgui.AnvilGUI import net.wesjd.anvilgui.AnvilGUI
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.EventPriority import org.bukkit.event.EventPriority
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.player.AsyncPlayerChatEvent import org.bukkit.event.player.AsyncPlayerChatEvent
import org.bukkit.event.player.PlayerEditBookEvent
import org.bukkit.persistence.PersistentDataType
fun Player.awaitChatInput( fun Player.awaitChatInput(
question: String = "Type your input in the chat!", question: String = "Type your input in the chat!",
@@ -59,6 +63,7 @@ internal abstract class PlayerInput(
init { init {
taskRunLater(delay = (20 * timeoutSeconds).toLong()) { taskRunLater(delay = (20 * timeoutSeconds).toLong()) {
if (!received) onTimeout()
onReceive(null) onReceive(null)
} }
} }
@@ -72,7 +77,9 @@ internal class PlayerInputChat(
question: String question: String
) : PlayerInput(player, callback, timeoutSeconds) { ) : PlayerInput(player, callback, timeoutSeconds) {
init { player.sendMessage("${KColors.ORANGERED}$question") } init {
player.sendMessage("${KColors.ORANGERED}$question")
}
override val inputListeners = listOf( override val inputListeners = listOf(
listen<AsyncPlayerChatEvent>(EventPriority.LOWEST) { listen<AsyncPlayerChatEvent>(EventPriority.LOWEST) {
@@ -126,4 +133,51 @@ internal class PlayerInputAnvilInv(
anvilInv.inventory.closeForViewers() 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()