从 MCDR 1.x 迁移至 MCDR 2.x

对于大多数插件而言,从 MCDR 1.x 迁移至 MCDR 2.x 是一件比 0.x 迁移至 1.x 容易的事情。许多 MCDR 1.x 的插件可以无需修改地正常工作

除插件外,MCDR 的权限 / 配置部分并未发生变化,因此你可以接着用你的 MCDR 1.x 的文件

插件

MCDR 1.x 与 MCDR 2.x 间最大的改变为插件系统

元数据

现在你不能使用 RText 实例作为插件元数据中键值对的值了。关于兼容性,以 RText 类存在的 name 以及 description 将被自动转换为 str

该改变是用于维护 单文件插件 (即 MCDR 2.x 前的插件形式) 以及 多文件插件 间的一致性,因为后者使用了 .json 文件来声明它们的元数据

事件

关于插件生命周期的插件事件有几处改变,使插件生命周期得以更完整

  • 插件被“删除” 事件被移除了

  • 插件被卸载 事件将在 MCDR 关闭时被派发

这样,插件生命周期就可以用 2 个事件,插件被加载 和 插件被卸载,来覆盖完全

模块

介于 MCDR 2.x 插件加载逻辑工作方式的变化,你不再能将你的外部依赖库模块置于你的 plugins/ 文件夹并 import 它们了。这是因为现在 MCDR 不再会将插件文件夹追加至 sys.path

比如,下文所示代码将无法在下述文件结构中于 MCDR 2.x 工作,尽管它能在 MCDR 1.x 中工作

plugins/
    my_lib/
        __init__.py
        my_tool.py
    my_plugin.py
# my_plugin.py
from my_lib import do_something

do_something()

为了解决该问题,你可以重新整理插件的文件结构,将其转换为 多文件插件 的形式,并将你的依赖库插入你的多文件插件中

ServerInterface

位于 ServerInterface 类中与当前插件相关的插件注册操作 API 现在被分离至一个派生类 PluginServerInterface 中了,其余通用性的 MCDR 控制类 API 不受影响

举个例子,下方的 API 已被移动至 PluginServerInterface 中

但是这些 API 未受影响

在触发插件的事件监听器时,MCDR 会将对应的 PluginServerInterface 实例作为第一个参数来触发回调,因此插件中对 Server Interface API 的可用性并未受到影响

该改变基本上不会影响你的插件的可运作性,不过它很可能会迷惑你的 IDE 的类型检查代码审查功能,并令其发出警告

命令

原先的类 ArgumentNode 现在已被拆分为 AbstractNode 和 ArgumentNode。原类的大多数功能都在 AbstractNode 中,但 name 属性被移动到了 ArgumentNode 中

对于你的自定义命令节点的类,你可能只需要修改一些相关的类型提示