插件开发的一些提示
下面的提示对我们很有帮助
帮助消息
使用 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 反混淆表)来进行类比区分
tr()
就是I18n.translate()
rtr()
, orRTextMCDRTranslation
就是new TranslatableText()
通常来说,第二种方法是在你的插件中进行翻译的推荐方法,因为它可以聪明地为玩家或控制台挑选恰当的语言来进行消息回复,并使用 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
代码文件作为运行库。对于这些文件,你需要使用 多文件插件 格式来编写你的插件,并将它们插入你的插件中;或者以某种方式将它们转换为独立的插件并声明依赖项