2021-11-13 12:36:10 +00:00
local wea = worldeditadditions
local Vector3 = wea.Vector3
local function parse_stage2 ( name , parts )
local success , vpos1 , vpos2 = wea.parse . axes (
parts ,
wea.player_dir ( name )
)
if not success then return success , vpos1 end
-- In this case, we aren't interested in keeping the multidirectional shape changing information insomuch as an offset to which we should shift the region's contents to.
local offset = vpos1 + vpos2
if offset == Vector3.new ( ) then
return false , " Refusing to move region a distance of 0 nodes "
end
return true , offset : floor ( )
end
-- ███ ███ ██████ ██ ██ ███████
-- ████ ████ ██ ██ ██ ██ ██
-- ██ ████ ██ ██ ██ ██ ██ █████
-- ██ ██ ██ ██ ██ ██ ██ ██
-- ██ ██ ██████ ████ ███████
2022-05-19 21:10:09 +00:00
worldeditadditions_core.register_command ( " move+ " , { -- TODO: Make this an override
2021-11-13 12:36:10 +00:00
params = " <axis:x|y|z|-x|-y|-z|?|front|back|left|right|up|down> <count> [<axis> <count> [...]] " ,
description = " Moves the defined region to another location - potentially across multiple axes at once. " ,
privs = { worldedit = true } ,
require_pos = 2 ,
parse = function ( params_text )
if not params_text then params_text = " " end
local parts = wea.split_shell ( params_text )
return true , parts
end ,
nodes_needed = function ( name )
return worldedit.volume ( worldedit.pos1 [ name ] , worldedit.pos2 [ name ] )
end ,
func = function ( name , parts )
local start_time = wea.get_ms_time ( )
local success_a , copy_offset = parse_stage2 ( name , parts )
if not success_a then return success_a , copy_offset end
2021-11-13 12:41:00 +00:00
--- 1: Calculate the source & target regions
-----------------------------------------------------------------------
2021-11-13 12:36:10 +00:00
local source_pos1 = Vector3.clone ( worldedit.pos1 [ name ] )
local source_pos2 = Vector3.clone ( worldedit.pos2 [ name ] )
local target_pos1 = source_pos1 + copy_offset
local target_pos2 = source_pos2 + copy_offset
2021-11-13 12:41:00 +00:00
-- 2: Move the nodes
-----------------------------------------------------------------------
2021-11-13 12:36:10 +00:00
local success_b , nodes_modified = wea.move (
source_pos1 , source_pos2 ,
target_pos1 , target_pos2
)
if not success_b then return success_b , nodes_modified end
2021-11-13 12:41:00 +00:00
-- 3: Update the defined region
-----------------------------------------------------------------------
worldedit.pos1 [ name ] = target_pos1
worldedit.pos2 [ name ] = target_pos2
worldedit.marker_update ( name )
2021-11-13 12:36:10 +00:00
local time_taken = wea.get_ms_time ( ) - start_time
minetest.log ( " action " , name .. " used //move+ from " .. source_pos1 .. " - " .. source_pos2 .. " to " .. target_pos1 .. " - " .. target_pos2 .. " , modifying " .. nodes_modified .. " nodes in " .. wea.format . human_time ( time_taken ) )
return true , nodes_modified .. " nodes moved using offset " .. copy_offset .. " in " .. wea.format . human_time ( time_taken )
end
} )