plugin.jvm.JvmPlugin.kt Maven / Gradle / Ivy
/*
* Copyright 2019-2020 Mamoe Technologies and contributors.
*
* 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
* Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found through the following link.
*
* https://github.com/mamoe/mirai/blob/master/LICENSE
*/
@file:Suppress(
"INVISIBLE_MEMBER",
"INVISIBLE_REFERENCE",
"EXPOSED_SUPER_CLASS",
"NOTHING_TO_INLINE",
"INAPPLICABLE_JVM_NAME"
)
package net.mamoe.mirai.console.plugin.jvm
import kotlinx.coroutines.CoroutineScope
import net.mamoe.mirai.console.compiler.common.RestrictedScope
import net.mamoe.mirai.console.compiler.common.RestrictedScope.Kind.COMMAND_REGISTER
import net.mamoe.mirai.console.compiler.common.RestrictedScope.Kind.PERMISSION_REGISTER
import net.mamoe.mirai.console.extension.PluginComponentStorage
import net.mamoe.mirai.console.permission.PermissionIdNamespace
import net.mamoe.mirai.console.plugin.Plugin
import net.mamoe.mirai.console.plugin.PluginFileExtensions
import net.mamoe.mirai.console.plugin.ResourceContainer
import net.mamoe.mirai.utils.MiraiLogger
/**
* Java, Kotlin 或其他 JVM 平台插件
*
* @see AbstractJvmPlugin 默认实现
*
* @see JavaPlugin Java 插件
* @see KotlinPlugin Kotlin 插件
*
* @see JvmPlugin 支持文件系统扩展
* @see ResourceContainer 支持资源获取 (如 Jar 中的资源文件)
*/
public interface JvmPlugin : Plugin, CoroutineScope,
PluginFileExtensions, ResourceContainer, PermissionIdNamespace {
/** 日志 */
public val logger: MiraiLogger
/** 插件描述 */
public val description: JvmPluginDescription
/** 所属插件加载器实例 */
// `final` in AbstractJvmPlugin
public override val loader: JvmPluginLoader get() = JvmPluginLoader
/**
* 在插件被加载时调用. 只会被调用一次.
*
* 在 [onLoad] 时可注册扩展 [PluginComponentStorage.contribute]
*
* @see PluginComponentStorage 查看更多信息
*
* @receiver 组件容器
*/
@RestrictedScope(COMMAND_REGISTER, PERMISSION_REGISTER)
public fun PluginComponentStorage.onLoad() {}
/**
* 在插件被启用时调用, 可能会被调用多次
*/
public fun onEnable() {}
/**
* 在插件被关闭时调用, 可能会被调用多次
*/
public fun onDisable() {}
public companion object {
@JvmSynthetic
public inline fun JvmPlugin.onLoad(storage: PluginComponentStorage): Unit = storage.onLoad()
}
}