mirai/backend/mirai-console
2020-09-01 22:46:51 +08:00
..
src Support static field INSTANCE for JavaPlugin 2020-09-01 22:46:51 +08:00
build.gradle.kts Update dependencies 2020-08-31 22:30:28 +08:00
README.md Update README 2020-08-31 22:49:26 +08:00

mirai-console backend

欢迎来到 mirai-console 后端开发文档。

准备工作

开发 mirai-console 插件的准备工作

前置知识

包结构

基础

Plugin 模块

Console 支持拥有强扩展性的插件加载器。内建 JVM 插件支持 (JarPluginLoader)。

插件加载器 PluginLoader插件管理器

Console 本身是一套高扩展性的「框架」,拥有通用的 插件加载器

Console 内置 JarPluginLoader,支持加载使用 Kotlin、 Java或其他 JVM 平台编程语言并打包为 jar 的插件 (详见下文 JvmPlugin)。

扩展的 插件加载器 可以由一个特别的 JVM 插件 提供。

服务器启动过程中的插件加载流程

在服务器启动过程中, Console 首先加载那些提供扩展 插件加载器 的插件. 并允许它们 注册扩展加载器
随后对插件按依赖顺序调用 onLoad(), 告知插件主类加载完毕, 相关依赖解决完毕.
当所有插件的 onLoad() 都被调用后, PluginManager 按依赖顺序依次调用 onEnable()

如果 A 依赖 B, B 依赖 C. 那么启动时的调用顺序为:
C.onLoad() -> B.onLoad() -> A.onLoad() -> C.onEnable -> B.onEnable() -> A.onEnable()

Plugin

所有 Console 插件都必须实现 Plugin 接口。

Plugin 很通用,它只拥有很少的成员:

interface Plugin : CommandOwner {
    val isEnabled: Boolean
    val loader: PluginLoader<*, *> // 能处理这个 Plugin 的 PluginLoader
}

Plugin 可在相应 插件加载器 PluginLoader 的帮助下,成为任何语言实现的插件与 Console 建立联系的桥梁。

JVM 插件

JvmPlugin
interface JvmPlugin : Plugin, CoroutineScope, PluginFileExtensions, ResourceContainer, AutoSavePluginDataHolder {
    val logger: MiraiLogger
    val description: JvmPluginDescription
    val loader: JarPluginLoader
    fun <T : PluginData> loadPluginData(clazz: Class<T>): T
    fun <T : PluginConfig> loadPluginConfig(clazz: Class<T>): T
    fun onLoad()
    fun onEnable()
    fun onDisable()
}
plugin.yml

JVM 插件, 通常需要打包为 jar 后才能被加载.

注意:

实现 Kotlin 插件

在任意包内创建一个 object 单例, 继承 KotlinPlugin.

实现 Java 插件