-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
264 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
...-core/src/main/kotlin/kr/summitsystems/springbukkit/core/scheduler/BukkitScheduledTask.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package kr.summitsystems.springbukkit.core.scheduler | ||
|
||
import kr.summitsystems.springbukkit.core.Disposable | ||
import org.bukkit.plugin.Plugin | ||
|
||
interface BukkitScheduledTask : Disposable { | ||
fun isCurrentlyRunning(): Boolean | ||
|
||
fun getPlugin(): Plugin | ||
|
||
fun isDisposed(): Boolean | ||
} |
17 changes: 17 additions & 0 deletions
17
.../main/kotlin/kr/summitsystems/springbukkit/core/scheduler/BukkitSchedulerConfiguration.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package kr.summitsystems.springbukkit.core.scheduler | ||
|
||
import org.bukkit.plugin.Plugin | ||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean | ||
import org.springframework.context.annotation.Bean | ||
import org.springframework.context.annotation.Configuration | ||
|
||
@Configuration | ||
class BukkitSchedulerConfiguration { | ||
@ConditionalOnMissingBean(BukkitTaskScheduler::class) | ||
@Bean | ||
fun defaultBukkitTaskScheduler( | ||
plugin: Plugin | ||
): BukkitTaskScheduler { | ||
return DefaultBukkitTaskScheduler(plugin) | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
...-core/src/main/kotlin/kr/summitsystems/springbukkit/core/scheduler/BukkitTaskScheduler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package kr.summitsystems.springbukkit.core.scheduler | ||
|
||
interface BukkitTaskScheduler { | ||
fun schedule(task: () -> Unit): BukkitScheduledTask | ||
|
||
fun scheduleAtFixedRate(periodTicks: Long, initialDelayTicks: Long = 0, task: () -> Unit): BukkitScheduledTask | ||
|
||
fun scheduleWithFixedDelay(delayedTicks: Long, task: () -> Unit): BukkitScheduledTask | ||
} |
26 changes: 26 additions & 0 deletions
26
...rc/main/kotlin/kr/summitsystems/springbukkit/core/scheduler/DefaultBukkitScheduledTask.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package kr.summitsystems.springbukkit.core.scheduler | ||
|
||
import org.bukkit.plugin.Plugin | ||
import org.bukkit.scheduler.BukkitScheduler | ||
import org.bukkit.scheduler.BukkitTask | ||
|
||
class DefaultBukkitScheduledTask( | ||
private val bukkitScheduler: BukkitScheduler, | ||
private val delegate: BukkitTask | ||
) : BukkitScheduledTask { | ||
override fun isCurrentlyRunning(): Boolean { | ||
return bukkitScheduler.isCurrentlyRunning(delegate.taskId) | ||
} | ||
|
||
override fun getPlugin(): Plugin { | ||
return delegate.owner | ||
} | ||
|
||
override fun isDisposed(): Boolean { | ||
return delegate.isCancelled | ||
} | ||
|
||
override fun dispose() { | ||
return delegate.cancel() | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
...rc/main/kotlin/kr/summitsystems/springbukkit/core/scheduler/DefaultBukkitTaskScheduler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package kr.summitsystems.springbukkit.core.scheduler | ||
|
||
import org.bukkit.Bukkit | ||
import org.bukkit.plugin.Plugin | ||
|
||
class DefaultBukkitTaskScheduler( | ||
private val plugin: Plugin | ||
) : BukkitTaskScheduler { | ||
private val bukkitScheduler = Bukkit.getScheduler() | ||
|
||
override fun schedule(task: () -> Unit): BukkitScheduledTask { | ||
val bukkitTask = bukkitScheduler.runTask(plugin, task) | ||
return DefaultBukkitScheduledTask(bukkitScheduler, bukkitTask) | ||
} | ||
|
||
override fun scheduleAtFixedRate( | ||
periodTicks: Long, | ||
initialDelayTicks: Long, | ||
task: () -> Unit | ||
): BukkitScheduledTask { | ||
val bukkitTask = bukkitScheduler.runTaskTimer(plugin, task, initialDelayTicks, periodTicks) | ||
return DefaultBukkitScheduledTask(bukkitScheduler, bukkitTask) | ||
} | ||
|
||
override fun scheduleWithFixedDelay(delayedTicks: Long, task: () -> Unit): BukkitScheduledTask { | ||
val bukkitTask = bukkitScheduler.runTaskLater(plugin, task, delayedTicks) | ||
return DefaultBukkitScheduledTask(bukkitScheduler, bukkitTask) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
...t/src/main/kotlin/kr/summitsystems/springbukkit/support/folia/FoliaBukkitScheduledTask.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package kr.summitsystems.springbukkit.support.folia | ||
|
||
import io.papermc.paper.threadedregions.scheduler.ScheduledTask | ||
import kr.summitsystems.springbukkit.core.scheduler.BukkitScheduledTask | ||
import org.bukkit.plugin.Plugin | ||
|
||
class FoliaBukkitScheduledTask(private val delegate: ScheduledTask) : BukkitScheduledTask { | ||
override fun isCurrentlyRunning(): Boolean { | ||
return delegate.executionState == ScheduledTask.ExecutionState.RUNNING | ||
} | ||
|
||
override fun getPlugin(): Plugin { | ||
return delegate.owningPlugin | ||
} | ||
|
||
override fun isDisposed(): Boolean { | ||
return delegate.isCancelled | ||
} | ||
|
||
override fun dispose() { | ||
delegate.cancel() | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
...t/src/main/kotlin/kr/summitsystems/springbukkit/support/folia/FoliaBukkitTaskScheduler.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package kr.summitsystems.springbukkit.support.folia | ||
|
||
import io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler | ||
import kr.summitsystems.springbukkit.core.scheduler.BukkitScheduledTask | ||
import kr.summitsystems.springbukkit.core.scheduler.BukkitTaskScheduler | ||
import org.bukkit.Bukkit | ||
import org.bukkit.plugin.Plugin | ||
|
||
class FoliaBukkitTaskScheduler( | ||
private val plugin: Plugin | ||
) : BukkitTaskScheduler { | ||
private val globalRegionScheduler: GlobalRegionScheduler = Bukkit.getGlobalRegionScheduler() | ||
|
||
override fun schedule(task: () -> Unit): BukkitScheduledTask { | ||
val scheduledTask = globalRegionScheduler.run(plugin) { task.invoke() } | ||
return FoliaBukkitScheduledTask(scheduledTask) | ||
} | ||
|
||
override fun scheduleAtFixedRate( | ||
periodTicks: Long, | ||
initialDelayTicks: Long, | ||
task: () -> Unit | ||
): BukkitScheduledTask { | ||
val scheduledTask = globalRegionScheduler.runAtFixedRate(plugin, { task.invoke() }, initialDelayTicks, periodTicks) | ||
return FoliaBukkitScheduledTask(scheduledTask) | ||
} | ||
|
||
override fun scheduleWithFixedDelay(delayedTicks: Long, task: () -> Unit): BukkitScheduledTask { | ||
val scheduledTask = globalRegionScheduler.runDelayed(plugin, { task.invoke() }, delayedTicks) | ||
return FoliaBukkitScheduledTask(scheduledTask) | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
...support/src/main/kotlin/kr/summitsystems/springbukkit/support/folia/FoliaConfiguration.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package kr.summitsystems.springbukkit.support.folia | ||
|
||
import kr.summitsystems.springbukkit.core.scheduler.BukkitTaskScheduler | ||
import org.bukkit.plugin.Plugin | ||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass | ||
import org.springframework.context.annotation.Bean | ||
import org.springframework.context.annotation.Configuration | ||
|
||
@Configuration | ||
class FoliaConfiguration { | ||
@ConditionalOnClass(name = ["io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler"]) | ||
@Bean | ||
fun foliaBukkitTaskScheduler(plugin: Plugin): BukkitTaskScheduler { | ||
return FoliaBukkitTaskScheduler(plugin) | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
...main/kotlin/kr/summitsystems/springbukkit/support/folia/coroutines/FoliaMainDispatcher.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package kr.summitsystems.springbukkit.support.folia.coroutines | ||
|
||
import io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler | ||
import kotlinx.coroutines.Delay | ||
import kotlinx.coroutines.InternalCoroutinesApi | ||
import kotlinx.coroutines.MainCoroutineDispatcher | ||
import kr.summitsystems.springbukkit.core.scheduler.BukkitScheduledTask | ||
import kr.summitsystems.springbukkit.kotlinx.coroutines.dispatcher.BukkitMainDispatcher | ||
import kr.summitsystems.springbukkit.support.folia.FoliaBukkitScheduledTask | ||
import org.bukkit.Bukkit | ||
import org.bukkit.plugin.Plugin | ||
import kotlin.coroutines.CoroutineContext | ||
|
||
@InternalCoroutinesApi | ||
open class FoliaMainDispatcher( | ||
private val globalRegionScheduler: GlobalRegionScheduler = Bukkit.getGlobalRegionScheduler() | ||
) : BukkitMainDispatcher(), Delay { | ||
override val immediate: MainCoroutineDispatcher | ||
get() = object : FoliaMainDispatcher(globalRegionScheduler) { | ||
override val immediate: MainCoroutineDispatcher | ||
get() = this | ||
|
||
override fun isDispatchNeeded(context: CoroutineContext): Boolean { | ||
return true | ||
} | ||
} | ||
|
||
override fun runTask(plugin: Plugin, task: () -> Unit): BukkitScheduledTask { | ||
return FoliaBukkitScheduledTask(globalRegionScheduler.run(plugin) { task.invoke() }) | ||
} | ||
|
||
override fun runTaskWithFixedDelay(plugin: Plugin, delay: Long, task: () -> Unit): BukkitScheduledTask { | ||
return FoliaBukkitScheduledTask(globalRegionScheduler.runDelayed(plugin, { task.invoke() }, delay)) | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
...tlin/kr/summitsystems/springbukkit/support/folia/coroutines/FoliaMainDispatcherFactory.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package kr.summitsystems.springbukkit.support.folia.coroutines | ||
|
||
import kotlinx.coroutines.InternalCoroutinesApi | ||
import kotlinx.coroutines.MainCoroutineDispatcher | ||
import kotlinx.coroutines.internal.MainDispatcherFactory | ||
|
||
@OptIn(InternalCoroutinesApi::class) | ||
class FoliaMainDispatcherFactory : MainDispatcherFactory { | ||
override val loadPriority: Int | ||
get() = -1 | ||
|
||
override fun createDispatcher(allFactories: List<MainDispatcherFactory>): MainCoroutineDispatcher { | ||
return if (classExists("io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler")) { | ||
FoliaMainDispatcher() | ||
} else { | ||
allFactories | ||
.first { it.loadPriority != this.loadPriority } | ||
.createDispatcher(allFactories) | ||
} | ||
} | ||
|
||
private fun classExists(className: String): Boolean { | ||
return try { | ||
Class.forName(className) | ||
true | ||
} catch (ex: ClassNotFoundException) { | ||
false | ||
} | ||
} | ||
} |
1 change: 1 addition & 0 deletions
1
...rt/src/main/resources/META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactory
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
kr.summitsystems.springbukkit.support.folia.coroutines.FoliaMainDispatcherFactory |
Oops, something went wrong.