插件开发的一些提示

下面的提示对我们很有帮助

帮助消息

使用 server.register_help_message() 来为你的插件添加一些必要的提示,这样玩家就可以使用 !!help 命令来了解如何使用你的插件。

当然,如果你的插件只能被有足够权限的玩家使用,请在注册时指定 permission 参数。

事件监听

如果你不关心非用户的信息源,与其监听 标准信息事件,不如监听 用户信息事件。这可以在服务端刷屏非用户信息时(如使用 Litematica mod 粘贴蓝图)提升 MCDR 的性能表现。

如果你只关心用户输入的指令,与其监听 用户信息事件,你还可以 注册一棵指令树。这比手动在 用户信息事件 高效不少。

MCDR 终止事件 能给你充足的时间来进行保存数据等操作。不过要小心,不要死循环了,MCDR 在等着你运算完成。

多线程

如果你想要在你的插件中执行需要一些时间才能完成的任务,如网络操作或者文件操作,建议将你的代码放到一个独立的线程里执行,而不是直接在你注册的事件监听器函数中执行。否则 MCDR 余下任务的执行可能会被阻塞。

为了更易于使用,你可以使用一个名为 new_thread 的函数装饰器来使你的函数异步地执行。

用户配置、数据及日志文件

如果你需要储存一些用户配置或数据文件,推荐将它们储存到 config 文件夹中而不是储存到插件文件夹中。

其中的原因是,用户可能会把他们的插件放置在另外非默认的文件夹中,甚至可能会让多个 MCDR 实例共享使用一个相同的插件文件夹。这是可以通过修改配置文件选项 plugin_directories 来实现的。

如果你将你的配置数据文件储存在了插件文件夹中,那你就无法区分出该配置文件是属于哪一个 MCDR 实例了。因此,你可以将这些文件直接储存至 config 文件夹,或者 config 中的一个子文件夹如 config/my_plugin/ 中,这样每个加载你的插件的 MCDR 实例即可拥有独享的用户配置数据。

对于日志文件,把它们储存至 logs/ 文件夹中是一个不错的选择。

额外的 Python 包

有时候你的插件需要一些额外的资源文件,或者需要一些其他的 .py 代码文件作为运行库。对于这些文件,你可以将它们放置在位于插件文件夹中的一个自定义包中。

举个例子,如果插件文件夹是 plugins/,其中的文件结构可以如下所示:

plugins/
 ├─ my_plugin/
 │   ├─ __init__.py
 │   ├─ a_useful_library.py
 │   ├─ my_resources.dat
 │   └─ ...
 ├─ MyPlugin.py
 └─ ...

然后你的插件 MyPlugin.py 就可以直接使用 from my_plugin import a_useful_library 导入你的库或资源文件。

不用担心,MCDR 会自动地 将所有插件文件夹添加至 sys.path 中,因此你可以直接 import 位于插件文件夹中的包。

其他

  • MCDR 的工作路径是 MCDR 所在的文件夹路径。切勿 修改工作路径,这将弄乱一切。

  • 对于在 标准信息事件 等时间中的参数 Info,不要修改它,仅调用它的公开方法并读取它的相关属性就行了。

  • 如果你需要导入其他插件,使用 server.get_plugin_instance() 而不是直接手动 import。这样可以保证你导入的插件实例同 MCDR 使用的插件实例为同一个插件实例。