Java版本的mirai食用方法,2.0.0版本适用
(二)编写插件——基础篇
这一篇是关于插件编写的环境配置、基本的插件结构、打包发布方式。
机器人本体使用:Java版本Mirai食用指南(一) for Mirai2.0.0
官网:IDEA
本文使用2020.1版本,使用其他版本IDEA可能存在问题。
需要gradle作为包管理器,我记不太清是不是自带的了,如果没有的话可以去百度上查一下。
需要安装Kotlin Jvm Blocking Bridge和Mirai console插件
(如果使用Kotlin编写,则不需要Kotlin Jvm Blocking Bridge)
除了Kotlin Jvm Blocking Bridge,Kotlin版本也应更新到最新版
Mirai console插件并不是必需的,但是提供一些辅助功能,方便编写程序
下面无论那种方法,首先打开IDEA
Ctrl + Alt + s
或者点击File->Setting最新版本的Mirai console已经没有自动生成Mirai项目的功能了,所以需要自己配置,或者从现成的模板修改。
我自己写的Java模板
讲道理我没用过github,如果有什么问题记得在评论告诉我
想要修改里面的东西的话,可以参看手动配置的部分
首先新建一个gradle项目
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.4.21' //版本必须为1.4及以上
id 'java'
id 'net.mamoe.mirai-console' version '2.0.0' //版本号与下面保持一致即可
}
group = '0001' // 看着改改就行
repositories {
maven {
url 'https://dl.bintray.com/kotlin/kotlin-eap' }
maven {
url 'https://mirrors.huaweicloud.com/repository/maven' } //镜像仓库,加不加看你自己喜好了
mavenCentral()
jcenter()
}
def miraiCoreVersion = "2.0.0"
def miraiConsoleVersion = "2.0.0"
dependencies {
compileOnly 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
compileOnly "net.mamoe:mirai-core:$miraiCoreVersion"
compileOnly "net.mamoe:mirai-console:$miraiConsoleVersion"
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
testImplementation "net.mamoe:mirai-core:$miraiCoreVersion"
// testImplementation "net.mamoe:mirai-core-qqandroid:$miraiCoreVersion"
// 开发Android程序才会用到
testImplementation "net.mamoe:mirai-console:$miraiConsoleVersion"
}
3、指定主类(Kotlin的就可以自动生成,Java凭什么就不行)
在resource文件夹下,新建META-INF\services\net.mamoe.mirai.console.plugin.jvm.JvmPlugin文件
里面写主类名,需要utf8编码格式
com.example.plugin.AAA
主类要求:
1、继承JavaPlugin
2、静态初始化单例class,必须public static,并且必须命名为INSTANCE
3、构造函数不接受参数,并调用super(description)
public class AAA extends JavaPlugin {
public static AAA INSTANCE = new AAA();
private AAA() {
super(description);
}
}
其中description可由JvmPluginDescriptionBuilder构建
new JvmPluginDescriptionBuilder(
"com.example.plugin.Test", // ID 需要遵循语法规定(不过我也不知道是什么规定),不知道写什么的话就写主类名吧
"1.0.0" // Version 同样需要遵循语法规定
)
.author("me") //作者
.name("test") //插件名称
.info("新版本测试") //插件信息
.build()
主类可以重载onLoad和onEnable方法。
onLoad中可以初始化变量、读取本地数据等,onEnable中进行这个插件真正的工作。
所以一个基本的插件主类是这样的:
package com.example.plugin;
import net.mamoe.mirai.console.extension.PluginComponentStorage;
import net.mamoe.mirai.console.plugin.jvm.JavaPlugin;
import net.mamoe.mirai.console.plugin.jvm.JvmPluginDescriptionBuilder;
import net.mamoe.mirai.event.GlobalEventChannel;
import net.mamoe.mirai.event.events.FriendMessageEvent;
import org.jetbrains.annotations.NotNull;
public class AAA extends JavaPlugin {
public static AAA INSTANCE = new AAA();
private AAA() {
super(new JvmPluginDescriptionBuilder(
"com.example.plugin.Test", // 需要遵循语法规定,不知道写什么的话就写主类名吧
"1.0.0" // 同样需要遵循语法规定
)
.author("me")
.name("test")
.info("新版本测试")
.build()
);
}
@Override
public void onLoad(@NotNull PluginComponentStorage $this$onLoad) {
}
@Override
public void onEnable() {
// 当接受好友消息时回复喵
GlobalEventChannel.INSTANCE.subscribeAlways(FriendMessageEvent.class, (FriendMessageEvent event) ->{
event.getSender().sendMessage("喵");
});
}
}
1、参看官方文档
2、看 [目前还不存在的Java版本食用指南(三) for Mirai2.0.0]
要求将除了mirai相关组件之外的全部依赖、资源文件打包
如果build.gradle中添加了
plugins {
id 'net.mamoe.mirai-console' version '2.0.0'
}
那么在gradle中就可以 Tasks > mirai > buildPlugin 直接将依赖文件一同打包
例如我想添加本地依赖,就在dependencies中加入
compile fileTree(dir:'lib',includes:['*jar'])
然后buildPlugin就会帮我把这些依赖一起打包。
打包好的jar文件在 build\mirai 文件夹下
把这个文件放到mcl的plugins文件夹下就好了