插件格式
目前,MCDR 拥有着 3 种可用的插件格式类型,每种插件格式在不同的使用场景下都有各自的优缺点
在 这个仓库里 你可以找到各种插件格式的例子
插件格式继承树
单文件插件
多文件插件(抽象)
打包插件
文件夹插件
单文件插件
单文件插件由单个 python .py
源文件组成。它是一种注重于简易编写、快速开发的插件格式
受单文件的格式的限制,某些特性在单文件插件是不可用的:
不支持 python 依赖的检查
在其他插件中的直接导入是不支持的。其他插件只能使用
get_plugin_instance()
来访问你的插件实例无法被添加至 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 将会自动地载入并注册这些翻译文件
你可以在打包插件中包含其他的自定义文件或文件夹。你可以借助 ServerInterface
的 open_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 版本加入.