Skip to content

Commit 18819cd

Browse files
a-blobLoneWolfHT
andauthored
Use voxel manip for barrier placing commands (#1265)
* Use Voxel Manip * Maybe this makes the code cleaner? --------- Co-authored-by: LoneWolfHT <[email protected]>
1 parent 6cb13ad commit 18819cd

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

mods/ctf/ctf_map/init.lua

+35-34
Original file line numberDiff line numberDiff line change
@@ -194,56 +194,57 @@ minetest.register_chatcommand("ctf_barrier", {
194194
"use /ctf_barrier remove_buildtime to remove unwanted parts"))
195195
end
196196

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+
197205
for x = pos1.x, pos2.x do
198206
for y = pos1.y, pos2.y do
199207
for z = pos1.z, pos2.z do
208+
local vi = a:index(x, y, z)
200209
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")
213218
end
214219
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")
227228
end
228229
elseif params == "place_outer" then
229-
local current_pos = {x = x, y = y, z = z}
230230
if x == pos1.x or x == pos2.x or y == pos1.y
231231
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")
241238
end
242239
end
243240
end
244241
end
245242
end
246243
end
244+
245+
vm:set_data(data)
246+
vm:write_to_map(true)
247+
247248
local message =
248249
(params == "place_buildtime" and "Build-time barrier placed") or
249250
(params == "remove_buildtime" and "Build-time barrier removed") or

0 commit comments

Comments
 (0)