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.
//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
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
})\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
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
})\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
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
})\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
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
})\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
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
})\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
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
})\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
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
})\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
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