]> git.lizzy.rs Git - worldedit.git/commitdiff
Add the ? axis, which represents the axis the player is facing.
authorAnthony Zhang <azhang9@gmail.com>
Sat, 18 Aug 2012 18:43:12 +0000 (14:43 -0400)
committerAnthony Zhang <azhang9@gmail.com>
Sat, 18 Aug 2012 18:43:12 +0000 (14:43 -0400)
README.md
init.lua

index cc4063061a8757617009c05aca233e9f809b37c1..a52d96ae638d3153e35ba3be7467432d61dcc436 100644 (file)
--- a/README.md
+++ b/README.md
@@ -12,6 +12,14 @@ WorldEdit has a huge potential for abuse by untrusted players. Therefore, users
 
 For in-game information about these commands, type `/help <command name>` in the chat. For example, to learn more about the `//copy` command, simply type `/help /copy` to display information relevant to copying a region.
 
+Axes
+----
+The coordinate system is the same as that used by MineTest; Y is upwards, X is perpendicular, and Z is parallel.
+
+When an axis is specified in a WorldEdit command, it is specified as one of the following values: x, y, z, or ?.
+
+The value ? represents the axis the player is currently facing. If the player is facing more than one axis, the axis the player face direction is closest to will be used.
+
 Regions
 -------
 Most WorldEdit commands operate on regions. Regions are a set of two positions that define a 3D cube. They are local to each player and chat commands affect only the region for the player giving the commands.
@@ -83,61 +91,68 @@ Replace all instances of <search node> with <place node> in the current WorldEdi
     //replace dirt flowers:flower_waterlily
     //replace flowers:flower_rose flowers:flower_tulip
 
-### //hollowcylinder x/y/z <length> <radius> <node>
+### //hollowcylinder x/y/z/? <length> <radius> <node>
 
-Add hollow cylinder at WorldEdit position 1 along the x/y/z axis with length <length> and radius <radius>, composed of <node>.
+Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length> and radius <radius>, composed of <node>.
 
     //hollowcylinder x +5 8 dirt
     //hollowcylinder y 28 10 default:glass
     //hollowcylinder z -12 3 mesecons:mesecon
+    //hollowcylinder ? 2 4 stone
 
-### //cylinder x/y/z <length> <radius> <node>
+### //cylinder x/y/z/? <length> <radius> <node>
 
-Add cylinder at WorldEdit position 1 along the x/y/z axis with length <length> and radius <radius>, composed of <node>.
+Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length> and radius <radius>, composed of <node>.
 
     //cylinder x +5 8 dirt
     //cylinder y 28 10 default:glass
     //cylinder z -12 3 mesecons:mesecon
+    //cylinder ? 2 4 stone
 
-### //copy x/y/z <amount>
+### //copy x/y/z/? <amount>
 
-Copy the current WorldEdit region along the x/y/z axis by <amount> nodes.
+Copy the current WorldEdit region along the x/y/z/? axis by <amount> nodes.
 
     //copy x 15
     //copy y -7
     //copy z +4
+    //copy ? 8
 
-### //move x/y/z <amount>
+### //move x/y/z/? <amount>
 
-Move the current WorldEdit region along the x/y/z axis by <amount> nodes.
+Move the current WorldEdit region along the x/y/z/? axis by <amount> nodes.
 
     //move x 15
     //move y -7
     //move z +4
+    //move ? -1
 
-### //stack x/y/z <count>
+### //stack x/y/z/? <count>
 
-Stack the current WorldEdit region along the x/y/z axis <count> times.
+Stack the current WorldEdit region along the x/y/z/? axis <count> times.
 
     //stack x 3
     //stack y -1
     //stack z +5
+    //stack ? 12
 
-### //transpose x/y/z x/y/z
+### //transpose x/y/z/? x/y/z/?
 
-Transpose the current WorldEdit region along the x/y/z and x/y/z axes.
+Transpose the current WorldEdit region along the x/y/z/? and x/y/z/? axes.
 
     //transpose x y
     //transpose x z
     //transpose y z
+    //transpose ? y
 
-### //flip x/y/z
+### //flip x/y/z/?
 
