从 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 现在已被拆分为 AbstractNodeArgumentNode。原类的大多数功能都在 AbstractNode 中,但 name 属性被移动到了 ArgumentNode

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