Added book input
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -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()
|
Reference in New Issue
Block a user