🕵️ 调试工具#

调试是软件开发的基本环节。Bookshelf 提供多种工具帮助有效识别和解决问题。


🧪 单元测试#

测试对确保代码正确性和预防未来错误至关重要。本项目使用 Misode 的 Minecraft Fabric 模组 PackTest 进行测试。

⚙️ 运行测试#

运行测试有两种方式:

  1. Headless Mode: We provide a simple command uv run modules test that allows you to run the tests headlessly, without having to open the game

  2. 游戏内运行:下载并安装 Minecraft Fabric 模组,完成后可在游戏内使用测试命令运行测试

需要 Java

请确保系统已安装 Java,这是命令运行的必要条件。

✍️ 编写测试#

每个测试都是 test 文件夹内的 .mcfunction 文件。编写测试时,请清晰定义测试内容及预期结果。还应包含边界案例,确保代码能处理所有可能的输入情况。

🛠️ 自定义命令#

PackTest 提供多种命令控制测试流程、验证条件并与 Minecraft 环境交互:

测试流程命令

  • fail [<文本>]:立即终止当前测试并记录可选信息

  • succeed:立即通过当前测试

  • assert <条件>:若条件为假则测试失败

  • assert not <条件>:若条件为真则测试失败

  • await <条件>:持续检查条件直至成功或超时

  • await not <条件>:等待条件变为假

  • await delay <时间>:暂停测试指定时长

条件类型

  • block <位置> <方块>:检查指定位置的方块是否匹配给定方块

  • data <路径>:使用标准 Minecraft 数据语法验证 NBT 数据

  • entity <选择器>:验证实体是否匹配选择器(突破测试边界有效)

  • predicate <谓词>:执行数据包中的谓词

  • score <目标>:使用 Minecraft 基于分数的条件比较分数

  • chat <模式> [<接收者>]:使用正则表达式匹配聊天消息

🧍 玩家模拟器#

PackTest 允许生成和控制“模拟器”(dummies),即用于测试的模拟玩家:

  • dummy <名称> spawn:生成新模拟器

  • dummy <名称> respawn:被杀死后重生模拟器

  • dummy <名称> leave:让模拟器离开服务器

  • dummy <名称> jump:让模拟器跳跃

  • dummy <名称> sneak [true|false]:让模拟器持续按住或松开 Shift(不同于当前蹲伏状态)

  • dummy <名称> sprint [true|false]:让模拟器持续冲刺或停止冲刺

  • dummy <名称> drop [all]:让模拟器丢弃当前主手物品(单件或整组)

  • dummy <名称> swap:让模拟器交换主副手物品

  • dummy <名称> selectslot:让模拟器选择不同快捷栏位置

  • dummy <名称> use item:让模拟器使用手持物品(主副手皆可)

  • dummy <名称> use block <位置> [<方向>]:让模拟器在方块位置使用手持物品

  • dummy <名称> use entity <实体>:让模拟器在实体上使用手持物品

  • dummy <名称> attack <实体>:让模拟器用主手攻击实体

  • dummy <名称> mine <位置>:让模拟器挖掘方块

📋 测试指令#

可通过指令(测试文件开头的特殊注释)自定义测试:

  • @template:测试使用的结构模板资源位置,默认为 minecraft:empty(1×1×1空结构)

  • @timeout:指定超时的整数,默认 100

  • @optional:是否允许测试失败,默认 false(无值时视为 true

  • @skyaccess:测试是否需要天空视野,默认 false(将在测试区域上方放置屏障方块)

  • @dummy:是否在测试开始时生成模拟器并将 @s 设为该模拟器,位置默认 ~0.5 ~ ~0.5

了解更多…

如需更多信息,请访问 Misode 的仓库获取编写测试的详细指南。


📦 模块#

Bookshelf 包含多种模块,旨在提升开发体验。

📄 日志记录#

集中化并简化日志管理,便于项目监控和故障排查。详情参见日志模块文档

🔬 变量输出#

提供随时显示分数或存储值的便捷方式,辅助调试和追踪。详情参见输出模块文档