在我的世界中国版中,我们使用python来编写mod脚本。
我们封装了很多的游戏事件与组件,游戏事件是指游戏内触发了某个操作或达到某一种条件(例如玩家右键了自定义方块),可以通知到我们的代码,进而实现我们的逻辑。组件是我们封装好的游戏引擎接口,可以用来设置或获取某些数据(例如操作玩家背包),或者执行一些特殊的功能。
脚本开发就是一个监听事件与调用组件的过程,配合自己的逻辑来实现很酷的玩法。
在studio的新建作品→基岩版组件→入门脚本模板,点击新建,会自动创建一个“入门脚本模板“的AddOn。
然后我们直接选择这个AddOn进入开发测试。进入游戏后我们在聊天栏输入“钻石剑”,就会发现在背包里多了一把钻石剑。这个是使用原版AddOn无法实现的效果。
下面我们通过尝试修改入门模板来了解如何进行Python脚本开发。
我们的python脚本开发使用的python版本是python2,而不是python3
安装时需要选择将python添加到环境变量中,其余按照提示点下一步即可。
集成开发环境(IDE)可以很好帮助我们编写代码,对于python来说,pycharm与vscode都是很不错的IDE,这里我们以pycharm为例
打开studio编辑器,点击工具:
若只有稳定版本存在时,开发者可点击稳定版补全库下载。
若beta版本与稳定版本共存的时候,开发者可根据需要选择所需要的版本补全库。
点击检查补全库更新,可把最新版本的补全库更新到菜单列表。
对于高端开发者,可以使用pip来安装补全库。
然后选择File→Settings→Project:behavior_pack_xxx→PythonInterpreter,点设置按钮,然后Add。然后选SystemInterpreter,然后选择我们刚才安装的python路径。然后我们就可以使用pycharm的自动补全功能了
我们以tutorialScripts为例来讲解python脚本的目录结构。
建议采用[团队名称][Mod名称][Scripts]格式,例如SDKTeamTestScripts。这个文件夹更改命名后,代码里相应的地方也需要修改。
modMain是Python逻辑的入口文件,需要包含mod的初始化与退出时的处理函数。这些初始化函数中,InitClient和InitServer分别初始化客户端和服务端,通常用于系统与组件的注册,也可以做一些自定义的初始化操作。DestroyServer和DestroyClient用来做一些退出游戏时的处理,例如保存数据,恢复一些设置或销毁一些内容。
Mod代码目前不支持断点调试,因此只能通过在不同的地方打Log来调试代码。打Log可以使用print也可以使用logging模块(后面阅读AwesomeMod时会看到)。Log会显示在”脚本测试日志“窗口中,脚本的Log最好加上特殊的前缀方便查找。
推荐使用mod_log模块打印日志
如下图所示,原本点击开始游戏会打印出日志“test1”。修改打印内容为“test2”后,点击”脚本测试日志“窗口时,会输出"正在重载script_StartLogic.StartLogicUI",然后再次点击开始游戏,打印的内容变成了“test2”。
自动热更对函数内实现具有较好的支持,但涉及到全局变量,新增类/文件等可能无法生效。
此时可以通过保存退出到菜单界面后,再重新进入存档以完整加载修改后的MOD。