2020-06-26 20:23:03 +00:00
-- ██ ██ █████ ██ ██ ███████
-- ██ ██ ██ ██ ██ ██ ██
-- ██ █ ██ ███████ ██ ██ ███████
-- ██ ███ ██ ██ ██ ██ ██ ██
-- ███ ███ ██ ██ ███████ ███████ ███████
2022-05-19 21:10:09 +00:00
worldeditadditions_core.register_command ( " walls " , {
2021-10-31 16:41:52 +00:00
params = " [<replace_node=dirt> [<thickness=1>]] " ,
2021-08-05 01:00:38 +00:00
description = " Creates vertical walls of <replace_node> around the inside edges of the defined region. Optionally specifies a thickness for the walls to be created (defaults to 1) " ,
2020-05-11 20:44:18 +00:00
privs = { worldedit = true } ,
require_pos = 2 ,
parse = function ( params_text )
2021-10-31 16:41:52 +00:00
if not params_text or params_text == " " then params_text = " dirt " end
2021-08-05 01:00:38 +00:00
local parts = worldeditadditions.split_shell ( params_text )
local target_node
local thickness = 1
local target_node_raw = table.remove ( parts , 1 )
target_node = worldedit.normalize_nodename ( target_node_raw )
2020-05-11 20:44:18 +00:00
if not target_node then
2021-08-05 01:00:38 +00:00
return false , " Error: Invalid node name ' " .. target_node_raw .. " '. "
2020-05-11 20:44:18 +00:00
end
2021-08-05 01:00:38 +00:00
if # parts > 0 then
local thickness_raw = table.remove ( parts , 1 )
thickness = tonumber ( thickness_raw )
if not thickness then return false , " Error: Invalid thickness value ' " .. thickness_raw .. " '. The thickness value must be a positive integer greater than or equal to 0. " end
if thickness < 1 then return false , " Error: That thickness value ' " .. thickness_raw .. " ' is out of range. The thickness value must be a positive integer greater than or equal to 0. " end
end
return true , target_node , math.floor ( thickness )
2020-05-11 20:44:18 +00:00
end ,
2021-08-05 01:07:20 +00:00
nodes_needed = function ( name , target_node , thickness )
2020-05-11 20:44:18 +00:00
-- //overlay only modifies up to 1 node per column in the selected region
local pos1 , pos2 = worldedit.sort_pos ( worldedit.pos1 [ name ] , worldedit.pos2 [ name ] )
2021-08-05 01:07:20 +00:00
local pos3 = {
x = pos2.x - thickness * 2 ,
z = pos2.z - thickness * 2 ,
y = pos2.y }
2020-05-11 20:44:18 +00:00
return worldedit.volume ( pos1 , pos2 ) - worldedit.volume ( pos1 , pos3 )
end ,
2021-08-05 01:00:38 +00:00
func = function ( name , target_node , thickness )
2020-06-26 19:46:35 +00:00
local start_time = worldeditadditions.get_ms_time ( )
2021-08-05 01:00:38 +00:00
local success , replaced = worldeditadditions.walls (
worldedit.pos1 [ name ] , worldedit.pos2 [ name ] ,
target_node , thickness
)
2020-06-26 19:46:35 +00:00
local time_taken = worldeditadditions.get_ms_time ( ) - start_time
2020-05-11 20:44:18 +00:00
minetest.log ( " action " , name .. " used //walls from " .. worldeditadditions.vector . tostring ( worldedit.pos1 [ name ] ) .. " to " .. worldeditadditions.vector . tostring ( worldedit.pos1 [ name ] ) .. " , replacing " .. replaced .. " nodes in " .. time_taken .. " s " )
2021-03-20 01:48:56 +00:00
return true , replaced .. " nodes replaced in " .. worldeditadditions.format . human_time ( time_taken )
2020-05-11 20:44:18 +00:00
end
} )