luanti API-Classes ModStorage

ModStorage

ModStorage 是每个世界、每个模组独立的持久化字符串键值存储,完全继承 MetaData 的所有方法

保存机制

数据的保存频率由服务器配置 map_save_interval 决定。


存储后端(两种)

  • JSON:纯文本存储,简单但不支持二进制数据
  • SQLite3:数据库存储,支持任意字节串,效率更高

⚠️ 重要警告

  • JSON 不能存原始二进制数据
  • 即使 SQLite3 支持二进制,也不要依赖它,因为用户可能用 JSON 后端
  • SQLite3 只保存变化的部分,更快、更安全
  • JSON 每次都要全量重写,崩溃时更容易丢数据

core.get_mod_storage()

  • 必须在模组加载时调用
  • 返回当前模组的私有存储对象

示例代码(欢迎语持久化)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- 获取模组存储
local storage = core.get_mod_storage()

-- 玩家进入时发送欢迎语
core.register_on_joinplayer(function(player)
local greeting = storage:get("greeting")
if greeting then
core.chat_send_player(player:get_player_name(), greeting)
end
end)

-- 管理员设置欢迎语
core.register_chatcommand("/set_greeting", {
params = "<欢迎语>",
description = "设置玩家进服欢迎语",
privs = {server = true},

func = function(name, param)
param = param:trim()
storage:set_string("greeting", param)
return true, param == "" and "欢迎语已清空" or "欢迎语已设置"
end
})