MCDReforged/PluginCatalogue

基于Json格式数据存储的插件管理器实现思路

Closed this issue · 5 comments

需求

目前插件较多,且大量重复,有大量插件不兼容最新版MCDR
需要一个新的插件库和插件管理器来提供更加便捷的插件选择与管理

结构

在此仓库中存储 插件库
制作一个MCDR插件作为 插件管理器

插件库

存储格式

插件库使用Json格式存储,方便插件管理器读取数据

信息内容

每个插件以 object 的形式存储在不同分类的 array 中, 每个插件包括以下内容,对比当前插件库内容,多了最后的4项内容:

  • 插件名
  • 作者
  • 中文描述
  • 英文描述
  • 插件id
  • 作者
  • 地址
  • 原始文件地址
    示例:
{
        "id": "my_plugin",
        "name": "MyPlugin",
        "description_cn": "这是一个例子",
        "description_en": "This is a example",
        "author": "myself",
        "link": "https://github.com",
        "raw_link": "https://raw.github.com/MyPlugin.py",
        "dependencies": {
            "package": [
                "requests",
                "json5"
            ],
            "plugin": [
                "an_api",
                "minecraft_data_api"
            ]
}

当前已完成的部分Json数据示例

期望行为

假设插件管理器已开发完成,通过读取该插件库提供插件选择、搜索、自动下载、分析依赖并下载的功能
插件作者将会在这个插件库文件添加他的插件信息,一次性添加
服主组服务端时,安装好MCDR和mc服务端,安装插件管理器。随后通过指令查看插件列表和分类、信息等内容,或通过搜索选择插件。最后进行选择,点击安装某个插件。插件管理器自动下载该插件,并自动下载该插件的依赖python包或其他插件

现在的插件安装流程

1.在插件库的markdown文档中选择
2.下载所需的插件
3.安装插件的依赖
4.安装完成

使用插件管理器的插件安装流程

1.在MCDR内选择插件
2.选择好后自动下载
3.安装完成

  1. 建议不要直接定义 raw 链接。定义仓库和文件地址,比如 eagle3236/joinMOTD_Plus/joinMOTD.py,由插件管理器合成最终链接,这样可以使用 fastgit 等镜像站;
  2. 如果插件不生成配置文件而选择在仓库中自带配置文件,则无法进行下载;
  3. 不建议保存前置数据——如果插件前置发生变化,如何实现这个数据库的无人值守化?建议手动读取在线文件并寻找 METADATA 中的配置文件。
  4. 如何检查更新?读取仓库文件的 METADATA 或是对比文件内容?

建议将 raw_link 改为更加通用的 file_paths,以支持多文件/文件夹下载

#89 (comment)

改进方案:

插件全部集中在某个服务器

1.增加全局 server_link 路径
2. raw_link 改为 file_paths,记录文件在相对 server_link 后的相对路径

插件分散,如github,gitee都有

raw_link 改为 file_paths,类型为list,插件的每个需要下载的文件或文件夹都填写,插件管理器根据路径自动判断并下载,加入 plugins 文件夹中

目前想到的插件就以下4种情况

以下两种情况官方插件管理器提供支持

  • 一个文件即为一个插件的,原方案即可解决
  • 多个python文件或有文件夹,都在 plugins 文件夹内的

以下两种情况官方插件管理器仅提供页面链接显示,不提供下载

  • 下载配置文件的,需要放到config内
  • 从release下载插件和资源的,如 CoolQAPI

更优解在 #94