]> git.lizzy.rs Git - worldedit.git/blob - worldedit_gui/functionality.lua
worldedit_gui: Add tooltips to node search result
[worldedit.git] / worldedit_gui / functionality.lua
1 --saved state for each player\r
2 local gui_nodename1 = {} --mapping of player names to node names\r
3 local gui_nodename2 = {} --mapping of player names to node names\r
4 local gui_axis1 = {} --mapping of player names to axes (one of 1, 2, 3, or 4, representing the axes in the `axis_indices` table below)\r
5 local gui_axis2 = {} --mapping of player names to axes (one of 1, 2, 3, or 4, representing the axes in the `axis_indices` table below)\r
6 local gui_distance1 = {} --mapping of player names to a distance (arbitrary strings may also appear as values)\r
7 local gui_distance2 = {} --mapping of player names to a distance (arbitrary strings may also appear as values)\r
8 local gui_distance3 = {} --mapping of player names to a distance (arbitrary strings may also appear as values)\r
9 local gui_count1 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values)\r
10 local gui_count2 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values)\r
11 local gui_count3 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values)\r
12 local gui_angle = {} --mapping of player names to an angle (one of 90, 180, 270, representing the angle in degrees clockwise)\r
13 local gui_filename = {} --mapping of player names to file names\r
14 \r
15 --set default values\r
16 setmetatable(gui_nodename1, {__index = function() return "Cobblestone" end})\r
17 setmetatable(gui_nodename2, {__index = function() return "Stone" end})\r
18 setmetatable(gui_axis1,     {__index = function() return 4 end})\r
19 setmetatable(gui_axis2,     {__index = function() return 1 end})\r
20 setmetatable(gui_distance1, {__index = function() return "10" end})\r
21 setmetatable(gui_distance2, {__index = function() return "5" end})\r
22 setmetatable(gui_distance3, {__index = function() return "2" end})\r
23 setmetatable(gui_count1,     {__index = function() return "3" end})\r
24 setmetatable(gui_count2,     {__index = function() return "6" end})\r
25 setmetatable(gui_count3,     {__index = function() return "4" end})\r
26 setmetatable(gui_angle,     {__index = function() return 90 end})\r
27 setmetatable(gui_filename,  {__index = function() return "building" end})\r
28 \r
29 local axis_indices = {["X axis"]=1, ["Y axis"]=2, ["Z axis"]=3, ["Look direction"]=4}\r
30 local axis_values = {"x", "y", "z", "?"}\r
31 setmetatable(axis_indices, {__index = function () return 4 end})\r
32 setmetatable(axis_values, {__index = function () return "?" end})\r
33 \r
34 local angle_indices = {["90 degrees"]=1, ["180 degrees"]=2, ["270 degrees"]=3}\r
35 local angle_values = {90, 180, 270}\r
36 setmetatable(angle_indices, {__index = function () return 1 end})\r
37 setmetatable(angle_values, {__index = function () return 90 end})\r
38 \r
39 -- given multiple sets of privileges, produces a single set of privs that would have the same effect as requiring all of them at the same time\r
40 local combine_privs = function(...)\r
41         local result = {}\r
42         for i, privs in ipairs({...}) do\r
43                 for name, value in pairs(privs) do\r
44                         if result[name] ~= nil and result[name] ~= value then --the priv must be both true and false, which can never happen\r
45                                 return {__fake_priv_that_nobody_has__=true} --privilege table that can never be satisfied\r
46                         end\r
47                         result[name] = value\r
48                 end\r
49         end\r
50         return result\r
51 end\r
52 \r
53 -- display node (or unknown_node image otherwise) at specified pos in formspec\r
54 local formspec_node = function(pos, nodename)\r
55         if nodename then\r
56                 local ndef = minetest.registered_nodes[nodename] or {}\r
57                 return string.format("item_image[%s;1,1;%s]", pos, nodename) ..\r
58                         string.format("tooltip[%s;1,1;%s]", pos, minetest.formspec_escape(ndef.description))\r
59         else\r
60                 return string.format("image[%s;1,1;worldedit_gui_unknown.png]", pos)\r
61         end\r
62 end\r
63 \r
64 -- two further priv helpers\r
65 local function we_privs(command)\r
66         return minetest.chatcommands["/" .. command].privs\r
67 end\r
68 \r
69 local function combine_we_privs(list)\r
70         local args = {}\r
71         for _, t in ipairs(list) do\r
72                 table.insert(args, we_privs(t))\r
73         end\r
74         return combine_privs(unpack(args))\r
75 end\r
76 \r
77 worldedit.register_gui_function("worldedit_gui_about", {\r
78         name = "About",\r
79         privs = {interact=true},\r
80         on_select = function(name)\r
81                 minetest.chatcommands["/about"].func(name, "")\r
82         end,\r
83 })\r
84 \r
85 worldedit.register_gui_function("worldedit_gui_inspect", {\r
86         name = "Toggle Inspect",\r
87         privs = we_privs("inspect"),\r
88         on_select = function(name)\r
89                 minetest.chatcommands["/inspect"].func(name, worldedit.inspect[name] and "disable" or "enable")\r
90         end,\r
91 })\r
92 \r
93 worldedit.register_gui_function("worldedit_gui_region", {\r
94         name = "Get/Set Region",\r
95         privs = combine_we_privs({"p", "pos1", "pos2", "reset", "mark", "unmark", "volume", "fixedpos"}),\r
96         get_formspec = function(name)\r
97                 local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
98                 return "size[9,7]" .. worldedit.get_formspec_header("worldedit_gui_region") ..\r
99                         "button_exit[0,1;3,0.8;worldedit_gui_p_get;Get Positions]" ..\r
100                         "button_exit[3,1;3,0.8;worldedit_gui_p_set1;Choose Position 1]" ..\r
101                         "button_exit[6,1;3,0.8;worldedit_gui_p_set2;Choose Position 2]" ..\r
102                         "button_exit[0,2;3,0.8;worldedit_gui_pos1;Position 1 Here]" ..\r
103                         "button_exit[3,2;3,0.8;worldedit_gui_pos2;Position 2 Here]" ..\r
104                         "button_exit[6,2;3,0.8;worldedit_gui_reset;Reset Region]" ..\r
105                         "button_exit[0,3;3,0.8;worldedit_gui_mark;Mark Region]" ..\r
106                         "button_exit[3,3;3,0.8;worldedit_gui_unmark;Unmark Region]" ..\r
107                         "button_exit[6,3;3,0.8;worldedit_gui_volume;Region Volume]" ..\r
108                         "label[0,4.7;Position 1]" ..\r
109                         string.format("field[2,5;1.5,0.8;worldedit_gui_fixedpos_pos1x;X ;%s]", pos1 and pos1.x or "") ..\r
110                         string.format("field[3.5,5;1.5,0.8;worldedit_gui_fixedpos_pos1y;Y ;%s]", pos1 and pos1.y or "") ..\r
111                         string.format("field[5,5;1.5,0.8;worldedit_gui_fixedpos_pos1z;Z ;%s]", pos1 and pos1.z or "") ..\r
112                         "button_exit[6.5,4.68;2.5,0.8;worldedit_gui_fixedpos_pos1_submit;Set Position 1]" ..\r
113                         "label[0,6.2;Position 2]" ..\r
114                         string.format("field[2,6.5;1.5,0.8;worldedit_gui_fixedpos_pos2x;X ;%s]", pos2 and pos2.x or "") ..\r
115                         string.format("field[3.5,6.5;1.5,0.8;worldedit_gui_fixedpos_pos2y;Y ;%s]", pos2 and pos2.y or "") ..\r
116                         string.format("field[5,6.5;1.5,0.8;worldedit_gui_fixedpos_pos2z;Z ;%s]", pos2 and pos2.z or "") ..\r
117                         "button_exit[6.5,6.18;2.5,0.8;worldedit_gui_fixedpos_pos2_submit;Set Position 2]"\r
118         end,\r
119 })\r
120 \r
121 worldedit.register_gui_handler("worldedit_gui_region", function(name, fields)\r
122         if fields.worldedit_gui_p_get then\r
123                 minetest.chatcommands["/p"].func(name, "get")\r
124                 return true\r
125         elseif fields.worldedit_gui_p_set1 then\r
126                 minetest.chatcommands["/p"].func(name, "set1")\r
127                 return true\r
128         elseif fields.worldedit_gui_p_set2 then\r
129                 minetest.chatcommands["/p"].func(name, "set2")\r
130                 return true\r
131         elseif fields.worldedit_gui_pos1 then\r
132                 minetest.chatcommands["/pos1"].func(name, "")\r
133                 worldedit.show_page(name, "worldedit_gui_region")\r
134                 return true\r
135         elseif fields.worldedit_gui_pos2 then\r
136                 minetest.chatcommands["/pos2"].func(name, "")\r
137                 worldedit.show_page(name, "worldedit_gui_region")\r
138                 return true\r
139         elseif fields.worldedit_gui_reset then\r
140                 minetest.chatcommands["/reset"].func(name, "")\r
141                 worldedit.show_page(name, "worldedit_gui_region")\r
142                 return true\r
143         elseif fields.worldedit_gui_mark then\r
144                 minetest.chatcommands["/mark"].func(name, "")\r
145                 worldedit.show_page(name, "worldedit_gui_region")\r
146                 return true\r
147         elseif fields.worldedit_gui_unmark then\r
148                 minetest.chatcommands["/unmark"].func(name, "")\r
149                 worldedit.show_page(name, "worldedit_gui_region")\r
150                 return true\r
151         elseif fields.worldedit_gui_volume then\r
152                 minetest.chatcommands["/volume"].func(name, "")\r
153                 worldedit.show_page(name, "worldedit_gui_region")\r
154                 return true\r
155         elseif fields.worldedit_gui_fixedpos_pos1_submit then\r
156                 minetest.chatcommands["/fixedpos"].func(name, string.format("set1 %s %s %s",\r
157                         tostring(fields.worldedit_gui_fixedpos_pos1x),\r
158                         tostring(fields.worldedit_gui_fixedpos_pos1y),\r
159                         tostring(fields.worldedit_gui_fixedpos_pos1z)))\r
160                 worldedit.show_page(name, "worldedit_gui_region")\r
161                 return true\r
162         elseif fields.worldedit_gui_fixedpos_pos2_submit then\r
163                 minetest.chatcommands["/fixedpos"].func(name, string.format("set2 %s %s %s",\r
164                         tostring(fields.worldedit_gui_fixedpos_pos2x),\r
165                         tostring(fields.worldedit_gui_fixedpos_pos2y),\r
166                         tostring(fields.worldedit_gui_fixedpos_pos2z)))\r
167                 worldedit.show_page(name, "worldedit_gui_region")\r
168                 return true\r
169         end\r
170         return false\r
171 end)\r
172 \r
173 worldedit.register_gui_function("worldedit_gui_set", {\r
174         name = "Set Nodes",\r
175         privs = we_privs("set"),\r
176         get_formspec = function(name)\r
177                 local node = gui_nodename1[name]\r
178                 local nodename = worldedit.normalize_nodename(node)\r
179                 return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_set") ..\r
180                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_set_node;Name;%s]", minetest.formspec_escape(node)) ..\r
181                         "field_close_on_enter[worldedit_gui_set_node;false]" ..\r
182                         "button[4,1.18;1.5,0.8;worldedit_gui_set_search;Search]" ..\r
183                         formspec_node("5.5,1.1", nodename) ..\r
184                         "button_exit[0,2.5;3,0.8;worldedit_gui_set_submit;Set Nodes]"\r
185         end,\r
186 })\r
187 \r
188 worldedit.register_gui_handler("worldedit_gui_set", function(name, fields)\r
189         local ret = false\r
190         if fields.worldedit_gui_set_search or fields.key_enter_field == "worldedit_gui_set_node" then\r
191                 gui_nodename1[name] = tostring(fields.worldedit_gui_set_node)\r
192                 worldedit.show_page(name, "worldedit_gui_set")\r
193                 ret = true -- fallthrough\r
194         end\r
195         if fields.worldedit_gui_set_submit then\r
196                 local n = worldedit.normalize_nodename(gui_nodename1[name])\r
197                 if n then\r
198                         minetest.chatcommands["/set"].func(name, n)\r
199                 end\r
200                 return true\r
201         end\r
202         return ret\r
203 end)\r
204 \r
205 worldedit.register_gui_function("worldedit_gui_replace", {\r
206         name = "Replace Nodes",\r
207         privs = combine_we_privs({"replace", "replaceinverse"}),\r
208         get_formspec = function(name)\r
209                 local search, replace = gui_nodename1[name], gui_nodename2[name]\r
210                 local search_nodename, replace_nodename = worldedit.normalize_nodename(search), worldedit.normalize_nodename(replace)\r
211                 return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_replace") ..\r
212                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_replace_search;Name;%s]", minetest.formspec_escape(search)) ..\r
213                         "field_close_on_enter[worldedit_gui_replace_search;false]" ..\r
214                         "button[4,1.18;1.5,0.8;worldedit_gui_replace_search_search;Search]" ..\r
215                         formspec_node("5.5,1.1", search_nodename) ..\r
216                         string.format("field[0.5,2.5;4,0.8;worldedit_gui_replace_replace;Name;%s]", minetest.formspec_escape(replace)) ..\r
217                         "field_close_on_enter[worldedit_gui_replace_replace;false]" ..\r
218                         "button[4,2.18;1.5,0.8;worldedit_gui_replace_replace_search;Search]" ..\r
219                         formspec_node("5.5,2.1", replace_nodename) ..\r
220                         "button_exit[0,3.5;3,0.8;worldedit_gui_replace_submit;Replace Nodes]" ..\r
221                         "button_exit[3.5,3.5;3,0.8;worldedit_gui_replace_submit_inverse;Replace Inverse]"\r
222         end,\r
223 })\r
224 \r
225 worldedit.register_gui_handler("worldedit_gui_replace", function(name, fields)\r
226         local ret = false\r
227         if fields.worldedit_gui_replace_search_search or fields.worldedit_gui_replace_replace_search\r
228                 or table.indexof({"worldedit_gui_replace_search", "worldedit_gui_replace_replace"}, fields.key_enter_field) ~= -1 then\r
229                 gui_nodename1[name] = tostring(fields.worldedit_gui_replace_search)\r
230                 gui_nodename2[name] = tostring(fields.worldedit_gui_replace_replace)\r
231                 worldedit.show_page(name, "worldedit_gui_replace")\r
232 \r
233                 ret = true -- fallthrough\r
234         end\r
235         if fields.worldedit_gui_replace_submit or fields.worldedit_gui_replace_submit_inverse then\r
236                 local submit = "replace"\r
237                 if fields.worldedit_gui_replace_submit_inverse then\r
238                         submit = "replaceinverse"\r
239                 end\r
240                 local n1 = worldedit.normalize_nodename(gui_nodename1[name])\r
241                 local n2 = worldedit.normalize_nodename(gui_nodename2[name])\r
242                 if n1 and n2 then\r
243                         minetest.chatcommands["/"..submit].func(name, string.format("%s %s", n1, n2))\r
244                 end\r
245                 return true\r
246         end\r
247         return ret\r
248 end)\r
249 \r
250 worldedit.register_gui_function("worldedit_gui_sphere_dome", {\r
251         name = "Sphere/Dome",\r
252         privs = combine_we_privs({"hollowsphere", "sphere", "hollowdome", "dome"}),\r
253         get_formspec = function(name)\r
254                 local node, radius = gui_nodename1[name], gui_distance2[name]\r
255                 local nodename = worldedit.normalize_nodename(node)\r
256                 return "size[6.5,5]" .. worldedit.get_formspec_header("worldedit_gui_sphere_dome") ..\r
257                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_sphere_dome_node;Name;%s]", minetest.formspec_escape(node)) ..\r
258                         "button[4,1.18;1.5,0.8;worldedit_gui_sphere_dome_search;Search]" ..\r
259                         formspec_node("5.5,1.1", nodename) ..\r
260                         string.format("field[0.5,2.5;4,0.8;worldedit_gui_sphere_dome_radius;Radius;%s]", minetest.formspec_escape(radius)) ..\r
261                         "button_exit[0,3.5;3,0.8;worldedit_gui_sphere_dome_submit_hollow;Hollow Sphere]" ..\r
262                         "button_exit[3.5,3.5;3,0.8;worldedit_gui_sphere_dome_submit_solid;Solid Sphere]" ..\r
263                         "button_exit[0,4.5;3,0.8;worldedit_gui_sphere_dome_submit_hollow_dome;Hollow Dome]" ..\r
264                         "button_exit[3.5,4.5;3,0.8;worldedit_gui_sphere_dome_submit_solid_dome;Solid Dome]"\r
265         end,\r
266 })\r
267 \r
268 worldedit.register_gui_handler("worldedit_gui_sphere_dome", function(name, fields)\r
269         if fields.worldedit_gui_sphere_dome_search\r
270         or fields.worldedit_gui_sphere_dome_submit_hollow or fields.worldedit_gui_sphere_dome_submit_solid\r
271         or fields.worldedit_gui_sphere_dome_submit_hollow_dome or fields.worldedit_gui_sphere_dome_submit_solid_dome then\r
272                 gui_nodename1[name] = tostring(fields.worldedit_gui_sphere_dome_node)\r
273                 gui_distance2[name] = tostring(fields.worldedit_gui_sphere_dome_radius)\r
274                 worldedit.show_page(name, "worldedit_gui_sphere_dome")\r
275 \r
276                 local submit = nil\r
277                 if fields.worldedit_gui_sphere_dome_submit_hollow then\r
278                         submit = "hollowsphere"\r
279                 elseif fields.worldedit_gui_sphere_dome_submit_solid then\r
280                         submit = "sphere"\r
281                 elseif fields.worldedit_gui_sphere_dome_submit_hollow_dome then\r
282                         submit = "hollowdome"\r
283                 elseif fields.worldedit_gui_sphere_dome_submit_solid_dome then\r
284                         submit = "dome"\r
285                 end\r
286                 if submit then\r
287                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
288                         if n then\r
289                                 minetest.chatcommands["/"..submit].func(name, string.format("%s %s", gui_distance2[name], n))\r
290                         end\r
291                 end\r
292                 return true\r
293         end\r
294         return false\r
295 end)\r
296 \r
297 worldedit.register_gui_function("worldedit_gui_cylinder", {\r
298         name = "Cylinder",\r
299         privs = combine_we_privs({"hollowcylinder", "cylinder"}),\r
300         get_formspec = function(name)\r
301                 local node, axis, length = gui_nodename1[name], gui_axis1[name], gui_distance1[name]\r
302                 local radius1, radius2 = gui_distance2[name], gui_distance3[name]\r
303                 local nodename = worldedit.normalize_nodename(node)\r
304                 return "size[6.5,6]" .. worldedit.get_formspec_header("worldedit_gui_cylinder") ..\r
305                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_cylinder_node;Name;%s]", minetest.formspec_escape(node)) ..\r
306                         "button[4,1.18;1.5,0.8;worldedit_gui_cylinder_search;Search]" ..\r
307                         formspec_node("5.5,1.1", nodename) ..\r
308                         string.format("field[0.5,2.5;4,0.8;worldedit_gui_cylinder_length;Length;%s]", minetest.formspec_escape(length)) ..\r
309                         string.format("dropdown[4,2.18;2.5;worldedit_gui_cylinder_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
310                         string.format("field[0.5,3.5;2,0.8;worldedit_gui_cylinder_radius1;Base Radius;%s]", minetest.formspec_escape(radius1)) ..\r
311                         string.format("field[2.5,3.5;2,0.8;worldedit_gui_cylinder_radius2;Top Radius;%s]", minetest.formspec_escape(radius2)) ..\r
312                         "label[0.25,4;Equal base and top radius creates a cylinder,\n"..\r
313                                 "zero top radius creates a cone.\nConsult documentation for more information.]"..\r
314                         "button_exit[0,5.5;3,0.8;worldedit_gui_cylinder_submit_hollow;Hollow Cylinder]" ..\r
315                         "button_exit[3.5,5.5;3,0.8;worldedit_gui_cylinder_submit_solid;Solid Cylinder]"\r
316         end,\r
317 })\r
318 \r
319 worldedit.register_gui_handler("worldedit_gui_cylinder", function(name, fields)\r
320         if fields.worldedit_gui_cylinder_search\r
321         or fields.worldedit_gui_cylinder_submit_hollow or fields.worldedit_gui_cylinder_submit_solid then\r
322                 gui_nodename1[name] = tostring(fields.worldedit_gui_cylinder_node)\r
323                 gui_axis1[name] = axis_indices[fields.worldedit_gui_cylinder_axis]\r
324                 gui_distance1[name] = tostring(fields.worldedit_gui_cylinder_length)\r
325                 gui_distance2[name] = tostring(fields.worldedit_gui_cylinder_radius1)\r
326                 gui_distance3[name] = tostring(fields.worldedit_gui_cylinder_radius2)\r
327                 worldedit.show_page(name, "worldedit_gui_cylinder")\r
328 \r
329                 local submit = nil\r
330                 if fields.worldedit_gui_cylinder_submit_hollow then\r
331                         submit = "hollowcylinder"\r
332                 elseif fields.worldedit_gui_cylinder_submit_solid then\r
333                         submit = "cylinder"\r
334                 end\r
335                 if submit then\r
336                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
337                         if n then\r
338                                 local args = string.format("%s %s %s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], gui_distance2[name], gui_distance3[name], n)\r
339                                 minetest.chatcommands["/"..submit].func(name, args)\r
340                         end\r
341                 end\r
342                 return true\r
343         end\r
344         if fields.worldedit_gui_cylinder_axis then\r
345                 gui_axis1[name] = axis_indices[fields.worldedit_gui_cylinder_axis]\r
346                 worldedit.show_page(name, "worldedit_gui_cylinder")\r
347                 return true\r
348         end\r
349         return false\r
350 end)\r
351 \r
352 worldedit.register_gui_function("worldedit_gui_pyramid", {\r
353         name = "Pyramid",\r
354         privs = we_privs("pyramid"),\r
355         get_formspec = function(name)\r
356                 local node, axis, length = gui_nodename1[name], gui_axis1[name], gui_distance1[name]\r
357                 local nodename = worldedit.normalize_nodename(node)\r
358                 return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_pyramid") ..\r
359                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_pyramid_node;Name;%s]", minetest.formspec_escape(node)) ..\r
360                         "button[4,1.18;1.5,0.8;worldedit_gui_pyramid_search;Search]" ..\r
361                         formspec_node("5.5,1.1", nodename) ..\r
362                         string.format("field[0.5,2.5;4,0.8;worldedit_gui_pyramid_length;Length;%s]", minetest.formspec_escape(length)) ..\r
363                         string.format("dropdown[4,2.18;2.5;worldedit_gui_pyramid_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
364                         "button_exit[0,3.5;3,0.8;worldedit_gui_pyramid_submit_hollow;Hollow Pyramid]" ..\r
365                         "button_exit[3.5,3.5;3,0.8;worldedit_gui_pyramid_submit_solid;Solid Pyramid]"\r
366         end,\r
367 })\r
368 \r
369 worldedit.register_gui_handler("worldedit_gui_pyramid", function(name, fields)\r
370         if fields.worldedit_gui_pyramid_search or fields.worldedit_gui_pyramid_submit_solid or fields.worldedit_gui_pyramid_submit_hollow or fields.worldedit_gui_pyramid_axis then\r
371                 gui_nodename1[name] = tostring(fields.worldedit_gui_pyramid_node)\r
372                 gui_axis1[name] = axis_indices[fields.worldedit_gui_pyramid_axis]\r
373                 gui_distance1[name] = tostring(fields.worldedit_gui_pyramid_length)\r
374                 worldedit.show_page(name, "worldedit_gui_pyramid")\r
375 \r
376                 local submit = nil\r
377                 if fields.worldedit_gui_pyramid_submit_solid then\r
378                         submit = "pyramid"\r
379                 elseif fields.worldedit_gui_pyramid_submit_hollow then\r
380                         submit = "hollowpyramid"\r
381                 end\r
382                 if submit then\r
383                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
384                         if n then\r
385                                 minetest.chatcommands["/"..submit].func(name, string.format("%s %s %s", axis_values[gui_axis1[name]], gui_distance1[name], n))\r
386                         end\r
387                 end\r
388                 return true\r
389         end\r
390         if fields.worldedit_gui_pyramid_axis then\r
391                 gui_axis1[name] = axis_indices[fields.worldedit_gui_pyramid_axis]\r
392                 worldedit.show_page(name, "worldedit_gui_pyramid")\r
393                 return true\r
394         end\r
395         return false\r
396 end)\r
397 \r
398 worldedit.register_gui_function("worldedit_gui_spiral", {\r
399         name = "Spiral",\r
400         privs = we_privs("spiral"),\r
401         get_formspec = function(name)\r
402                 local node, length, height, space = gui_nodename1[name], gui_distance1[name], gui_distance2[name], gui_distance3[name]\r
403                 local nodename = worldedit.normalize_nodename(node)\r
404                 return "size[6.5,6]" .. worldedit.get_formspec_header("worldedit_gui_spiral") ..\r
405                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_spiral_node;Name;%s]", minetest.formspec_escape(node)) ..\r
406                         "button[4,1.18;1.5,0.8;worldedit_gui_spiral_search;Search]" ..\r
407                         formspec_node("5.5,1.1", nodename) ..\r
408                         string.format("field[0.5,2.5;4,0.8;worldedit_gui_spiral_length;Side Length;%s]", minetest.formspec_escape(length)) ..\r
409                         string.format("field[0.5,3.5;4,0.8;worldedit_gui_spiral_height;Height;%s]", minetest.formspec_escape(height)) ..\r
410                         string.format("field[0.5,4.5;4,0.8;worldedit_gui_spiral_space;Wall Spacing;%s]", minetest.formspec_escape(space)) ..\r
411                         "button_exit[0,5.5;3,0.8;worldedit_gui_spiral_submit;Spiral]"\r
412         end,\r
413 })\r
414 \r
415 worldedit.register_gui_handler("worldedit_gui_spiral", function(name, fields)\r
416         if fields.worldedit_gui_spiral_search or fields.worldedit_gui_spiral_submit then\r
417                 gui_nodename1[name] = fields.worldedit_gui_spiral_node\r
418                 gui_distance1[name] = tostring(fields.worldedit_gui_spiral_length)\r
419                 gui_distance2[name] = tostring(fields.worldedit_gui_spiral_height)\r
420                 gui_distance3[name] = tostring(fields.worldedit_gui_spiral_space)\r
421                 worldedit.show_page(name, "worldedit_gui_spiral")\r
422                 if fields.worldedit_gui_spiral_submit then\r
423                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
424                         if n then\r
425                                 minetest.chatcommands["/spiral"].func(name, string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n))\r
426                         end\r
427                 end\r
428                 return true\r
429         end\r
430         return false\r
431 end)\r
432 \r
433 worldedit.register_gui_function("worldedit_gui_copy_move", {\r
434         name = "Copy/Move",\r
435         privs = combine_we_privs({"copy", "move"}),\r
436         get_formspec = function(name)\r
437                 local axis = gui_axis1[name] or 4\r
438                 local amount = gui_distance1[name] or "10"\r
439                 return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_copy_move") ..\r
440                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_copy_move_amount;Amount;%s]", minetest.formspec_escape(amount)) ..\r
441                         string.format("dropdown[4,1.18;2.5;worldedit_gui_copy_move_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
442                         "button_exit[0,2.5;3,0.8;worldedit_gui_copy_move_copy;Copy Region]" ..\r
443                         "button_exit[3.5,2.5;3,0.8;worldedit_gui_copy_move_move;Move Region]"\r
444         end,\r
445 })\r
446 \r
447 worldedit.register_gui_handler("worldedit_gui_copy_move", function(name, fields)\r
448         if fields.worldedit_gui_copy_move_copy or fields.worldedit_gui_copy_move_move then\r
449                 gui_axis1[name] = axis_indices[fields.worldedit_gui_copy_move_axis] or 4\r
450                 gui_distance1[name] = tostring(fields.worldedit_gui_copy_move_amount)\r
451                 worldedit.show_page(name, "worldedit_gui_copy_move")\r
452                 if fields.worldedit_gui_copy_move_copy then\r
453                         minetest.chatcommands["/copy"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name]))\r
454                 else --fields.worldedit_gui_copy_move_move\r
455                         minetest.chatcommands["/move"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_distance1[name]))\r
456                 end\r
457                 return true\r
458         end\r
459         if fields.worldedit_gui_copy_move_axis then\r
460                 gui_axis1[name] = axis_indices[fields.worldedit_gui_copy_move_axis] or 4\r
461                 worldedit.show_page(name, "worldedit_gui_copy_move")\r
462                 return true\r
463         end\r
464         return false\r
465 end)\r
466 \r
467 worldedit.register_gui_function("worldedit_gui_stack", {\r
468         name = "Stack",\r
469         privs = we_privs("stack"),\r
470         get_formspec = function(name)\r
471                 local axis, count = gui_axis1[name], gui_count1[name]\r
472                 return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_stack") ..\r
473                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_stack_count;Count;%s]", minetest.formspec_escape(count)) ..\r
474                         string.format("dropdown[4,1.18;2.5;worldedit_gui_stack_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
475                         "button_exit[0,2.5;3,0.8;worldedit_gui_stack_submit;Stack]"\r
476         end,\r
477 })\r
478 \r
479 worldedit.register_gui_handler("worldedit_gui_stack", function(name, fields)\r
480         if fields.worldedit_gui_stack_submit then\r
481                 gui_axis1[name] = axis_indices[fields.worldedit_gui_stack_axis]\r
482                 gui_count1[name] = tostring(fields.worldedit_gui_stack_count)\r
483                 worldedit.show_page(name, "worldedit_gui_stack")\r
484                 minetest.chatcommands["/stack"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], gui_count1[name]))\r
485                 return true\r
486         end\r
487         if fields.worldedit_gui_stack_axis then\r
488                 gui_axis1[name] = axis_indices[fields.worldedit_gui_stack_axis]\r
489                 worldedit.show_page(name, "worldedit_gui_stack")\r
490                 return true\r
491         end\r
492         return false\r
493 end)\r
494 \r
495 worldedit.register_gui_function("worldedit_gui_stretch", {\r
496         name = "Stretch",\r
497         privs = we_privs("stretch"),\r
498         get_formspec = function(name)\r
499                 local stretchx, stretchy, stretchz = gui_count1[name], gui_count2[name], gui_count3[name]\r
500                 return "size[5,5]" .. worldedit.get_formspec_header("worldedit_gui_stretch") ..\r
501                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_stretch_x;Stretch X;%s]", minetest.formspec_escape(stretchx)) ..\r
502                         string.format("field[0.5,2.5;4,0.8;worldedit_gui_stretch_y;Stretch Y;%s]", minetest.formspec_escape(stretchy)) ..\r
503                         string.format("field[0.5,3.5;4,0.8;worldedit_gui_stretch_z;Stretch Z;%s]", minetest.formspec_escape(stretchz)) ..\r
504                         "button_exit[0,4.5;3,0.8;worldedit_gui_stretch_submit;Stretch]"\r
505         end,\r
506 })\r
507 \r
508 worldedit.register_gui_handler("worldedit_gui_stretch", function(name, fields)\r
509         if fields.worldedit_gui_stretch_submit then\r
510                 gui_count1[name] = tostring(fields.worldedit_gui_stretch_x)\r
511                 gui_count2[name] = tostring(fields.worldedit_gui_stretch_y)\r
512                 gui_count3[name] = tostring(fields.worldedit_gui_stretch_z)\r
513                 worldedit.show_page(name, "worldedit_gui_stretch")\r
514                 minetest.chatcommands["/stretch"].func(name, string.format("%s %s %s", gui_count1[name], gui_count2[name], gui_count3[name]))\r
515                 return true\r
516         end\r
517         return false\r
518 end)\r
519 \r
520 worldedit.register_gui_function("worldedit_gui_transpose", {\r
521         name = "Transpose",\r
522         privs = we_privs("transpose"),\r
523         get_formspec = function(name)\r
524                 local axis1, axis2 = gui_axis1[name], gui_axis2[name]\r
525                 return "size[5.5,3]" .. worldedit.get_formspec_header("worldedit_gui_transpose") ..\r
526                         string.format("dropdown[0,1;2.5;worldedit_gui_transpose_axis1;X axis,Y axis,Z axis,Look direction;%d]", axis1) ..\r
527                         string.format("dropdown[3,1;2.5;worldedit_gui_transpose_axis2;X axis,Y axis,Z axis,Look direction;%d]", axis2) ..\r
528                         "button_exit[0,2.5;3,0.8;worldedit_gui_transpose_submit;Transpose]"\r
529         end,\r
530 })\r
531 \r
532 worldedit.register_gui_handler("worldedit_gui_transpose", function(name, fields)\r
533         if fields.worldedit_gui_transpose_submit then\r
534                 gui_axis1[name] = axis_indices[fields.worldedit_gui_transpose_axis1]\r
535                 worldedit.show_page(name, "worldedit_gui_transpose")\r
536                 minetest.chatcommands["/transpose"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], axis_values[gui_axis2[name]]))\r
537                 return true\r
538         end\r
539         if fields.worldedit_gui_transpose_axis1 then\r
540                 gui_axis1[name] = axis_indices[fields.worldedit_gui_transpose_axis1]\r
541                 worldedit.show_page(name, "worldedit_gui_transpose")\r
542                 return true\r
543         end\r
544         if fields.worldedit_gui_transpose_axis2 then\r
545                 gui_axis2[name] = axis_indices[fields.worldedit_gui_transpose_axis2]\r
546                 worldedit.show_page(name, "worldedit_gui_transpose")\r
547                 return true\r
548         end\r
549         return false\r
550 end)\r
551 \r
552 worldedit.register_gui_function("worldedit_gui_flip", {\r
553         name = "Flip",\r
554         privs = we_privs("flip"),\r
555         get_formspec = function(name)\r
556                 local axis = gui_axis1[name]\r
557                 return "size[5,3]" .. worldedit.get_formspec_header("worldedit_gui_flip") ..\r
558                         string.format("dropdown[0,1;2.5;worldedit_gui_flip_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
559                         "button_exit[0,2.5;3,0.8;worldedit_gui_flip_submit;Flip]"\r
560         end,\r
561 })\r
562 \r
563 worldedit.register_gui_handler("worldedit_gui_flip", function(name, fields)\r
564         if fields.worldedit_gui_flip_submit then\r
565                 gui_axis1[name] = axis_indices[fields.worldedit_gui_flip_axis]\r
566                 worldedit.show_page(name, "worldedit_gui_flip")\r
567                 minetest.chatcommands["/flip"].func(name, axis_values[gui_axis1[name]])\r
568                 return true\r
569         end\r
570         if fields.worldedit_gui_flip_axis then\r
571                 gui_axis1[name] = axis_indices[fields.worldedit_gui_flip_axis]\r
572                 worldedit.show_page(name, "worldedit_gui_flip")\r
573                 return true\r
574         end\r
575         return false\r
576 end)\r
577 \r
578 worldedit.register_gui_function("worldedit_gui_rotate", {\r
579         name = "Rotate",\r
580         privs = we_privs("rotate"),\r
581         get_formspec = function(name)\r
582                 local axis, angle = gui_axis1[name], gui_angle[name]\r
583                 return "size[5.5,3]" .. worldedit.get_formspec_header("worldedit_gui_rotate") ..\r
584                         string.format("dropdown[0,1;2.5;worldedit_gui_rotate_angle;90 degrees,180 degrees,270 degrees;%s]", angle) ..\r
585                         string.format("dropdown[3,1;2.5;worldedit_gui_rotate_axis;X axis,Y axis,Z axis,Look direction;%d]", axis) ..\r
586                         "button_exit[0,2.5;3,0.8;worldedit_gui_rotate_submit;Rotate]"\r
587         end,\r
588 })\r
589 \r
590 worldedit.register_gui_handler("worldedit_gui_rotate", function(name, fields)\r
591         if fields.worldedit_gui_rotate_submit then\r
592                 gui_axis1[name] = axis_indices[fields.worldedit_gui_rotate_axis]\r
593                 gui_angle[name] = angle_indices[fields.worldedit_gui_rotate_angle]\r
594                 worldedit.show_page(name, "worldedit_gui_rotate")\r
595                 minetest.chatcommands["/rotate"].func(name, string.format("%s %s", axis_values[gui_axis1[name]], angle_values[gui_angle[name]]))\r
596                 return true\r
597         end\r
598         if fields.worldedit_gui_rotate_axis then\r
599                 gui_axis1[name] = axis_indices[fields.worldedit_gui_rotate_axis]\r
600                 worldedit.show_page(name, "worldedit_gui_rotate")\r
601                 return true\r
602         end\r
603         if fields.worldedit_gui_rotate_angle then\r
604                 gui_angle[name] = angle_indices[fields.worldedit_gui_rotate_angle]\r
605                 worldedit.show_page(name, "worldedit_gui_rotate")\r
606                 return true\r
607         end\r
608         return false\r
609 end)\r
610 \r
611 worldedit.register_gui_function("worldedit_gui_orient", {\r
612         name = "Orient",\r
613         privs = we_privs("orient"),\r
614         get_formspec = function(name)\r
615                 local angle = gui_angle[name]\r
616                 return "size[5,3]" .. worldedit.get_formspec_header("worldedit_gui_orient") ..\r
617                         string.format("dropdown[0,1;2.5;worldedit_gui_orient_angle;90 degrees,180 degrees,270 degrees;%s]", angle) ..\r
618                         "button_exit[0,2.5;3,0.8;worldedit_gui_orient_submit;Orient]"\r
619         end,\r
620 })\r
621 \r
622 worldedit.register_gui_handler("worldedit_gui_orient", function(name, fields)\r
623         if fields.worldedit_gui_orient_submit then\r
624                 gui_angle[name] = angle_indices[fields.worldedit_gui_orient_angle]\r
625                 worldedit.show_page(name, "worldedit_gui_orient")\r
626                 minetest.chatcommands["/orient"].func(name, tostring(angle_values[gui_angle[name]]))\r
627                 return true\r
628         end\r
629         if fields.worldedit_gui_orient_angle then\r
630                 gui_angle[name] = angle_indices[fields.worldedit_gui_orient_angle]\r
631                 worldedit.show_page(name, "worldedit_gui_orient")\r
632                 return true\r
633         end\r
634         return false\r
635 end)\r
636 \r
637 worldedit.register_gui_function("worldedit_gui_fixlight", {\r
638         name = "Fix Lighting",\r
639         privs = we_privs("fixlight"),\r
640         on_select = function(name)\r
641                 minetest.chatcommands["/fixlight"].func(name, "")\r
642         end,\r
643 })\r
644 \r
645 worldedit.register_gui_function("worldedit_gui_hide", {\r
646         name = "Hide Region",\r
647         privs = we_privs("hide"),\r
648         on_select = function(name)\r
649                 minetest.chatcommands["/hide"].func(name, "")\r
650         end,\r
651 })\r
652 \r
653 worldedit.register_gui_function("worldedit_gui_suppress", {\r
654         name = "Suppress Nodes",\r
655         privs = we_privs("suppress"),\r
656         get_formspec = function(name)\r
657                 local node = gui_nodename1[name]\r
658                 local nodename = worldedit.normalize_nodename(node)\r
659                 return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_suppress") ..\r
660                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_suppress_node;Name;%s]", minetest.formspec_escape(node)) ..\r
661                         "button[4,1.18;1.5,0.8;worldedit_gui_suppress_search;Search]" ..\r
662                         formspec_node("5.5,1.1", nodename) ..\r
663                         "button_exit[0,2.5;3,0.8;worldedit_gui_suppress_submit;Suppress Nodes]"\r
664         end,\r
665 })\r
666 \r
667 worldedit.register_gui_handler("worldedit_gui_suppress", function(name, fields)\r
668         if fields.worldedit_gui_suppress_search or fields.worldedit_gui_suppress_submit then\r
669                 gui_nodename1[name] = tostring(fields.worldedit_gui_suppress_node)\r
670                 worldedit.show_page(name, "worldedit_gui_suppress")\r
671                 if fields.worldedit_gui_suppress_submit then\r
672                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
673                         if n then\r
674                                 minetest.chatcommands["/suppress"].func(name, n)\r
675                         end\r
676                 end\r
677                 return true\r
678         end\r
679         return false\r
680 end)\r
681 \r
682 worldedit.register_gui_function("worldedit_gui_highlight", {\r
683         name = "Highlight Nodes",\r
684         privs = we_privs("highlight"),\r
685         get_formspec = function(name)\r
686                 local node = gui_nodename1[name]\r
687                 local nodename = worldedit.normalize_nodename(node)\r
688                 return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_highlight") ..\r
689                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_highlight_node;Name;%s]", minetest.formspec_escape(node)) ..\r
690                         "button[4,1.18;1.5,0.8;worldedit_gui_highlight_search;Search]" ..\r
691                         formspec_node("5.5,1.1", nodename) ..\r
692                         "button_exit[0,2.5;3,0.8;worldedit_gui_highlight_submit;Highlight Nodes]"\r
693         end,\r
694 })\r
695 \r
696 worldedit.register_gui_handler("worldedit_gui_highlight", function(name, fields)\r
697         if fields.worldedit_gui_highlight_search or fields.worldedit_gui_highlight_submit then\r
698                 gui_nodename1[name] = tostring(fields.worldedit_gui_highlight_node)\r
699                 worldedit.show_page(name, "worldedit_gui_highlight")\r
700                 if fields.worldedit_gui_highlight_submit then\r
701                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
702                         if n then\r
703                                 minetest.chatcommands["/highlight"].func(name, n)\r
704                         end\r
705                 end\r
706                 return true\r
707         end\r
708         return false\r
709 end)\r
710 \r
711 worldedit.register_gui_function("worldedit_gui_restore", {\r
712         name = "Restore Region",\r
713         privs = we_privs("restore"),\r
714         on_select = function(name)\r
715                 minetest.chatcommands["/restore"].func(name, "")\r
716         end,\r
717 })\r
718 \r
719 worldedit.register_gui_function("worldedit_gui_save_load", {\r
720         name = "Save/Load",\r
721         privs = combine_we_privs({"save", "allocate", "load"}),\r
722         get_formspec = function(name)\r
723                 local filename = gui_filename[name]\r
724                 return "size[6,4]" .. worldedit.get_formspec_header("worldedit_gui_save_load") ..\r
725                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_save_filename;Filename;%s]", minetest.formspec_escape(filename)) ..\r
726                         "button_exit[0,2.5;3,0.8;worldedit_gui_save_load_submit_save;Save]" ..\r
727                         "button_exit[3,2.5;3,0.8;worldedit_gui_save_load_submit_allocate;Allocate]" ..\r
728                         "button_exit[0,3.5;3,0.8;worldedit_gui_save_load_submit_load;Load]"\r
729         end,\r
730 })\r
731 \r
732 worldedit.register_gui_handler("worldedit_gui_save_load", function(name, fields)\r
733         if fields.worldedit_gui_save_load_submit_save or fields.worldedit_gui_save_load_submit_allocate or fields.worldedit_gui_save_load_submit_load then\r
734                 gui_filename[name] = tostring(fields.worldedit_gui_save_filename)\r
735                 worldedit.show_page(name, "worldedit_gui_save_load")\r
736                 if fields.worldedit_gui_save_load_submit_save then\r
737                         minetest.chatcommands["/save"].func(name, gui_filename[name])\r
738                 elseif fields.worldedit_gui_save_load_submit_allocate then\r
739                         minetest.chatcommands["/allocate"].func(name, gui_filename[name])\r
740                 else --fields.worldedit_gui_save_load_submit_load\r
741                         minetest.chatcommands["/load"].func(name, gui_filename[name])\r
742                 end\r
743                 return true\r
744         end\r
745         return false\r
746 end)\r
747 \r
748 worldedit.register_gui_function("worldedit_gui_cube", {\r
749         name = "Cuboid", -- technically the command is misnamed, I know...\r
750         privs = combine_we_privs({"hollowcube", "cube"}),\r
751         get_formspec = function(name)\r
752                 local width, height, length = gui_distance1[name], gui_distance2[name], gui_distance3[name]\r
753                 local node = gui_nodename1[name]\r
754                 local nodename = worldedit.normalize_nodename(node)\r
755                 return "size[6.5,4]" .. worldedit.get_formspec_header("worldedit_gui_cube") ..\r
756                         string.format("field[0.5,1.5;4,0.8;worldedit_gui_cube_node;Name;%s]", minetest.formspec_escape(node)) ..\r
757                         "button[4,1.18;1.5,0.8;worldedit_gui_cube_search;Search]" ..\r
758                         formspec_node("5.5,1.1", nodename) ..\r
759                         string.format("field[0.5,2.5;1,0.8;worldedit_gui_cube_width;Width;%s]", minetest.formspec_escape(width)) ..\r
760                         string.format("field[1.5,2.5;1,0.8;worldedit_gui_cube_height;Height;%s]", minetest.formspec_escape(height)) ..\r
761                         string.format("field[2.5,2.5;1,0.8;worldedit_gui_cube_length;Length;%s]", minetest.formspec_escape(length)) ..\r
762                         "button_exit[0,3.5;3,0.8;worldedit_gui_cube_submit_hollow;Hollow Cuboid]" ..\r
763                         "button_exit[3.5,3.5;3,0.8;worldedit_gui_cube_submit_solid;Solid Cuboid]"\r
764         end,\r
765 })\r
766 \r
767 worldedit.register_gui_handler("worldedit_gui_cube", function(name, fields)\r
768         if fields.worldedit_gui_cube_search\r
769         or fields.worldedit_gui_cube_submit_hollow or fields.worldedit_gui_cube_submit_solid then\r
770                 gui_nodename1[name] = tostring(fields.worldedit_gui_cube_node)\r
771                 gui_distance1[name] = tostring(fields.worldedit_gui_cube_width)\r
772                 gui_distance2[name] = tostring(fields.worldedit_gui_cube_height)\r
773                 gui_distance3[name] = tostring(fields.worldedit_gui_cube_length)\r
774                 worldedit.show_page(name, "worldedit_gui_cube")\r
775 \r
776                 local submit = nil\r
777                 if fields.worldedit_gui_cube_submit_hollow then\r
778                         submit = "hollowcube"\r
779                 elseif fields.worldedit_gui_cube_submit_solid then\r
780                         submit = "cube"\r
781                 end\r
782                 if submit then\r
783                         local n = worldedit.normalize_nodename(gui_nodename1[name])\r
784                         if n then\r
785                                 local args = string.format("%s %s %s %s", gui_distance1[name], gui_distance2[name], gui_distance3[name], n)\r
786                                 minetest.chatcommands["/"..submit].func(name, args)\r
787                         end\r
788                 end\r
789                 return true\r
790         end\r
791         return false\r
792 end)\r
793 \r
794 worldedit.register_gui_function("worldedit_gui_clearobjects", {\r
795         name = "Clear Objects",\r
796         privs = we_privs("clearobjects"),\r
797         on_select = function(name)\r
798                 minetest.chatcommands["/clearobjects"].func(name, "")\r
799         end,\r
800 })\r