开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

[BE教程] Concepts of SAPI: Data Storage

 发表于 2025-9-7 15:35:30|显示全部楼层|阅读模式 IP:北京
本帖最后由 冥王大大 于 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, 下载次数: 38)
实例2:比大小游戏  main.js(4.02 KB, 下载次数: 32)
实例3(较复杂):控制台附加包
总结
《Concepts of SAPI》系列主讲SAPI的基本概念,存在进阶内容的引入,但还是以基础为主,进一步的学习内容还是以官方文档优先。本篇是该系列最后一个章节,建议在学习了之前章节的知识之后再来运用本节的内容。

评分

参与人数 1铁粒 +20收起理由
 小*** + 20原创奖励

查看全部评分

苦力怕论坛,感谢有您~

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

| 由 木韩网络 提供支持 | GMT+8, 2026-2-3 04:50

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4