aboutsummaryrefslogtreecommitdiff
path: root/init.lua
blob: 9eca73482960be408c65fd1e3a04cb6c36d20d59 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
warp = {}

local storage = minetest.get_mod_storage()

function warp.set(warp, pos)
	if warp == "" or not pos then return false, "Missing parameter." end
	local posstr = minetest.pos_to_string(pos)
	storage:set_string(warp, posstr)
	return true, "Warp " .. warp .. " set to " .. posstr .. "."
end

function warp.set_here(param)
	local success, message = warp.set(param, vector.round(minetest.localplayer:get_pos()))
	return success, message
end

function warp.get(param)
	if param == "" then return false, "Missing parameter." end
	local pos = storage:get_string(param)
	if pos == "" then return false, "Warp " .. param .. " not set." end
	return true, "Warp " .. param .. " is set to " .. pos .. ".", minetest.string_to_pos(pos)
end

function warp.delete(param)
	if param == "" then return false, "Missing parameter." end
	storage:set_string(param, "")
	return true, "Deleted warp " .. param .. "."
end

minetest.register_chatcommand("setwarp", {
	params = "<warp>",
	description = "Set a warp to your current position.",
	func = warp.set_here,
})

minetest.register_chatcommand("readwarp", {
	params = "<warp>",
	description = "Print the coordinates of a warp.",
	func = warp.get,
})

minetest.register_chatcommand("deletewarp", {
	params = "<warp>",
	description = "Delete a warp.",
	func = warp.delete,
})

minetest.register_chatcommand("listwarps", {
	description = "List all warps.",
	func = function()
		local warps = storage:to_table().fields
		local warplist = {}
		for warp in pairs(warps) do
			table.insert(warplist, warp)
		end
		if #warplist > 0 then
			return true, table.concat(warplist, ", ")
		else
			return false, "No warps set."
		end
	end,
})

local function do_warp(param)
	if param == "" then return false, "Missing parameter." end
	local success, pos = minetest.parse_pos(param)
	if not success then
		local msg
		success, msg, pos = warp.get(param)
		if not success then
			return false, msg
		end
	end
	minetest.localplayer:set_pos(pos)
	return true, "Warped to " .. minetest.pos_to_string(pos)
end

minetest.register_chatcommand("warp", {
	params = "<pos>|<warp>",
	description = "Warp to a set warp or a position.",
	func = do_warp
})

minetest.register_chatcommand("warpandexit", {
	params = "<pos>|<warp>",
	description = "Warp to a set warp or a position and exit.",
	func = function(param)
		local s, m = do_warp(param)
		if s then
			minetest.disconnect()
		end
		return s,m 
	end
})