2024-11-16 10:05:03 -06:00

74 lines
1.8 KiB
Lua

local storage = minetest.get_mod_storage()
local homes = minetest.deserialize(storage:get("player_homes")) or {}
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
if homes[name] == nil then
homes[name] = {}
end
end)
minetest.register_chatcommand("sethome", {
params = "<name>",
description = "Sets the position of home <NAME>",
func = function(name, param)
local player = minetest.get_player_by_name(name)
local pos = player:get_pos()
homes[name][param] = pos
return true, string.format("Set home `%s` position to (%d, %d, %d)", param, pos.x, pos.y, pos.z)
end
})
minetest.register_chatcommand("tphome", {
params = "<name>",
description = "Teleports to home <NAME>",
func = function(name, param)
local player = minetest.get_player_by_name(name)
local home = homes[name][param]
if home ~= nil then
player:set_pos(home)
return true, "Teleported to home: " .. param
else
return false, "No such home exists!"
end
end
})
minetest.register_chatcommand("listhomes", {
description = "Lists all your homes",
func = function(name)
for k, v in pairs(homes[name]) do
minetest.chat_send_player(name, string.format("%s - (%d, %d, %d)", k, v.x, v.y, v.z))
end
return true, "Listed all homes"
end
})
minetest.register_chatcommand("deletehome", {
description = "Delete a home",
func = function(name, param)
homes[name][param] = nil
return true, string.format("Home `%s` has been deleted", param)
end
})
local function save_data()
storage:set_string("player_homes", minetest.serialize(homes))
end
minetest.register_on_shutdown(save_data)
local first_run = true
local function interval()
if first_run then
first_run = false
else
save_data()
end
minetest.after(10, interval)
end
interval()