2024-05-25 13:45:56 +00:00
local wea = worldeditadditions
local core = worldeditadditions_core
local Vector3 = core.Vector3
2024-05-25 14:25:29 +00:00
-- ███████ ███████ ████████
-- ██ ██ ██ █
-- ███████ █████ ██ █████
-- ██ ██ ██ █
-- ███████ ███████ ██
2024-05-25 13:45:56 +00:00
core.register_command ( " set+ " , {
params =
" [param|param2|p2|light|l] <value> " ,
description =
" Sets the node, param2, or light level to a fixed value in the defined region. Defaults to setting the node. If param2/p2 is specified, the param2 value associated with nodes is set instead. If light/l is specified, the light level is set. " ,
privs = { worldedit = true } ,
require_pos = 2 ,
parse = function ( params_text )
if not params_text or params_text == " " then
return false , " Error: No arguments specified "
end
local parts = core.split_shell ( params_text )
2024-05-25 14:25:29 +00:00
2024-05-25 13:45:56 +00:00
local mode = " param "
local value = nil
local possible_modes = { " param " , " p " , " param2 " , " p2 " , " light " , " l " }
if core.table . contains ( possible_modes , parts [ 1 ] ) then
mode = parts [ 1 ]
table.remove ( parts , 1 )
end
value = table.concat ( parts , " " )
-- Normalise mode
if mode == " p " then mode = " param "
elseif mode == " p2 " then mode = " param2 "
elseif mode == " l " then mode = " light " end
if mode == " param " then
local val_raw = value
value = worldedit.normalize_nodename ( value )
if not value then return false , tostring ( val_raw ) .. " could not be normalised into a valid node name, and the mode was set to 'param'. " end
else
local val_raw = value
value = tonumber ( value )
if not value then return false , tostring ( val_raw ) .. " does not appear to be a valid number. " end
value = math.floor ( value )
end
return true , mode , value
end ,
nodes_needed = function ( name ) -- target_node, target_node_chance, replace_nodes
return worldedit.volume ( worldedit.pos1 [ name ] , worldedit.pos2 [ name ] )
end ,
func = function ( name , mode , value )
local start_time = core.get_ms_time ( )
local pos1 , pos2 = core.pos . get12 ( name )
local success , stats = wea.set (
worldedit.pos1 [ name ] , worldedit.pos2 [ name ] ,
mode ,
value
)
if not success then return success , stats end
local time_taken = core.get_ms_time ( ) - start_time
minetest.log ( " action " ,
name ..
" used //set+ at " .. pos1 .. " - " .. pos2 .. " , affecting " .. stats.changed .. " nodes in " .. time_taken .. " s " )
return true , stats.changed .. " nodes updated in " .. core.format . human_time ( time_taken )
end
} )