]> git.lizzy.rs Git - worldedit.git/commitdiff
Fix //stack2 not working (closes #94)
authorsfan5 <sfan5@live.de>
Tue, 5 Jan 2016 12:57:48 +0000 (13:57 +0100)
committersfan5 <sfan5@live.de>
Tue, 5 Jan 2016 12:57:48 +0000 (13:57 +0100)
WorldEdit API.md
worldedit/manipulations.lua

index f50b5062c8dd192df55051758ee2eb83c24430c6..7b99c8beffac37765054f39176b36c889982941a 100644 (file)
@@ -45,6 +45,12 @@ Copies the region defined by positions `pos1` and `pos2` along the `axis` axis (
 \r
 Returns the number of nodes copied.\r
 \r
+### count = worldedit.copy2(pos1, pos2, off)\r
+\r
+Copies the region defined by positions `pos1` and `pos2` by the offset vector `off`.\r
+\r
+Returns the number of nodes copied.\r
+\r
 ### count = worldedit.move(pos1, pos2, axis, amount)\r
 \r
 Moves the region defined by positions `pos1` and `pos2` along the `axis` axis ("x" or "y" or "z") by `amount` nodes.\r
index 365d7b398de4876ff1b4c5e1e419557e36806626..cf9551737a0915d9028b414802d9312caf25de71 100644 (file)
@@ -90,7 +90,7 @@ function worldedit.stack2(pos1, pos2, direction, amount, finished)
                        translated.x = translated.x + direction.x\r
                        translated.y = translated.y + direction.y\r
                        translated.z = translated.z + direction.z\r
-                       worldedit.copy2(pos1, pos2, translated, volume)\r
+                       worldedit.copy2(pos1, pos2, translated)\r
                        minetest.after(0, next_one)\r
                else\r
                        if finished then\r
@@ -164,6 +164,38 @@ function worldedit.copy(pos1, pos2, axis, amount)
        return worldedit.volume(pos1, pos2)\r
 end\r
 \r
+--- Copies a region by offset vector `off`.\r
+-- @param pos1\r
+-- @param pos2\r
+-- @param off\r
+-- @return The number of nodes copied.\r
+function worldedit.copy2(pos1, pos2, off)\r
+       local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
+\r
+       worldedit.keep_loaded(pos1, pos2)\r
+\r
+       local get_node, get_meta, set_node = minetest.get_node,\r
+                       minetest.get_meta, minetest.set_node\r
+       local pos = {}\r
+       pos.x = pos2.x\r
+       while pos.x >= pos1.x do\r
+               pos.y = pos2.y\r
+               while pos.y >= pos1.y do\r
+                       pos.z = pos2.z\r
+                       while pos.z >= pos1.z do\r
+                               local node = get_node(pos) -- Obtain current node\r
+                               local meta = get_meta(pos):to_table() -- Get meta of current node\r
+                               local newpos = vector.add(pos, off) -- Calculate new position\r
+                               set_node(newpos, node) -- Copy node to new position\r
+                               get_meta(newpos):from_table(meta) -- Set metadata of new node\r
+                               pos.z = pos.z - 1\r
+                       end\r
+                       pos.y = pos.y - 1\r
+               end\r
+               pos.x = pos.x - 1\r
+       end\r
+       return worldedit.volume(pos1, pos2)\r
+end\r
 \r
 --- Moves a region along `axis` by `amount` nodes.\r
 -- @return The number of nodes moved.\r