summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/util/BukkitAwait.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/util/BukkitAwait.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/util/BukkitAwait.kt74
1 files changed, 0 insertions, 74 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/util/BukkitAwait.kt b/src/main/kotlin/io/dico/parcels2/util/BukkitAwait.kt
deleted file mode 100644
index 4ca549f..0000000
--- a/src/main/kotlin/io/dico/parcels2/util/BukkitAwait.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-package io.dico.parcels2.util
-
-import org.bukkit.plugin.Plugin
-import org.bukkit.scheduler.BukkitTask
-
-inline fun Plugin.doAwait(checkNow: Boolean = true, configure: AwaitTask.() -> Unit) {
- with(AwaitTask()) {
- configure()
- start(checkNow = checkNow)
- }
-}
-
-private typealias Action<T> = () -> T
-
-class AwaitTask : Runnable {
- //@formatter:off
- var cond: Action<Boolean>? = null ; set(value) { checkNotRunning(); field = value }
- var onSuccess: Action<Unit>? = null ; set(value) { checkNotRunning(); field = value }
- var onFailure: Action<Unit>? = null ; set(value) { checkNotRunning(); field = value }
- var delay: Int = -1 ; set(value) { checkNotRunning(); field = value }
- var interval: Int = 20 ; set(value) { checkNotRunning(); field = value }
- var maxChecks: Int = 0 ; set(value) { checkNotRunning(); field = value }
-
- var task: BukkitTask? = null ; private set
- var elapsedChecks = 0 ; private set
- var cancelled = false ; private set
- //@formatter:on
-
- fun Plugin.start(checkNow: Boolean = true) {
- if (cancelled) throw IllegalStateException()
-
- requireNotNull(cond)
- requireNotNull(onSuccess)
-
- if (checkNow && check()) {
- cancel()
- onSuccess!!.invoke()
- return
- }
-
- task = server.scheduler.runTaskTimer(this, this@AwaitTask, delay.toLong(), interval.toLong())
- }
-
- override fun run() {
- if (task?.isCancelled != false) return
-
- if (check()) {
- cancel()
- onSuccess!!.invoke()
- }
-
- elapsedChecks++
-
- if (maxChecks in 1 until elapsedChecks) {
- cancel()
- onFailure?.invoke()
- }
- }
-
- private fun check(): Boolean {
- elapsedChecks++
- return cond!!.invoke()
- }
-
- fun cancel() {
- task?.cancel()
- cancelled = true
- }
-
- private fun checkNotRunning() {
- if (cancelled || task != null) throw IllegalStateException()
- }
-
-} \ No newline at end of file