mirror of
https://github.com/Uberi/Minetest-WorldEdit.git
synced 2025-01-07 13:27:31 +01:00
Add the ? axis, which represents the axis the player is facing.
This commit is contained in:
parent
66c7f1fb96
commit
5b66b5ec25
43
README.md
43
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.
|
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
|
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.
|
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 dirt flowers:flower_waterlily
|
||||||
//replace flowers:flower_rose flowers:flower_tulip
|
//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 x +5 8 dirt
|
||||||
//hollowcylinder y 28 10 default:glass
|
//hollowcylinder y 28 10 default:glass
|
||||||
//hollowcylinder z -12 3 mesecons:mesecon
|
//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 x +5 8 dirt
|
||||||
//cylinder y 28 10 default:glass
|
//cylinder y 28 10 default:glass
|
||||||
//cylinder z -12 3 mesecons:mesecon
|
//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 x 15
|
||||||
//copy y -7
|
//copy y -7
|
||||||
//copy z +4
|
//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 x 15
|
||||||
//move y -7
|
//move y -7
|
||||||
//move z +4
|
//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 x 3
|
||||||
//stack y -1
|
//stack y -1
|
||||||
//stack z +5
|
//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 y
|
||||||
//transpose x z
|
//transpose x z
|
||||||
//transpose y 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 x
|
||||||
//flip y
|
//flip y
|
||||||
//flip z
|
//flip z
|
||||||
|
//flip ?
|
||||||
|
|
||||||
### //rotate
|
### //rotate
|
||||||
|
|
||||||
|
76
init.lua
76
init.lua
@ -16,6 +16,18 @@ worldedit.node_is_valid = function(temp_pos, nodename)
|
|||||||
or minetest.registered_nodes["default:" .. nodename] ~= nil
|
or minetest.registered_nodes["default:" .. nodename] ~= nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
worldedit.player_axis = function(name)
|
||||||
|
local dir = minetest.env:get_player_by_name(name):get_look_dir()
|
||||||
|
if dir.x > dir.y then
|
||||||
|
if dir.x > dir.z then
|
||||||
|
return "x"
|
||||||
|
end
|
||||||
|
elseif dir.y > dir.z then
|
||||||
|
return "y"
|
||||||
|
end
|
||||||
|
return "z"
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_chatcommand("/reset", {
|
minetest.register_chatcommand("/reset", {
|
||||||
params = "",
|
params = "",
|
||||||
description = "Reset the region so that it is empty",
|
description = "Reset the region so that it is empty",
|
||||||
@ -176,8 +188,8 @@ minetest.register_chatcommand("/replace", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/hollowcylinder", {
|
minetest.register_chatcommand("/hollowcylinder", {
|
||||||
params = "x/y/z <length> <radius> <node>",
|
params = "x/y/z/? <length> <radius> <node>",
|
||||||
description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z axis with length <length> and radius <radius>, composed of <node>",
|
description = "Add hollow cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length> and radius <radius>, composed of <node>",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos = worldedit.pos1[name]
|
local pos = worldedit.pos1[name]
|
||||||
@ -186,11 +198,14 @@ minetest.register_chatcommand("/hollowcylinder", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local found, _, axis, length, radius, nodename = param:find("^([xyz])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")
|
local found, _, axis, length, radius, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if axis == "?" then
|
||||||
|
axis = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
if not worldedit.node_is_valid(pos, nodename) then
|
if not worldedit.node_is_valid(pos, nodename) then
|
||||||
minetest.chat_send_player(name, "Invalid node name: " .. param)
|
minetest.chat_send_player(name, "Invalid node name: " .. param)
|
||||||
return
|
return
|
||||||
@ -202,8 +217,8 @@ minetest.register_chatcommand("/hollowcylinder", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/cylinder", {
|
minetest.register_chatcommand("/cylinder", {
|
||||||
params = "x/y/z <length> <radius> <node>",
|
params = "x/y/z/? <length> <radius> <node>",
|
||||||
description = "Add cylinder at WorldEdit position 1 along the x/y/z axis with length <length> and radius <radius>, composed of <node>",
|
description = "Add cylinder at WorldEdit position 1 along the x/y/z/? axis with length <length> and radius <radius>, composed of <node>",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos = worldedit.pos1[name]
|
local pos = worldedit.pos1[name]
|
||||||
@ -212,11 +227,14 @@ minetest.register_chatcommand("/cylinder", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local found, _, axis, length, radius, nodename = param:find("^([xyz])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")
|
local found, _, axis, length, radius, nodename = param:find("^([xyz%?])%s+([+-]?%d+)%s+(%d+)%s+([^%s]+)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if axis == "?" then
|
||||||
|
axis = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
if not worldedit.node_is_valid(pos, nodename) then
|
if not worldedit.node_is_valid(pos, nodename) then
|
||||||
minetest.chat_send_player(name, "Invalid node name: " .. param)
|
minetest.chat_send_player(name, "Invalid node name: " .. param)
|
||||||
return
|
return
|
||||||
@ -228,8 +246,8 @@ minetest.register_chatcommand("/cylinder", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/copy", {
|
minetest.register_chatcommand("/copy", {
|
||||||
params = "x/y/z <amount>",
|
params = "x/y/z/? <amount>",
|
||||||
description = "Copy the current WorldEdit region along the x/y/z axis by <amount> nodes",
|
description = "Copy the current WorldEdit region along the x/y/z/? axis by <amount> nodes",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
||||||
@ -238,11 +256,14 @@ minetest.register_chatcommand("/copy", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local found, _, axis, amount = param:find("^([xyz])%s+([+-]?%d+)$")
|
local found, _, axis, amount = param:find("^([xyz%?])%s+([+-]?%d+)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if axis == "?" then
|
||||||
|
axis = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
|
|
||||||
local count = worldedit.copy(pos1, pos2, axis, tonumber(amount))
|
local count = worldedit.copy(pos1, pos2, axis, tonumber(amount))
|
||||||
minetest.chat_send_player(name, count .. " nodes copied")
|
minetest.chat_send_player(name, count .. " nodes copied")
|
||||||
@ -250,8 +271,8 @@ minetest.register_chatcommand("/copy", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/move", {
|
minetest.register_chatcommand("/move", {
|
||||||
params = "x/y/z <amount>",
|
params = "x/y/z/? <amount>",
|
||||||
description = "Move the current WorldEdit region along the x/y/z axis by <amount> nodes",
|
description = "Move the current WorldEdit region along the x/y/z/? axis by <amount> nodes",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
||||||
@ -260,11 +281,14 @@ minetest.register_chatcommand("/move", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local found, _, axis, amount = param:find("^([xyz])%s+([+-]?%d+)$")
|
local found, _, axis, amount = param:find("^([xyz%?])%s+([+-]?%d+)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if axis == "?" then
|
||||||
|
axis = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
|
|
||||||
local count = worldedit.move(pos1, pos2, axis, tonumber(amount))
|
local count = worldedit.move(pos1, pos2, axis, tonumber(amount))
|
||||||
minetest.chat_send_player(name, count .. " nodes moved")
|
minetest.chat_send_player(name, count .. " nodes moved")
|
||||||
@ -272,8 +296,8 @@ minetest.register_chatcommand("/move", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/stack", {
|
minetest.register_chatcommand("/stack", {
|
||||||
params = "x/y/z <count>",
|
params = "x/y/z/? <count>",
|
||||||
description = "Stack the current WorldEdit region along the x/y/z axis <count> times",
|
description = "Stack the current WorldEdit region along the x/y/z/? axis <count> times",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
||||||
@ -282,11 +306,14 @@ minetest.register_chatcommand("/stack", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local found, _, axis, count = param:find("^([xyz])%s+([+-]?%d+)$")
|
local found, _, axis, count = param:find("^([xyz%?])%s+([+-]?%d+)$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if axis == "?" then
|
||||||
|
axis = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
|
|
||||||
local count = worldedit.stack(pos1, pos2, axis, tonumber(count))
|
local count = worldedit.stack(pos1, pos2, axis, tonumber(count))
|
||||||
minetest.chat_send_player(name, count .. " nodes stacked")
|
minetest.chat_send_player(name, count .. " nodes stacked")
|
||||||
@ -294,8 +321,8 @@ minetest.register_chatcommand("/stack", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/transpose", {
|
minetest.register_chatcommand("/transpose", {
|
||||||
params = "x/y/z x/y/z",
|
params = "x/y/z/? x/y/z/?",
|
||||||
description = "Transpose the current WorldEdit region along the x/y/z and x/y/z axes",
|
description = "Transpose the current WorldEdit region along the x/y/z/? and x/y/z/? axes",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
||||||
@ -304,11 +331,17 @@ minetest.register_chatcommand("/transpose", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local found, _, axis1, axis2 = param:find("^([xyz])%s+([xyz])$")
|
local found, _, axis1, axis2 = param:find("^([xyz%?])%s+([xyz%?])$")
|
||||||
if found == nil then
|
if found == nil then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
if axis1 == "?" then
|
||||||
|
axis1 = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
|
if axis2 == "?" then
|
||||||
|
axis2 = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
if axis1 == axis2 then
|
if axis1 == axis2 then
|
||||||
minetest.chat_send_player(name, "Invalid usage: axes are the same")
|
minetest.chat_send_player(name, "Invalid usage: axes are the same")
|
||||||
return
|
return
|
||||||
@ -320,8 +353,8 @@ minetest.register_chatcommand("/transpose", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_chatcommand("/flip", {
|
minetest.register_chatcommand("/flip", {
|
||||||
params = "x/y/z",
|
params = "x/y/z/?",
|
||||||
description = "Flip the current WorldEdit region along the x/y/z axis",
|
description = "Flip the current WorldEdit region along the x/y/z/? axis",
|
||||||
privs = {worldedit=true},
|
privs = {worldedit=true},
|
||||||
func = function(name, param)
|
func = function(name, param)
|
||||||
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
||||||
@ -330,6 +363,9 @@ minetest.register_chatcommand("/flip", {
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if param == "?" then
|
||||||
|
param = worldedit.player_axis(name)
|
||||||
|
end
|
||||||
if param ~= "x" and param ~= "y" and param ~= "z" then
|
if param ~= "x" and param ~= "y" and param ~= "z" then
|
||||||
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
minetest.chat_send_player(name, "Invalid usage: " .. param)
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user