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形式访问。
相关条目
- ForgelinPlugin 加载入口 - 让 GTNHLib 在本类之前可用