Minecraft基岩版开发Wiki:技术周报/21m02w03a

来自Minecraft基岩版开发Wiki
assignment 21m02w03a | event 2021/2/21 | confirmation_number 第二期

edit history refresh

navigate_before 21m02w02a | 21m02w03a

技术更新

官方Beta

本周官方发布了Beta 1.16.210.60 更新,其中技术性更新如下:

  • 添加了游戏测试框架GameTest Framework)。
    • GameTest 是一个基于将测试代码与预制的测试结构配对运行的用于服务器端测试的自动化工具。您可通过在启用了 Enable GameTest Framework 实验性玩法的存档中使用 /gametest 指令来进行相关测试。
    • 此次更新的测试类型包括以下几种:
      • 方块测试(BlockTests
      • 调试测试(DebugTests
      • 门测试(DoorTests
      • 矿车测试(MinecartTests
      • 生物测试(MobTests
      • 寻路测试(PathFindingTests
    • 注意:GameTest 在原主机版上不可用。
  • Mojang 即将停止对 Android 系统 4.4 及以下版本的游戏支持,详情可查询官方支持设备清单页面

技术茶馆

本期主题:《中国版 ModAPI 引擎的基本结构》

本站的 Mod SDK 页面已对 Mod API 进行了基本介绍,相信各位对于它在网易特色组件中的重要性也有了一定了解。本期我们来了解一下它的基本结构,以及如何在开发实战中使用这个功能强大的引擎。

基础环境准备

因为网易并没有为手机端提供可以实时测试脚本的工具,所以建议使用电脑进行脚本的编写和测试。

推荐配置:

内存:4GB+ RAM

文本编辑器: VSCodePyCharm

系统:windows 7 及以上

可用存储空间:2GB+

在开始前,请务必确认您至少已经了解 Python (2.7版本)中的以下内容:

  • 数据类型和变量
  • 条件判断和循环
  • 使用dict
  • 调用函数
  • 定义函数
  • 函数的参数
  • 使用模块
  • 类和示例

现在,让我们开始吧!

文件路径设置

首先,让我们在组件的行为包根目录下创建一个单独的文件夹放置脚本文件。文件夹的名字可以随意,但推荐取比较有特色的名称以防可能出现的冲突。(注:路径一定要是非中文!)

网易的脚本系统在识别脚本时,并不会根据文件夹的名称,而是根据文件夹下的 __init__.py 文件进行识别。故在每个放有脚本文件的文件夹下(哪怕是已经包含在脚本文件夹内的子文件夹)都需要放置一个名称为 __init__.py 的文件,否则该文件夹下的脚本便无法识别。该文件内什么都不需要写,只起到一个辨别的作用。

下面列出从行为包根目录开始的最简结构。

| behavior_packs_xxx

—| entities

—| xxxScripts

——| __init__.py

——| modMain.py

——| ...

—| ...

—| manifest.json

正式起步

现在,我们已经拥有了一个最基础的环境,可以开始着手构建系统了。

我们需要一个名为 modMain.py 的文件对系统进行注册。modMain 是 Python 逻辑的入口文件,需要包含 mod 的初始化与退出时的处理函数。

下面是一个 modMain 实例,对该文件的结构进行解释。

Mod 属于 SDK 的内部类,用于绑定

from mod.common.mod import Mod

# 分别导入服务端与客户端的API进行绑定

import mod.server.extraServerApi as serverApi

import mod.client.extraClientApi as clientApi

# 将引擎的方法绑定到类上用于识别

@Mod.Binding(name = "testMod", version = "0.0.1")

class testMod(object):

    def __init__(self):

        pass

    # 服务端脚本初始化的入口函数
    #当然,如果您不需要服务端,您可以直接pass掉它

    @Mod.InitServer()

    def testServerInit(self):

        serverApi.RegisterSystem("testMod", "testModServer", "Scripts.ServerSystem.ServerSystem")
    #RegisterSystem的三个参数分别是[Mod名称][System名称][System类路径](路径从行为包根目录开始计算,中间以“.”隔开而不是“/”。下面客户端注册同理)

    # 服务端脚本在退出时执行的析构函数

    @Mod.DestroyServer()

    def testServerDestroy(self):

        pass

    # 客户端脚本初始化的入口函数

    @Mod.InitClient()

    def testClientInit(self):

        clientApi.RegisterSystem("testMod", "testModClient", "Scripts.ClientSystem.ClientSystem")

    # 客户端脚本在退出时执行的析构函数

    @Mod.DestroyClient():

    def testClientDestroy(self):

        pass

#备注:建议将Mod名称、版本号等需要在多处地方使用的量保存在一个单独的模块文件里,以便将来维护修改。

到这里,我们就已经成功地注册了自己的系统,可以开始着手编辑自己的脚本了!

你知道吗

  • 在这个版本,/gametest指令在游戏中输入时有着高亮显示效果。
  • 本周 Mojang 仍未对脚本引擎做出任何更新。