-Flip the current WorldEdit region along the x/y/z axis.
+Flip the current WorldEdit region along the x/y/z/? axis.
 
    //flip x
    //flip y
    //flip z
+   //flip ?
 
 ### //rotate
 
index eae615b349532654492100cea2204cffd7632f2c..10d03b8fe12ab9fbb4b793c6358eb1852b3e8731 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -16,6 +16,18 @@ worldedit.node_is_valid = function(temp_pos, nodename)
        or minetest.registered_nodes["default:" .. nodename] ~= nil\r
 end\r
 \r
+worldedit.player_axis = function(name)\r
+       local dir = minetest.env:get_player_by_name(name):get_look_dir()\r
+       if dir.x > dir.y then\r
+               if dir.x > dir.z then\r
+                       return "x"\r
+               end\r
+       elseif dir.y > dir.z then\r
+               return "y"\r
+       end\r
+       return "z"\r
+end\r
+\r
 minetest.register_chatcommand("/reset", {\r
        params = "",\r
        description = "Reset the region so that it is empty",\r
@@ -176,8 +188,8 @@ minetest.register_chatcommand("/replace", {
 })\r
 \r
 minetest.register_chatcommand("/hollowcylinder", {\r
-       params = "x/y/z <length> <radius> <node>",\r
-       description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z axis with length <length> and radius <radius>, composed of <node>",\r
+       params = "x/y/z/? <length> <radius> <node>",\r
+       description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length> and radius <radius>, composed of <node>",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos = worldedit.pos1[name]\r
@@ -186,11 +198,14 @@ minetest.register_chatcommand("/hollowcylinder", {
                        return\r
                end\r
 \r
-               local found, _, axis, length, radius, nodename = param:find("^([xyz])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")\r
+               local found, _, axis, length, radius, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")\r
                if found == nil then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r
                end\r
+               if axis == "?" then\r
+                       axis = worldedit.player_axis(name)\r
+               end\r
                if not worldedit.node_is_valid(pos, nodename) then\r
                        minetest.chat_send_player(name, "Invalid node name: " .. param)\r
                        return\r
@@ -202,8 +217,8 @@ minetest.register_chatcommand("/hollowcylinder", {
 })\r
 \r
 minetest.register_chatcommand("/cylinder", {\r
-       params = "x/y/z <length> <radius> <node>",\r
-       description = "Add cylinder at WorldEdit position 1 along the x/y/z axis with length <length> and radius <radius>, composed of <node>",\r
+       params = "x/y/z/? <length> <radius> <node>",\r
+       description = "Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length> and radius <radius>, composed of <node>",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos = worldedit.pos1[name]\r
@@ -212,11 +227,14 @@ minetest.register_chatcommand("/cylinder", {
                        return\r
                end\r
 \r
-               local found, _, axis, length, radius, nodename = param:find("^([xyz])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")\r
+               local found, _, axis, length, radius, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")\r
                if found == nil then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r
                end\r
+               if axis == "?" then\r
+                       axis = worldedit.player_axis(name)\r
+               end\r
                if not worldedit.node_is_valid(pos, nodename) then\r
                        minetest.chat_send_player(name, "Invalid node name: " .. param)\r
                        return\r
@@ -228,8 +246,8 @@ minetest.register_chatcommand("/cylinder", {
 })\r
 \r
 minetest.register_chatcommand("/copy", {\r
-       params = "x/y/z <amount>",\r
-       description = "Copy the current WorldEdit region along the x/y/z axis by <amount> nodes",\r
+       params = "x/y/z/? <amount>",\r
+       description = "Copy the current WorldEdit region along the x/y/z/? axis by <amount> nodes",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
@@ -238,11 +256,14 @@ minetest.register_chatcommand("/copy", {
                        return\r
                end\r
 \r
-               local found, _, axis, amount = param:find("^([xyz])%s+([+-]?%d+)$")\r
+               local found, _, axis, amount = param:find("^([xyz%?])%s+([+-]?%d+)$")\r
                if found == nil then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r
                end\r
+               if axis == "?" then\r
+                       axis = worldedit.player_axis(name)\r
+               end\r
 \r
                local count = worldedit.copy(pos1, pos2, axis, tonumber(amount))\r
                minetest.chat_send_player(name, count .. " nodes copied")\r
@@ -250,8 +271,8 @@ minetest.register_chatcommand("/copy", {
 })\r
 \r
 minetest.register_chatcommand("/move", {\r
-       params = "x/y/z <amount>",\r
-       description = "Move the current WorldEdit region along the x/y/z axis by <amount> nodes",\r
+       params = "x/y/z/? <amount>",\r
+       description = "Move the current WorldEdit region along the x/y/z/? axis by <amount> nodes",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
@@ -260,11 +281,14 @@ minetest.register_chatcommand("/move", {
                        return\r
                end\r
 \r
-               local found, _, axis, amount = param:find("^([xyz])%s+([+-]?%d+)$")\r
+               local found, _, axis, amount = param:find("^([xyz%?])%s+([+-]?%d+)$")\r
                if found == nil then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r
                end\r
+               if axis == "?" then\r
+                       axis = worldedit.player_axis(name)\r
+               end\r
 \r
                local count = worldedit.move(pos1, pos2, axis, tonumber(amount))\r
                minetest.chat_send_player(name, count .. " nodes moved")\r
@@ -272,8 +296,8 @@ minetest.register_chatcommand("/move", {
 })\r
 \r
 minetest.register_chatcommand("/stack", {\r
-       params = "x/y/z <count>",\r
-       description = "Stack the current WorldEdit region along the x/y/z axis <count> times",\r
+       params = "x/y/z/? <count>",\r
+       description = "Stack the current WorldEdit region along the x/y/z/? axis <count> times",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
@@ -282,11 +306,14 @@ minetest.register_chatcommand("/stack", {
                        return\r
                end\r
 \r
-               local found, _, axis, count = param:find("^([xyz])%s+([+-]?%d+)$")\r
+               local found, _, axis, count = param:find("^([xyz%?])%s+([+-]?%d+)$")\r
                if found == nil then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r
                end\r
+               if axis == "?" then\r
+                       axis = worldedit.player_axis(name)\r
+               end\r
 \r
                local count = worldedit.stack(pos1, pos2, axis, tonumber(count))\r
                minetest.chat_send_player(name, count .. " nodes stacked")\r
@@ -294,8 +321,8 @@ minetest.register_chatcommand("/stack", {
 })\r
 \r
 minetest.register_chatcommand("/transpose", {\r
-       params = "x/y/z x/y/z",\r
-       description = "Transpose the current WorldEdit region along the x/y/z and x/y/z axes",\r
+       params = "x/y/z/? x/y/z/?",\r
+       description = "Transpose the current WorldEdit region along the x/y/z/? and x/y/z/? axes",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
@@ -304,11 +331,17 @@ minetest.register_chatcommand("/transpose", {
                        return\r
                end\r
 \r
-               local found, _, axis1, axis2 = param:find("^([xyz])%s+([xyz])$")\r
+               local found, _, axis1, axis2 = param:find("^([xyz%?])%s+([xyz%?])$")\r
                if found == nil then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r
                end\r
+               if axis1 == "?" then\r
+                       axis1 = worldedit.player_axis(name)\r
+               end\r
+               if axis2 == "?" then\r
+                       axis2 = worldedit.player_axis(name)\r
+               end\r
                if axis1 == axis2 then\r
                        minetest.chat_send_player(name, "Invalid usage: axes are the same")\r
                        return\r
@@ -320,8 +353,8 @@ minetest.register_chatcommand("/transpose", {
 })\r
 \r
 minetest.register_chatcommand("/flip", {\r
-       params = "x/y/z",\r
-       description = "Flip the current WorldEdit region along the x/y/z axis",\r
+       params = "x/y/z/?",\r
+       description = "Flip the current WorldEdit region along the x/y/z/? axis",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
@@ -330,6 +363,9 @@ minetest.register_chatcommand("/flip", {
                        return\r
                end\r
 \r
+               if param == "?" then\r
+                       param = worldedit.player_axis(name)\r
+               end\r
                if param ~= "x" and param ~= "y" and param ~= "z" then\r
                        minetest.chat_send_player(name, "Invalid usage: " .. param)\r
                        return\r