插件格式

目前,MCDR 拥有着 3 种可用的插件格式类型,每种插件格式在不同的使用场景下都有各自的优缺点

这个仓库里 你可以找到各种插件格式的例子

插件格式继承树

  • 单文件插件

  • 多文件插件(抽象)

    • 打包插件

    • 文件夹插件

单文件插件

单文件插件由单个 python .py 源文件组成。它是一种注重于简易编写、快速开发的插件格式

受单文件的格式的限制,某些特性在单文件插件是不可用的:

  1. 不支持 python 依赖的检查

  2. 在其他插件中的直接导入是不支持的。其他插件只能使用 get_plugin_instance() 来访问你的插件实例

  3. 无法被添加至 MCDR 的插件仓库中

当你只想尽快编写一个简单的插件时,编写一个单文件插件总是一个不错的选择

包含单个独立插件的文件树例子:

my_mcdr_server/plugins/
 └─ MyPlugin.py

多文件插件

多文件插件是下面两种插件格式,打包插件文件夹插件,的统称

多文件插件与单文件插件最大的区别是,它可以包含多个文件,而不是受限于单个 .py 文件。因此,打包文件支持更多的特性,这可以让插件编写更为容易

打包插件

打包插件是一个文件名后缀是 .mcdr.pyz 的 zip 类型的压缩文件。它是分发插件时的推荐格式

一个最小的打包插件在其压缩文件根目录中包含了以下的文件:

  • mcdreforged.plugin.json,储存着该插件的元数据

  • 一个以你的插件 id 为名的合法的 python 包

下面是插件 id 为 my_plugin 时,最小打包插件的文件树的一个例子:

my_mcdr_server/plugins/
 └─ MyPlugin.mcdr
     ├─ my_plugin/
     │   └─ __init__.py
     └─ mcdreforged.plugin.json

可选的,打包插件可以包含其他可被 MCDR 识别的有用的文件:

  • requirements.txt,储存着你的插件所依赖的 python 依赖。在插件加载前这些依赖需求将会被检查

  • lang/,一个储存着 json(.json)或者 yaml(.yml)格式的翻译文件的文件夹。MCDR 将会自动地载入并注册这些翻译文件

你可以在打包插件中包含其他的自定义文件或文件夹。你可以借助 ServerInterfaceopen_bundled_file() 方法来访问这些文件

下面是包含着更多文件的打包插件的文件树的一个例子:

my_mcdr_server/plugins/
 └─ MyPlugin.mcdr
     ├─ my_plugin/
     │   ├─ __init__.py
     │   └─ my_lib.py
     ├─ my_data/
     │   ├─ default_config.json
     │   └─ some_data.txt
     ├─ lang/
     │   ├─ en_us.json
     │   └─ zh_cn.json
     ├─ mcdreforged.plugin.json
     └─ requirements.txt

除了 .mcdr 文件扩展名外,python 的 zip app 扩展名 .pyz 也是打包插件的一个可用扩展名

尽管 .pyz 并不像 .mcdr 那样,能让人轻易地从文件名看出这是一个 MCDR 插件,但是对于那些支持脱离 MCDR 直接于控制台中运行的插件而言,使用 .pyz 扩展名能明确地表示“可于控制台中运行”这一性质

文件夹插件

文件夹插件拥有着与 打包插件 完全一致的文件结构。唯一的区别为,文件夹插件的文件位于一个文件夹中,而非一个 .mcdr 压缩文件中

文件夹插件主要用于在 MCDR 的插件文件夹中的插件调试

下面是文件夹插件的文件树的一个例子:

my_mcdr_server/plugins/
 └─ MyPlugin/
     ├─ my_plugin/
     │   ├─ __init__.py
     │   └─ my_lib.py
     ├─ mcdreforged.plugin.json
     └─ requirements.txt

!!MCDR reload plugin 这个 热重载 指令中,文件夹插件总会被视为是“有变化”的插件

链接型文件夹插件

链接型文件夹插件是一种特殊形式的文件夹插件,主要为 MCDR 插件开发者设计

它的工作方式类似于符号链接(symlink),链接到一个标准的 文件夹插件。与真实的符号链接相比,它更易于创建且提供更好的隔离性

要创建一个链接型文件夹插件,只需新建一个包含名为 mcdreforged.linked_directory_plugin.json 的文件的目录:

my_mcdr_server/plugins/
 └─ MyLinkedDirectoryPlugin/
     └─ mcdreforged.linked_directory_plugin.json

mcdreforged.linked_directory_plugin.json 文件包含一个 json 对象,这个对象只有一个键 target,该键指定了实际要加载的文件夹插件所在的路径:

{
    "target": "/path/to/the/target/directory/plugin/"
}

目标文件夹插件的文件结构如下所示:

/path/to/the/target/directory/plugin/
 ├─ my_plugin/
 │   ├─ __init__.py
 │   └─ my_lib.py
 ├─ mcdreforged.plugin.json
 └─ requirements.txt

在 v2.12.0 版本加入.