Java版本Mirai食用指南(二) for Mirai2.0.0
Java版本的mirai食用方法,2.0.0版本適用
(二)編寫外掛——基礎篇
目錄
〇、前言
這一篇是關於外掛編寫的環境配置、基本的外掛結構、打包釋出方式。
機器人本體使用:Java版本Mirai食用指南(一) for Mirai2.0.0
一、安裝IDEA
官網:IDEA
本文使用2020.1版本,使用其他版本IDEA可能存在問題。
需要gradle作為包管理器,我記不太清是不是自帶的了,如果沒有的話可以去百度上查一下。
二、安裝IDEA外掛
需要安裝Kotlin Jvm Blocking Bridge和Mirai console外掛
(如果使用Kotlin編寫,則不需要Kotlin Jvm Blocking Bridge)
除了Kotlin Jvm Blocking Bridge,Kotlin版本也應更新到最新版
Mirai console外掛並不是必需的,但是提供一些輔助功能,方便編寫程式
下面無論那種方法,首先開啟IDEA
- 方法1
點選連結直接安裝
Kotlin Jvm Blocking Bridge
Mirai Console IntelliJ - 方法2
在IDEA中按快捷鍵Ctrl + Alt + s
或者點選File->Setting - 方法3
如果前兩種方法不能安裝,可以通過本地檔案安裝……不過我相信你們不需要(如果有需要的話我再放個百度雲連結在這)
三、新建專案
最新版本的Mirai console已經沒有自動生成Mirai專案的功能了,所以需要自己配置,或者從現成的模板修改。
方法1:從模板修改
我自己寫的Java模板
講道理我沒用過github,如果有什麼問題記得在評論告訴我
想要修改裡面的東西的話,可以參看手動配置的部分
方法2:手動配置
首先新建一個gradle專案
- 1、修改build.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"
}
-
2、建立主類
在Java資料夾下新建Java class(或者先打個包)
建議打包
或
-
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資料夾下就好了