diff options
| author | Cy <whatever> | 2014-06-30 16:14:14 -0700 | 
|---|---|---|
| committer | Cy <whatever> | 2014-06-30 16:14:14 -0700 | 
| commit | c22b5565114941ce5d62f64916fe713eb1141880 (patch) | |
| tree | a3353089fe27cab44befccbc9756a731c3c35d60 /worldedit_commands | |
| parent | 174416b010cd7833edb12f7ec7db7ab8f1918bce (diff) | |
Improved stacking
This stack / copy uses a direction vector, so it's not limited to only
along the X/Y/Z axis, and can go diagonally. This enables things like
building staircases.
Diffstat (limited to 'worldedit_commands')
| -rw-r--r-- | worldedit_commands/init.lua | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/worldedit_commands/init.lua b/worldedit_commands/init.lua index 04f2f4c..e7b0f74 100644 --- a/worldedit_commands/init.lua +++ b/worldedit_commands/init.lua @@ -619,6 +619,52 @@ minetest.register_chatcommand("/stack", {  	end),
  })
 +minetest.register_chatcommand("/stack2", {
 +	params = "<count> <x>/<y>/<z>",
 +	description = "Stack the current WorldEdit region <count> times translating each time by x, y and z in the respective directions.",
 +	privs = {worldedit=true},
 +	func = function(name, param)
 +		local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
 +        if pos1 == nil or pos2 == nil then
 +            worldedit.player_notify(name, "Select a position first!")
 +            return
 +        end
 +        local repetitions, incs = param:match("([0-9]+)%s*(.+)")
 +        repetitions = repetitions and tonumber(repetitions)
 +        if repetitions == nil then
 +			worldedit.player_notify(name, "invalid count: " .. param)
 +            return 
 +        end
 +
 +        local x,y,z = incs:match("(.+)/(.+)/(.+)")
 +        if x == nil then
 +            worldedit.player_notify(name, "invalid increments: " .. param)
 +            return
 +        end
 +        x = tonumber(x)
 +        y = tonumber(y)
 +        z = tonumber(z)
 +        if x == nil or y == nil or z == nil then
 +            worldedit.player_notify(name, "increments must be numbers: " .. param)
 +            return
 +        end
 +
 +        local count = worldedit.volume(pos1,pos2) * repetitions
 +
 +        return safe_region(function()
 +   		  worldedit.stack2(pos1, pos2, {x=x,y=y,z=z}, repetitions,
 +          function()
 +		    worldedit.player_notify(name, count .. " nodes stacked")
 +        end)
 +
 +        end,
 +        function() 
 +            return count
 +    	end)(name,param) -- more hax
 +	end
 +})
 +
 +
  minetest.register_chatcommand("/stretch", {
  	params = "<stretchx> <stretchy> <stretchz>",
  	description = "Scale the current WorldEdit positions and region by a factor of <stretchx>, <stretchy>, <stretchz> along the X, Y, and Z axes, repectively, with position 1 as the origin",
 | 
