]> git.lizzy.rs Git - warp.git/blob - init.lua
Initital Commit
[warp.git] / init.lua
1 warp = {}
2
3 local storage = minetest.get_mod_storage()
4
5 function warp.set(warp, pos)
6         if warp == "" or not pos then return false, "Missing parameter." end
7         local posstr = minetest.pos_to_string(pos)
8         storage:set_string(warp, posstr)
9         return true, "Warp " .. warp .. " set to " .. posstr .. "."
10 end
11
12 function warp.set_here(param)
13         local success, message = warp.set(param, vector.round(minetest.localplayer:get_pos()))
14         return success, message
15 end
16
17 function warp.get(param)
18         if param == "" then return false, "Missing parameter." end
19         local pos = storage:get_string(param)
20         if pos == "" then return false, "Warp " .. param .. " not set." end
21         return true, "Warp " .. param .. " is set to " .. pos .. ".", minetest.string_to_pos(pos)
22 end
23
24 function warp.delete(param)
25         if param == "" then return false, "Missing parameter." end
26         storage:set_string(param, "")
27         return true, "Deleted warp " .. param .. "."
28 end
29
30 minetest.register_chatcommand("setwarp", {
31         params = "<warp>",
32         description = "Set a warp to your current position.",
33         func = warp.set_here,
34 })
35
36 minetest.register_chatcommand("readwarp", {
37         params = "<warp>",
38         description = "Print the coordinates of a warp.",
39         func = warp.get,
40 })
41
42 minetest.register_chatcommand("deletewarp", {
43         params = "<warp>",
44         description = "Delete a warp.",
45         func = warp.delete,
46 })
47
48 minetest.register_chatcommand("listwarps", {
49         description = "List all warps.",
50         func = function()
51                 local warps = storage:to_table().fields
52                 local warplist = {}
53                 for warp in pairs(warps) do
54                         table.insert(warplist, warp)
55                 end
56                 if #warplist > 0 then
57                         return true, table.concat(warplist, ", ")
58                 else
59                         return false, "No warps set."
60                 end
61         end,
62 })
63
64 local function do_warp(param)
65         if param == "" then return false, "Missing parameter." end
66         local success, pos = minetest.parse_pos(param)
67         if not success then
68                 local msg
69                 success, msg, pos = warp.get(param)
70                 if not success then
71                         return false, msg
72                 end
73         end
74         minetest.localplayer:set_pos(pos)
75         return true, "Warped to " .. minetest.pos_to_string(pos)
76 end
77
78 minetest.register_chatcommand("warp", {
79         params = "<pos>|<warp>",
80         description = "Warp to a set warp or a position.",
81         func = do_warp
82 })
83
84 minetest.register_chatcommand("warpandexit", {
85         params = "<pos>|<warp>",
86         description = "Warp to a set warp or a position and exit.",
87         func = function(param)
88                 local s, m = do_warp(param)
89                 if s then
90                         minetest.disconnect()
91                 end
92                 return s,m 
93         end
94 })