Skip to content

Commit

Permalink
Use voxel manip for barrier placing commands (#1265)
Browse files Browse the repository at this point in the history
* Use Voxel Manip

* Maybe this makes the code cleaner?

---------

Co-authored-by: LoneWolfHT <[email protected]>
  • Loading branch information
a-blob and LoneWolfHT authored Jun 29, 2024
1 parent 6cb13ad commit 18819cd
Showing 1 changed file with 35 additions and 34 deletions.
69 changes: 35 additions & 34 deletions mods/ctf/ctf_map/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -194,56 +194,57 @@ minetest.register_chatcommand("ctf_barrier", {
"use /ctf_barrier remove_buildtime to remove unwanted parts"))
end

local vm = minetest.get_voxel_manip()
local emin, emax = vm:read_from_map(pos1, pos2)
local a = VoxelArea:new{
MinEdge = emin,
MaxEdge = emax
}
local data = vm:get_data()

for x = pos1.x, pos2.x do
for y = pos1.y, pos2.y do
for z = pos1.z, pos2.z do
local vi = a:index(x, y, z)
if params == "place_buildtime" then
local current_pos = {x = x, y = y, z = z}
local current_node = minetest.get_node_or_nil(current_pos)
if current_node then
if current_node.name == "air" then
minetest.set_node(current_pos, {name = "ctf_map:ind_glass_red"})
elseif current_node.name == "default:stone" then
minetest.set_node(current_pos, {name = "ctf_map:ind_stone_red"})
elseif current_node.name == "default:water_source" then
minetest.set_node(current_pos, {name = "ctf_map:ind_water"})
elseif current_node.name == "default:lava_source" then
minetest.set_node(current_pos, {name = "ctf_map:ind_lava"})
end
if data[vi] == minetest.get_content_id("air") then
data[vi] = minetest.get_content_id("ctf_map:ind_glass_red")
elseif data[vi] == minetest.get_content_id("default:stone") then
data[vi] = minetest.get_content_id("ctf_map:ind_stone_red")
elseif data[vi] == minetest.get_content_id("default:water_source") then
data[vi] = minetest.get_content_id("ctf_map:ind_water")
elseif data[vi] == minetest.get_content_id("default:lava_source") then
data[vi] = minetest.get_content_id("ctf_map:ind_lava")
end
elseif params == "remove_buildtime" then
local current_pos = {x = x, y = y, z = z}
local current_node = minetest.get_node_or_nil(current_pos)
if current_node then
if current_node.name == "ctf_map:ind_glass_red" then
minetest.set_node(current_pos, {name = "air"})
elseif current_node.name == "ctf_map:ind_stone_red" then
minetest.set_node(current_pos, {name = "default:stone"})
elseif current_node.name == "ctf_map:ind_water" then
minetest.set_node(current_pos, {name = "default:water_source"})
elseif current_node.name == "ctf_map:ind_lava" then
minetest.set_node(current_pos, {name = "default:lava_source"})
end
if data[vi] == minetest.get_content_id("ctf_map:ind_glass_red") then
data[vi] = minetest.get_content_id("air")
elseif data[vi] == minetest.get_content_id("ctf_map:ind_stone_red") then
data[vi] = minetest.get_content_id("default:stone")
elseif data[vi] == minetest.get_content_id("ctf_map:ind_water") then
data[vi] = minetest.get_content_id("default:water_source")
elseif data[vi] == minetest.get_content_id("ctf_map:ind_lava") then
data[vi] = minetest.get_content_id("default:lava_source")
end
elseif params == "place_outer" then
local current_pos = {x = x, y = y, z = z}
if x == pos1.x or x == pos2.x or y == pos1.y
or z == pos1.z or z == pos2.z then
local current_node = minetest.get_node_or_nil(current_pos)
if current_node then
if current_node.name == "air" or
current_node.name == "ctf_map:ignore" or
current_node.name == "ignore" then
minetest.set_node(current_pos, {name = "ctf_map:ind_glass"})
else
minetest.set_node(current_pos, {name = "ctf_map:stone"})
end
if data[vi] == minetest.get_content_id("air") or
data[vi] == minetest.get_content_id("ignore") or
data[vi] == minetest.get_content_id("ctf_map:ignore") then
data[vi] = minetest.get_content_id("ctf_map:ind_glass")
else
data[vi] = minetest.get_content_id("ctf_map:stone")
end
end
end
end
end
end

vm:set_data(data)
vm:write_to_map(true)

local message =
(params == "place_buildtime" and "Build-time barrier placed") or
(params == "remove_buildtime" and "Build-time barrier removed") or
Expand Down

0 comments on commit 18819cd

Please sign in to comment.