Dispatchers.MinecraftServer

基本信息

属性 值
所属 Forgelin(modid forgelin)
类型 协程调度器(CoroutineDispatcher 扩展属性)
源码 coroutines/MinecraftServerDispatcher.kt:22-29
命名空间 kotlinx.coroutines.Dispatchers.MinecraftServer

作用

为 1.7.10 补上一个把任务投递到服务器主线程的协程调度器。 1.7.10 没有 Dispatchers(也没有 1.13+ 的 ServerLifecycleHooks 模型), Forgelin 基于 GTNHLib 的 ServerThreadUtil 提供这一能力。

调用方式:

withContext(Dispatchers.MinecraftServer) {
    // 在服务器主线程执行
}

行为

场景 行为
调用方已在服务器线程 任务立即执行
调用方在其它线程 任务排入队列,在下一 tick 的 pre-tick 阶段之前执行
服务器未运行时 抛 IllegalStateException

后两条的判断依据是 GTNHLib ServerThreadUtil 的语义,源码注释明确指向该类 (MinecraftServerDispatcher.kt:15-19)。实现本体只有一行:

internal object MinecraftServerDispatcher : CoroutineDispatcher() {
    override fun dispatch(context: CoroutineContext, block: Runnable) {
        ServerThreadUtil.addScheduledTask(block)
    }
}

硬依赖 GTNHLib

isGTNHLibLoaded 由 Loader.isModLoaded("gtnhlib") 惰性求值 (MinecraftServerDispatcher.kt:10)。若 GTNHLib 不在, 取这个属性会直接 error(...) 抛异常:

GTNHLib is required for Dispatchers.MinecraftServer.

即不提供降级实现——即使服务器已启动,缺少 GTNHLib 也无法使用。 在 GTNH 整合包中 GTNHLib 必然存在,所以该条件实际上恒为真。

限制

  • 仅有 SERVER 一侧,没有客户端调度器对应物。
  • 源码文件带 @Suppress("UnusedReceiverParameter", "unused"), 是扩展属性而非 Dispatchers 对象的成员,需 import 后以 Dispatchers.MinecraftServer 形式访问。

相关条目