@@ -194,56 +194,57 @@ minetest.register_chatcommand("ctf_barrier", {
194
194
" use /ctf_barrier remove_buildtime to remove unwanted parts" ))
195
195
end
196
196
197
+ local vm = minetest .get_voxel_manip ()
198
+ local emin , emax = vm :read_from_map (pos1 , pos2 )
199
+ local a = VoxelArea :new {
200
+ MinEdge = emin ,
201
+ MaxEdge = emax
202
+ }
203
+ local data = vm :get_data ()
204
+
197
205
for x = pos1 .x , pos2 .x do
198
206
for y = pos1 .y , pos2 .y do
199
207
for z = pos1 .z , pos2 .z do
208
+ local vi = a :index (x , y , z )
200
209
if params == " place_buildtime" then
201
- local current_pos = {x = x , y = y , z = z }
202
- local current_node = minetest .get_node_or_nil (current_pos )
203
- if current_node then
204
- if current_node .name == " air" then
205
- minetest .set_node (current_pos , {name = " ctf_map:ind_glass_red" })
206
- elseif current_node .name == " default:stone" then
207
- minetest .set_node (current_pos , {name = " ctf_map:ind_stone_red" })
208
- elseif current_node .name == " default:water_source" then
209
- minetest .set_node (current_pos , {name = " ctf_map:ind_water" })
210
- elseif current_node .name == " default:lava_source" then
211
- minetest .set_node (current_pos , {name = " ctf_map:ind_lava" })
212
- end
210
+ if data [vi ] == minetest .get_content_id (" air" ) then
211
+ data [vi ] = minetest .get_content_id (" ctf_map:ind_glass_red" )
212
+ elseif data [vi ] == minetest .get_content_id (" default:stone" ) then
213
+ data [vi ] = minetest .get_content_id (" ctf_map:ind_stone_red" )
214
+ elseif data [vi ] == minetest .get_content_id (" default:water_source" ) then
215
+ data [vi ] = minetest .get_content_id (" ctf_map:ind_water" )
216
+ elseif data [vi ] == minetest .get_content_id (" default:lava_source" ) then
217
+ data [vi ] = minetest .get_content_id (" ctf_map:ind_lava" )
213
218
end
214
219
elseif params == " remove_buildtime" then
215
- local current_pos = {x = x , y = y , z = z }
216
- local current_node = minetest .get_node_or_nil (current_pos )
217
- if current_node then
218
- if current_node .name == " ctf_map:ind_glass_red" then
219
- minetest .set_node (current_pos , {name = " air" })
220
- elseif current_node .name == " ctf_map:ind_stone_red" then
221
- minetest .set_node (current_pos , {name = " default:stone" })
222
- elseif current_node .name == " ctf_map:ind_water" then
223
- minetest .set_node (current_pos , {name = " default:water_source" })
224
- elseif current_node .name == " ctf_map:ind_lava" then
225
- minetest .set_node (current_pos , {name = " default:lava_source" })
226
- end
220
+ if data [vi ] == minetest .get_content_id (" ctf_map:ind_glass_red" ) then
221
+ data [vi ] = minetest .get_content_id (" air" )
222
+ elseif data [vi ] == minetest .get_content_id (" ctf_map:ind_stone_red" ) then
223
+ data [vi ] = minetest .get_content_id (" default:stone" )
224
+ elseif data [vi ] == minetest .get_content_id (" ctf_map:ind_water" ) then
225
+ data [vi ] = minetest .get_content_id (" default:water_source" )
226
+ elseif data [vi ] == minetest .get_content_id (" ctf_map:ind_lava" ) then
227
+ data [vi ] = minetest .get_content_id (" default:lava_source" )
227
228
end
228
229
elseif params == " place_outer" then
229
- local current_pos = {x = x , y = y , z = z }
230
230
if x == pos1 .x or x == pos2 .x or y == pos1 .y
231
231
or z == pos1 .z or z == pos2 .z then
232
- local current_node = minetest .get_node_or_nil (current_pos )
233
- if current_node then
234
- if current_node .name == " air" or
235
- current_node .name == " ctf_map:ignore" or
236
- current_node .name == " ignore" then
237
- minetest .set_node (current_pos , {name = " ctf_map:ind_glass" })
238
- else
239
- minetest .set_node (current_pos , {name = " ctf_map:stone" })
240
- end
232
+ if data [vi ] == minetest .get_content_id (" air" ) or
233
+ data [vi ] == minetest .get_content_id (" ignore" ) or
234
+ data [vi ] == minetest .get_content_id (" ctf_map:ignore" ) then
235
+ data [vi ] = minetest .get_content_id (" ctf_map:ind_glass" )
236
+ else
237
+ data [vi ] = minetest .get_content_id (" ctf_map:stone" )
241
238
end
242
239
end
243
240
end
244
241
end
245
242
end
246
243
end
244
+
245
+ vm :set_data (data )
246
+ vm :write_to_map (true )
247
+
247
248
local message =
248
249
(params == " place_buildtime" and " Build-time barrier placed" ) or
249
250
(params == " remove_buildtime" and " Build-time barrier removed" ) or
0 commit comments