From c4f55f3a34e7f48bbf90d1d05e8df080dfeda9e1 Mon Sep 17 00:00:00 2001 From: "jiahua.liu" Date: Sat, 18 Jan 2020 21:01:14 +0800 Subject: [PATCH] plugin supporting --- mirai-console/src/main/kotlin/MiraiConsole.kt | 4 +++ .../net/mamoe/mirai/plugin/PluginBase.kt | 26 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/mirai-console/src/main/kotlin/MiraiConsole.kt b/mirai-console/src/main/kotlin/MiraiConsole.kt index 6d865a7ce..e6288891e 100644 --- a/mirai-console/src/main/kotlin/MiraiConsole.kt +++ b/mirai-console/src/main/kotlin/MiraiConsole.kt @@ -1,6 +1,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import net.mamoe.mirai.Bot +import net.mamoe.mirai.plugin.PluginManager import kotlin.concurrent.thread fun main() { @@ -42,6 +43,9 @@ fun main() { } } + PluginManager.loadPlugins() + + } diff --git a/mirai-console/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt b/mirai-console/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt index d1ca57074..8cb33ccc0 100644 --- a/mirai-console/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt +++ b/mirai-console/src/main/kotlin/net/mamoe/mirai/plugin/PluginBase.kt @@ -1,7 +1,12 @@ package net.mamoe.mirai.plugin import net.mamoe.mirai.utils.DefaultLogger +import java.io.BufferedReader import java.io.File +import java.io.InputStream +import java.io.InputStreamReader +import java.net.JarURLConnection +import java.net.URL import java.util.jar.JarFile @@ -49,6 +54,10 @@ class PluginDescription( internal var noCircularDepend: Boolean = true ) { + override fun toString(): String { + return "name: $pluginName\nauthor: $pluginAuthor\npath: $pluginBasePath\nver: $pluginVersion\ninfo: $pluginInfo\ndepends: $depends" + } + companion object { fun readFromContent(content_: String): PluginDescription { val content = content_.split("\n") @@ -116,11 +125,23 @@ object PluginManager{ if (file != null) { if (file.extension == "jar") { val jar = JarFile(file) - val pluginYml = jar.entries().asIterator().asSequence().filter { it.name.toLowerCase().contains("resource/plugin.yml") }.firstOrNull() + val pluginYml = + jar.entries().asSequence().filter { it.name.toLowerCase().contains("plugin.yml") }.firstOrNull() if (pluginYml == null) { logger.info("plugin.yml not found in jar " + jar.name + ", it will not be consider as a Plugin") } else { - val description = PluginDescription.readFromContent(pluginYml.extra.toString()) + val url = URL("jar:file:" + file.absoluteFile + "!/" + pluginYml.name) + val jarConnection: JarURLConnection = url + .openConnection() as JarURLConnection + val inputStream: InputStream = jarConnection.getInputStream() + val br = BufferedReader(InputStreamReader(inputStream, "UTF-8")) + var con: String? + val sb = StringBuffer() + while (br.readLine().also { con = it } != null) { + sb.append(con).append("\n") + } + val description = PluginDescription.readFromContent(sb.toString()) + println(description) pluginsFound[description.pluginName] = description pluginsLocation[description.pluginName] = jar } @@ -206,6 +227,7 @@ object PluginManager{ } } } catch (e: ClassNotFoundException) { + e.printStackTrace() return false.also { logger.error("failed to load plugin " + description.pluginName + " , Main class not found under " + description.pluginBasePath) }