57 lines
1.9 KiB
Kotlin
57 lines
1.9 KiB
Kotlin
package net.hareworks.ghostdisplays.display
|
|
|
|
import java.util.UUID
|
|
import java.util.concurrent.ConcurrentHashMap
|
|
import net.hareworks.ghostdisplays.display.DisplayManager.DisplayOperationException
|
|
import org.bukkit.Bukkit
|
|
import org.bukkit.entity.Player
|
|
import org.bukkit.event.EventHandler
|
|
import org.bukkit.event.Listener
|
|
import org.bukkit.event.player.AsyncPlayerChatEvent
|
|
import org.bukkit.event.player.PlayerQuitEvent
|
|
import org.bukkit.plugin.java.JavaPlugin
|
|
|
|
class EditSessionManager(
|
|
private val plugin: JavaPlugin,
|
|
private val manager: DisplayManager
|
|
) : Listener {
|
|
private val sessions = ConcurrentHashMap<UUID, String>()
|
|
|
|
fun begin(player: Player, displayId: String) {
|
|
sessions[player.uniqueId] = displayId
|
|
}
|
|
|
|
fun cancel(player: Player): Boolean = sessions.remove(player.uniqueId) != null
|
|
|
|
fun shutdown() {
|
|
sessions.clear()
|
|
}
|
|
|
|
@EventHandler(ignoreCancelled = true)
|
|
fun onPlayerChat(event: AsyncPlayerChatEvent) {
|
|
val displayId = sessions[event.player.uniqueId] ?: return
|
|
event.isCancelled = true
|
|
val message = event.message
|
|
if (message.equals("cancel", ignoreCase = true)) {
|
|
sessions.remove(event.player.uniqueId)
|
|
event.player.sendMessage("GhostDisplays: editing for '$displayId' cancelled.")
|
|
return
|
|
}
|
|
Bukkit.getScheduler().runTask(plugin) {
|
|
try {
|
|
manager.updateText(displayId, message)
|
|
event.player.sendMessage("GhostDisplays: updated text for '$displayId'.")
|
|
} catch (ex: DisplayOperationException) {
|
|
event.player.sendMessage("GhostDisplays: ${ex.message}")
|
|
} finally {
|
|
sessions.remove(event.player.uniqueId)
|
|
}
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
fun onPlayerQuit(event: PlayerQuitEvent) {
|
|
sessions.remove(event.player.uniqueId)
|
|
}
|
|
}
|