插件开发的一些提示

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

帮助消息

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

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

翻译

对于 多文件插件,你还可以在你的插件中放置一个名为 lang/ 的文件夹,其中含有 json(.json)或者 yaml(.yml)格式的翻译文件。MCDR 将会自动为你的插件注册这些翻译文件

强烈建议使用插件 ID 作为翻译键的前缀,这样插件之间就不会出现翻译冲突。例如,使用 my_plugin.some.text 而不是 some.text 作为翻译键

翻译键可以被表示为根节点下的子节点名称,或嵌套的多层节点的路径。例如,以下对于翻译键 my_plugin.some.text 在 yaml(.yml)格式的语言文件中的定义都是等价的

my_plugin.some.text: Text of translation key.
my_plugin:
  some:
    text: Text of translation key.

对于 ServerInterface 中两种不同的翻译方法,我们可以使用 Minecraft 的代码(yarn 反混淆表)来进行类比区分

通常来说,第二种方法是在你的插件中进行翻译的推荐方法,因为它可以聪明地为玩家或控制台挑选恰当的语言来进行消息回复,并使用 MCDR 的语言来进行其他方面的翻译,如日志消息输出

事件监听

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

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

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

多线程

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

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

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

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

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

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

get_data_folder() 是个不错的懒人方法

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

额外的 Python 包

有时候你的插件需要一些额外的资源文件,或者需要一些其他的 .py 代码文件作为运行库。对于这些文件,你需要使用 多文件插件 格式来编写你的插件,并将它们插入你的插件中;或者以某种方式将它们转换为独立的插件并声明依赖项

其他

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

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