BE教程

Concepts of SAPI: Data Storage

牢***版主 发表于 2025-9-7 IP:北京 1,420 0
AI 速览2026-09-22 19:08 生成

SAPI 数据储存教程:对比自定义属性、标签、计分板等存储方式并附实例

这篇教程讲解在 Minecraft 脚本 API(SAPI)中储存数据的几种途径,包括自定义属性、标签、计分板、结构和物品注释,并逐一分析它们各自适合存放什么类型的数据、有哪些局限。文中给出死亡回归鱼钩、比大小游戏和控制台附加包三个实例,帮助读者按需求选择存储方案。适合已了解 SAPI 基础、希望让脚本数据在存档中持续保存的开发者阅读。

获取方式
  • 论坛附件 main.js(794 B,免费),对应实例1死亡回归的鱼钩
  • 论坛附件 main.js(4 KB,免费),对应实例2比大小游戏
  • 计分板数值为32位,超出范围的数据不适合用它储存
  • 物品注释每行限50字符、最多20行,不适合存数据
  • 结构管理器仅开放管理方块的方法,难以读取结构内数据
  • 建议先学习本系列前面章节再阅读本篇
本卡片由 AI 阅读本帖后生成,可能存在疏漏,请以帖子正文为准。
本帖最后由 冥王大大 于 2025-9-8 12:58 编辑

前言
数据储存(data storage)其实并不是SAPI独有的概念,但是SAPI脚本又不能把数据直接储存为游戏程序的常量,而有些数据我们要求在存档中可以连续使用,那就需要了解数据储存。这里主要介绍通过SAPI在游戏储存数据的方法,至于JavaScript固有的new Map()等等这里不会着重介绍。
讲述
SAPI 2.0有各种自定义属性,它们是较好的数据存储方法,另外还有标签、计分板和结构,在SAPI 1.0还有人用物品注释(lore)来储存数据。它们有各自的优缺点:
  • 自定义属性可以储存在世界NBT、实体NBT、物品NBT内,这其实方便我们绑定这些数据在特定的要素上。但是它不是显性的,你没有办法在游戏中直接看到有哪些自定义属性,它的值是什么,要借助.getDynamicPropertyIds()和.getDynamicProperty()才能获知
  • 标签通常来讲只能储存字符串和布尔值(有标签为真,无标签为假),然而所有的字符串理论上都可以进行区域划分来储存不同的数据(只要字符串长度没有限制),比如我们设计一个字符串:"num:1bool: truestr:notspecific"可以通过.indexOf以及.slice()等等方法来读取数据(只要你的设计是合理的)
  • 计分板可以通常用来在要素上绑定整数类型的数据,但既然字符串可以拆分,整数为什么不可以拆分呢?你可以设计一个名为int的计分板外加一个decimal计分板,就可以储存浮点数;这些数字也可以用来表示布尔值、枚举类型等。只不过需要注意,计分板的数字是32位数据,所以超出这个值就不适合用计分板(但是2^32也是很大的一个数了,你要存什么能比它还大呢?)。另外计分板的计分对象(participant)名称也可以算作字符串数据。而且计分板的数据侦测方式我们都很熟悉了,JSON文本和计分板屏幕显示都可以让我们直观地观察这些数据。
  • 结构可以存储方块和实体,这样可存储的数据类型就比较多了,它也可以配合自定义属性和标签使用。只不过,SAPI中的结构管理器(StructureManager)类只开放了管理其中方块的方法,通过SAPI调用结构中的数据还是比较难的,大多数时候我们用它存储地形就够了。
  • 物品注释可以有很多条,但是每一条的长度只能在50个字符以内,最大行数只有20行,目前来讲不适合储存数据,但是直观性还是有的,只适合作数据显示了。
  • 其他还有物品名称之类的存储方法就不过多介绍,它们在指令检测中的表现远比在SAPI中的好得多。

重点是按照需求选择数据的存储方式,这里提供几个实例,帮助各位熟悉数据存储。
应用
实例1:死亡回归的鱼钩  main.js (794 Bytes, 下载次数: 41)
实例2:比大小游戏  main.js (4.02 KB, 下载次数: 34)
实例3(较复杂):控制台附加包
总结
《Concepts of SAPI》系列主讲SAPI的基本概念,存在进阶内容的引入,但还是以基础为主,进一步的学习内容还是以官方文档优先。本篇是该系列最后一个章节,建议在学习了之前章节的知识之后再来运用本节的内容。
  • 小*** 铁粒 +20 原创奖励
您需要登录后才可以回帖 登录 | 立即注册
本版积分规则