Fixed safe runnable problem
This commit is contained in:
@@ -7,16 +7,25 @@ import org.bukkit.scheduler.BukkitRunnable
|
|||||||
|
|
||||||
class KRunnableHolder {
|
class KRunnableHolder {
|
||||||
|
|
||||||
private val runnableEndCallbacks = HashMap<BukkitRunnable, () -> Unit>()
|
/**
|
||||||
|
* [BukkitRunnable] for tracking the responsible runnable.
|
||||||
|
* [Pair] of callback for the endCallback code and [Boolean]
|
||||||
|
* for holding the information if the endCallback is safe
|
||||||
|
* or not.
|
||||||
|
*/
|
||||||
|
private val runnableEndCallbacks = HashMap<BukkitRunnable, Pair<() -> Unit, Boolean>>()
|
||||||
|
|
||||||
fun shutdown() {
|
fun shutdown() {
|
||||||
runnableEndCallbacks.values.forEach { it.invoke() }
|
runnableEndCallbacks.values.forEach { if (it.second) it.first.invoke() }
|
||||||
runnableEndCallbacks.clear()
|
runnableEndCallbacks.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun add(runnable: BukkitRunnable, callback: () -> Unit) { runnableEndCallbacks[runnable] = callback }
|
fun add(runnable: BukkitRunnable, callback: () -> Unit, safe: Boolean)
|
||||||
fun remove(runnable: BukkitRunnable) = runnableEndCallbacks.remove(runnable)
|
= runnableEndCallbacks.put(runnable, Pair(callback, safe))
|
||||||
fun activate(runnable: BukkitRunnable) = runnableEndCallbacks.remove(runnable)?.invoke()
|
fun remove(runnable: BukkitRunnable)
|
||||||
|
= runnableEndCallbacks.remove(runnable)
|
||||||
|
fun activate(runnable: BukkitRunnable)
|
||||||
|
= runnableEndCallbacks.remove(runnable)?.first?.invoke()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +94,7 @@ fun KSpigot.task(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (endCallback != null) kRunnableHolder.add(bukkitRunnable, endCallback)
|
if (endCallback != null) kRunnableHolder.add(bukkitRunnable, endCallback, safe)
|
||||||
|
|
||||||
if (sync)
|
if (sync)
|
||||||
bukkitRunnable.runTaskTimer(this, delay, period ?: 20)
|
bukkitRunnable.runTaskTimer(this, delay, period ?: 20)
|
||||||
|
Reference in New Issue
Block a user