1
- -- saved state per player
1
+ -- saved state for each player
2
2
local gui_nodename1 = {}
3
3
local gui_nodename2 = {}
4
4
local gui_radius = {}
5
+ local gui_axis = {}
6
+ local gui_length = {}
5
7
local gui_formspec = {}
6
8
7
9
local register_gui_chatcommand = function (identifier , name , command , callback )
@@ -26,12 +28,23 @@ register_gui_chatcommand("worldedit_gui_unmark", "Unmark Region", "/unmark")
26
28
worldedit .register_gui_function (" worldedit_gui_p" , {
27
29
name = " Get/Set Positions" , privs = minetest .chatcommands [" /p" ].privs ,
28
30
get_formspec = function (name )
29
- return " size[9,2.5]" .. worldedit .get_formspec_header (" worldedit_gui_p" ) ..
31
+ local pos1 , pos2 = worldedit .pos1 [name ], worldedit .pos2 [name ]
32
+ return " size[9,6]" .. worldedit .get_formspec_header (" worldedit_gui_p" ) ..
30
33
" button_exit[0,1;3,0.8;worldedit_gui_p_get;Get Positions]" ..
31
- " button_exit[3,1;3,0.8;worldedit_gui_p_set1;Set Position 1]" ..
32
- " button_exit[6,1;3,0.8;worldedit_gui_p_set2;Set Position 2]" ..
34
+ " button_exit[3,1;3,0.8;worldedit_gui_p_set1;Choose Position 1]" ..
35
+ " button_exit[6,1;3,0.8;worldedit_gui_p_set2;Choose Position 2]" ..
33
36
" button_exit[0,2;3,0.8;worldedit_gui_pos1;Position 1 Here]" ..
34
- " button_exit[3,2;3,0.8;worldedit_gui_pos2;Position 2 Here]"
37
+ " button_exit[3,2;3,0.8;worldedit_gui_pos2;Position 2 Here]" ..
38
+ " label[0,3.7;Position 1]" ..
39
+ string.format (" field[2,4;1.5,0.8;worldedit_gui_fixedpos_pos1x;X ;%s]" , pos1 and pos1 .x or " " ) ..
40
+ string.format (" field[3.5,4;1.5,0.8;worldedit_gui_fixedpos_pos1y;Y ;%s]" , pos1 and pos1 .y or " " ) ..
41
+ string.format (" field[5,4;1.5,0.8;worldedit_gui_fixedpos_pos1z;Z ;%s]" , pos1 and pos1 .z or " " ) ..
42
+ " button_exit[6.5,3.68;2.5,0.8;worldedit_gui_fixed_pos1_submit;Set Position 1]" ..
43
+ " label[0,5.2;Position 2]" ..
44
+ string.format (" field[2,5.5;1.5,0.8;worldedit_gui_fixedpos_pos2x;X ;%s]" , pos2 and pos2 .x or " " ) ..
45
+ string.format (" field[3.5,5.5;1.5,0.8;worldedit_gui_fixedpos_pos2y;Y ;%s]" , pos2 and pos2 .y or " " ) ..
46
+ string.format (" field[5,5.5;1.5,0.8;worldedit_gui_fixedpos_pos2z;Z ;%s]" , pos2 and pos2 .z or " " ) ..
47
+ " button_exit[6.5,5.18;2.5,0.8;worldedit_gui_fixed_pos2_submit;Set Position 2]"
35
48
end ,
36
49
})
37
50
@@ -47,42 +60,25 @@ worldedit.register_gui_handler("worldedit_gui_p", function(name, fields)
47
60
return true
48
61
elseif fields .worldedit_gui_pos1 then
49
62
minetest .chatcommands [" /pos1" ].func (name , " " )
63
+ worldedit .show_page (name , " worldedit_gui_p" )
50
64
return true
51
65
elseif fields .worldedit_gui_pos2 then
52
66
minetest .chatcommands [" /pos2" ].func (name , " " )
67
+ worldedit .show_page (name , " worldedit_gui_p" )
53
68
return true
54
- end
55
- return false
56
- end )
57
-
58
- worldedit .register_gui_function (" worldedit_gui_fixedpos" , { -- wip: combine this with get/set positions
59
- name = " Fixed Positions" , privs = minetest .chatcommands [" /fixedpos" ].privs ,
60
- get_formspec = function (name )
61
- local pos1 , pos2 = worldedit .pos1 [name ], worldedit .pos2 [name ]
62
- return " size[6.5,4]" .. worldedit .get_formspec_header (" worldedit_gui_fixedpos" ) ..
63
- " label[0,1.2;Position 1]" ..
64
- string.format (" field[2,1.5;1.5,0.8;worldedit_gui_fixedpos_pos1x;Axis X;%s]" , pos1 and pos1 .x or " " ) ..
65
- string.format (" field[3.5,1.5;1.5,0.8;worldedit_gui_fixedpos_pos1y;Axis Y;%s]" , pos1 and pos1 .y or " " ) ..
66
- string.format (" field[5,1.5;1.5,0.8;worldedit_gui_fixedpos_pos1z;Axis Z;%s]" , pos1 and pos1 .z or " " ) ..
67
- " label[0,2.2;Position 2]" ..
68
- string.format (" field[2,2.5;1.5,0.8;worldedit_gui_fixedpos_pos2x;Axis X;%s]" , pos2 and pos2 .x or " " ) ..
69
- string.format (" field[3.5,2.5;1.5,0.8;worldedit_gui_fixedpos_pos2y;Axis Y;%s]" , pos2 and pos2 .y or " " ) ..
70
- string.format (" field[5,2.5;1.5,0.8;worldedit_gui_fixedpos_pos2z;Axis Z;%s]" , pos2 and pos2 .z or " " ) ..
71
- " button_exit[0,3.5;3,0.8;worldedit_gui_fixedpos_submit;Set Positions]"
72
- end
73
- })
74
-
75
- worldedit .register_gui_handler (" worldedit_gui_fixedpos" , function (name , fields )
76
- if fields .worldedit_gui_fixedpos_submit then
77
- local x1 , y1 , z1 = tonumber (fields .worldedit_gui_fixedpos_pos1x ), tonumber (fields .worldedit_gui_fixedpos_pos1y ), tonumber (fields .worldedit_gui_fixedpos_pos1z )
78
- if x1 and y1 and z1 then
79
- minetest .chatcommands [" /fixedpos" ].func (name , string.format (" set1 %d %d %d" , x1 , y1 , z1 ))
80
- end
81
- local x2 , y2 , z2 = tonumber (fields .worldedit_gui_fixedpos_pos2x ), tonumber (fields .worldedit_gui_fixedpos_pos2y ), tonumber (fields .worldedit_gui_fixedpos_pos2z )
82
- if x2 and y2 and z2 then
83
- minetest .chatcommands [" /fixedpos" ].func (name , string.format (" set2 %d %d %d" , x2 , y2 , z2 ))
84
- end
85
- worldedit .show_page (name , " worldedit_gui_fixedpos" )
69
+ elseif fields .worldedit_gui_fixedpos_pos1_submit then
70
+ minetest .chatcommands [" /fixedpos" ].func (name , string.format (" set1 %s %s %s" ,
71
+ tostring (fields .worldedit_gui_fixedpos_pos1x ),
72
+ tostring (fields .worldedit_gui_fixedpos_pos1y ),
73
+ tostring (fields .worldedit_gui_fixedpos_pos1z )))
74
+ worldedit .show_page (name , " worldedit_gui_p" )
75
+ return true
76
+ elseif fields .worldedit_gui_fixedpos_pos2_submit then
77
+ minetest .chatcommands [" /fixedpos" ].func (name , string.format (" set2 %s %s %s" ,
78
+ tostring (fields .worldedit_gui_fixedpos_pos2x ),
79
+ tostring (fields .worldedit_gui_fixedpos_pos2y ),
80
+ tostring (fields .worldedit_gui_fixedpos_pos2z )))
81
+ worldedit .show_page (name , " worldedit_gui_p" )
86
82
return true
87
83
end
88
84
return false
@@ -93,10 +89,10 @@ register_gui_chatcommand("worldedit_gui_volume", "Region Volume", "/volume")
93
89
worldedit .register_gui_function (" worldedit_gui_set" , {
94
90
name = " Set Nodes" , privs = minetest .chatcommands [" /set" ].privs ,
95
91
get_formspec = function (name )
96
- local value = gui_nodename1 [name ] or " Cobblestone"
97
- local nodename = worldedit .normalize_nodename (value )
92
+ local node = gui_nodename1 [name ] or " Cobblestone"
93
+ local nodename = worldedit .normalize_nodename (node )
98
94
return " size[6.5,3]" .. worldedit .get_formspec_header (" worldedit_gui_set" ) ..
99
- string.format (" field[0.5,1.5;4,0.8;worldedit_gui_set_node;Name;%s]" , minetest .formspec_escape (value )) ..
95
+ string.format (" field[0.5,1.5;4,0.8;worldedit_gui_set_node;Name;%s]" , minetest .formspec_escape (node )) ..
100
96
" button[4,1.18;1.5,0.8;worldedit_gui_set_search;Search]" ..
101
97
(nodename and string.format (" item_image[5.5,1.1;1,1;%s]" , nodename )
102
98
or " image[5.5,1.1;1,1;unknown_node.png]" ) ..
@@ -106,11 +102,11 @@ worldedit.register_gui_function("worldedit_gui_set", {
106
102
107
103
worldedit .register_gui_handler (" worldedit_gui_set" , function (name , fields )
108
104
if fields .worldedit_gui_set_search then
109
- gui_nodename1 [name ] = fields .worldedit_gui_set_node
105
+ gui_nodename1 [name ] = tostring ( fields .worldedit_gui_set_node )
110
106
worldedit .show_page (name , " worldedit_gui_set" )
111
107
return true
112
108
elseif fields .worldedit_gui_set_submit then
113
- gui_nodename1 [name ] = fields .worldedit_gui_set_node
109
+ gui_nodename1 [name ] = tostring ( fields .worldedit_gui_set_node )
114
110
worldedit .show_page (name , " worldedit_gui_set" )
115
111
minetest .chatcommands [" /set" ].func (name , gui_nodename1 [name ])
116
112
return true
@@ -141,16 +137,16 @@ worldedit.register_gui_function("worldedit_gui_replace", {
141
137
142
138
worldedit .register_gui_handler (" worldedit_gui_replace" , function (name , fields )
143
139
if fields .worldedit_gui_replace_search_search then
144
- gui_nodename1 [name ] = fields .worldedit_gui_replace_search
140
+ gui_nodename1 [name ] = tostring ( fields .worldedit_gui_replace_search )
145
141
worldedit .show_page (name , " worldedit_gui_replace" )
146
142
return true
147
143
elseif fields .worldedit_gui_replace_replace_search then
148
- gui_nodename2 [name ] = fields .worldedit_gui_replace_replace
144
+ gui_nodename2 [name ] = tostring ( fields .worldedit_gui_replace_replace )
149
145
worldedit .show_page (name , " worldedit_gui_replace" )
150
146
return true
151
147
elseif fields .worldedit_gui_replace_submit or fields .worldedit_gui_replace_submit_inverse then
152
- gui_nodename1 [name ] = fields .worldedit_gui_replace_search
153
- gui_nodename2 [name ] = fields .worldedit_gui_replace_replace
148
+ gui_nodename1 [name ] = tostring ( fields .worldedit_gui_replace_search )
149
+ gui_nodename2 [name ] = tostring ( fields .worldedit_gui_replace_replace )
154
150
worldedit .show_page (name , " worldedit_gui_replace" )
155
151
if fields .worldedit_gui_replace_submit then
156
152
minetest .chatcommands [" /replace" ].func (name , string.format (" %s %s" , gui_nodename1 [name ], gui_nodename2 [name ]))
@@ -165,11 +161,11 @@ end)
165
161
worldedit .register_gui_function (" worldedit_gui_sphere_dome" , {
166
162
name = " Sphere/Dome" , privs = minetest .chatcommands [" /sphere" ].privs ,
167
163
get_formspec = function (name )
168
- local value = gui_nodename1 [name ] or " Cobblestone"
164
+ local node = gui_nodename1 [name ] or " Cobblestone"
169
165
local radius = gui_radius [name ] or " 5"
170
- local nodename = worldedit .normalize_nodename (value )
166
+ local nodename = worldedit .normalize_nodename (node )
171
167
return " size[6.5,5]" .. worldedit .get_formspec_header (" worldedit_gui_sphere_dome" ) ..
172
- string.format (" field[0.5,1.5;4,0.8;worldedit_gui_sphere_dome_node;Name;%s]" , minetest .formspec_escape (value )) ..
168
+ string.format (" field[0.5,1.5;4,0.8;worldedit_gui_sphere_dome_node;Name;%s]" , minetest .formspec_escape (node )) ..
173
169
" button[4,1.18;1.5,0.8;worldedit_gui_sphere_dome_search;Search]" ..
174
170
(nodename and string.format (" item_image[5.5,1.1;1,1;%s]" , nodename )
175
171
or " image[5.5,1.1;1,1;unknown_node.png]" ) ..
@@ -183,13 +179,13 @@ worldedit.register_gui_function("worldedit_gui_sphere_dome", {
183
179
184
180
worldedit .register_gui_handler (" worldedit_gui_sphere_dome" , function (name , fields )
185
181
if fields .worldedit_gui_sphere_dome_search then
186
- gui_nodename1 [name ] = fields .worldedit_gui_sphere_dome_node
182
+ gui_nodename1 [name ] = tostring ( fields .worldedit_gui_sphere_dome_node )
187
183
worldedit .show_page (name , " worldedit_gui_sphere_dome" )
188
184
return true
189
185
elseif fields .worldedit_gui_sphere_dome_submit_hollow or fields .worldedit_gui_sphere_dome_submit_solid
190
186
or fields .worldedit_gui_sphere_dome_submit_hollow_dome or fields .worldedit_gui_sphere_dome_submit_solid_dome then
191
- gui_nodename1 [name ] = fields .worldedit_gui_sphere_dome_node
192
- gui_radius [name ] = fields .worldedit_gui_sphere_dome_radius
187
+ gui_nodename1 [name ] = tostring ( fields .worldedit_gui_sphere_dome_node )
188
+ gui_radius [name ] = tostring ( fields .worldedit_gui_sphere_dome_radius )
193
189
worldedit .show_page (name , " worldedit_gui_sphere_dome" )
194
190
if fields .worldedit_gui_sphere_dome_submit_hollow then
195
191
minetest .chatcommands [" /hollowsphere" ].func (name , string.format (" %s %s" , gui_radius [name ], gui_nodename1 [name ]))
@@ -205,6 +201,51 @@ worldedit.register_gui_handler("worldedit_gui_sphere_dome", function(name, field
205
201
return false
206
202
end )
207
203
204
+ worldedit .register_gui_function (" worldedit_gui_cylinder" , {
205
+ name = " Cylinder" , privs = minetest .chatcommands [" /cylinder" ].privs ,
206
+ get_formspec = function (name )
207
+ local node = gui_nodename1 [name ] or " Cobblestone"
208
+ local axis = gui_axis [name ] or 4
209
+ local length = gui_length [name ] or " 10"
210
+ local radius = gui_radius [name ] or " 5"
211
+ local nodename = worldedit .normalize_nodename (node )
212
+ return " size[6.5,5]" .. worldedit .get_formspec_header (" worldedit_gui_cylinder" ) ..
213
+ string.format (" field[0.5,1.5;4,0.8;worldedit_gui_cylinder_node;Name;%s]" , minetest .formspec_escape (node )) ..
214
+ " button[4,1.18;1.5,0.8;worldedit_gui_cylinder_search;Search]" ..
215
+ (nodename and string.format (" item_image[5.5,1.1;1,1;%s]" , nodename )
216
+ or " image[5.5,1.1;1,1;unknown_node.png]" ) ..
217
+ string.format (" field[0.5,2.5;4,0.8;worldedit_gui_cylinder_length;Length;%s]" , minetest .formspec_escape (length )) ..
218
+ string.format (" dropdown[4,2.18;2.5;worldedit_gui_cylinder_axis;X axis,Y axis,Z axis,Look direction;%d]" , axis ) ..
219
+ string.format (" field[0.5,3.5;4,0.8;worldedit_gui_cylinder_radius;Radius;%s]" , minetest .formspec_escape (radius )) ..
220
+ " button_exit[0,4.5;3,0.8;worldedit_gui_cylinder_submit_hollow;Hollow Cylinder]" ..
221
+ " button_exit[3.5,4.5;3,0.8;worldedit_gui_cylinder_submit_solid;Solid Cylinder]"
222
+ end ,
223
+ })
224
+
225
+ local axis_indices = {[" X axis" ]= 1 , [" Y axis" ]= 2 , [" Z axis" ]= 3 , [" Look direction" ]= 4 }
226
+ local axis_values = {" x" , " y" , " z" , " ?" }
227
+
228
+ worldedit .register_gui_handler (" worldedit_gui_cylinder" , function (name , fields )
229
+ if fields .worldedit_gui_cylinder_search then
230
+ gui_nodename1 [name ] = fields .worldedit_gui_cylinder_node
231
+ worldedit .show_page (name , " worldedit_gui_cylinder" )
232
+ return true
233
+ elseif fields .worldedit_gui_cylinder_submit_hollow or fields .worldedit_gui_cylinder_submit_solid then
234
+ gui_nodename1 [name ] = tostring (fields .worldedit_gui_cylinder_node )
235
+ gui_axis [name ] = axis_indices [fields .worldedit_gui_cylinder_axis ] or 4
236
+ gui_length [name ] = tostring (fields .worldedit_gui_cylinder_length )
237
+ gui_radius [name ] = tostring (fields .worldedit_gui_cylinder_radius )
238
+ worldedit .show_page (name , " worldedit_gui_cylinder" )
239
+ if fields .worldedit_gui_cylinder_submit_hollow then
240
+ minetest .chatcommands [" /hollowcylinder" ].func (name , string.format (" %s %s %s %s" , axis_values [gui_axis [name ]], gui_length [name ], gui_radius [name ], gui_nodename1 [name ]))
241
+ else -- fields.worldedit_gui_cylinder_submit_solid
242
+ minetest .chatcommands [" /cylinder" ].func (name , string.format (" %s %s %s %s" , axis_values [gui_axis [name ]], gui_length [name ], gui_radius [name ], gui_nodename1 [name ]))
243
+ end
244
+ return true
245
+ end
246
+ return false
247
+ end )
248
+
208
249
worldedit .register_gui_function (" worldedit_gui_formspec_tester" , {
209
250
name = " Formspec Tester" ,
210
251
get_formspec = function (name )
0 commit comments