luanti API-Classes metadata
MetaData
MetaData 是一个通用键值存储接口,用于给对象持久化保存字符串数据。
下面所有方法,在它的所有子类里都可以用。
子类(它管哪些东西)
- ModStorage:模组全局存储(整个模组共用)
- NodeMetaData:地图上的单个方块存储
- ItemStackMetaData:物品堆存储
- PlayerMetaData:玩家存储
核心注意
- 所有值最终都会存成字符串,没有类型标记
- 你自己要记住存的是字符串、整数还是浮点数
- 不要混用类型,否则会出bug
- 读取时会自动解析,但不保证完全符合你的预期
推荐:存复杂数据用序列化
- 存 JSON 表格:
core.write_json/core.parse_json - 存任意 Lua 表格:
core.serialize/core.deserialize
这样存数字、表格绝对安全,不怕类型丢失。
获取类方法(Getters)
所有 get 方法只传一个参数:key(键名)
:contains(key)
检查某个键是否存在
返回:
nil:对象无效false:不存在true:存在
:get(key)
获取键的值(原始方法)
返回:
nil:不存在- 字符串:存在的值
:get_string(key)
获取字符串,不存在返回空字符串 “”
:get_int(key)
获取整数,不存在返回 0
自动把字符串转成数字
:get_float(key)
获取浮点数,不存在返回 0
设置类方法(Setters)
所有 set 方法传两个参数:key, value
:set_string(key, value)
存字符串
- 传
""等于删除这个键
:set_int(key, value)
存整数
⚠️ 警告:
内部是 C++ 32位 int,范围:
-2³¹ ~ 2³¹-1
超出会溢出出错!
:set_float(key, value)
存浮点数
⚠️ 警告:
内部是 C++ 32位 float,精度比 Lua 64位低,大数可能丢失精度。
其他实用方法
:equals(other)
比较两个元数据对象是否完全一样(键值全相同)
:to_table()
把所有元数据转成 Lua 表格
结构:
1 | { |
:from_table(table)
从表格批量加载元数据
- 传非表格 = 清空所有数据