summaryrefslogtreecommitdiff
path: root/worldedit_commands
diff options
context:
space:
mode:
authorDaniel Sosa <sosa.daniel23@gmail.com>2015-01-03 20:20:27 -0600
committerDaniel Sosa <sosa.daniel23@gmail.com>2016-07-03 21:44:02 -0500
commit240380ff16bfb8dedb18b991315f0bacd937caf5 (patch)
tree01d53a2b13f03f4ed8c40ba01b512d923b9ece57 /worldedit_commands
parent8d213d32a092ec03dca17ada9217a87656bd2b18 (diff)
Implement /inset and /shift
Diffstat (limited to 'worldedit_commands')
-rw-r--r--worldedit_commands/cuboid.lua92
-rw-r--r--worldedit_commands/cuboidapi.lua12
2 files changed, 76 insertions, 28 deletions
diff --git a/worldedit_commands/cuboid.lua b/worldedit_commands/cuboid.lua
index 1af5b3b..2e59f16 100644
--- a/worldedit_commands/cuboid.lua
+++ b/worldedit_commands/cuboid.lua
@@ -37,30 +37,78 @@ minetest.register_chatcommand("/outset", {
}
)
+minetest.register_chatcommand("/inset", {
+ params = "<amount> [h|v]",
+ description = "inset the selection",
+ privs = {worldedit=true},
+ func = function(name, param)
+ local find, _, amount, dir = param:find("^(%d+)[%s+]?([hv]?)$")
+
+ if find == nil then
+ return false, "invalid usage: " .. param
+ end
+
+ local pos1 = worldedit.pos1[name]
+ local pos2 = worldedit.pos2[name]
+
+ if pos1 == nil or pos2 == nil then
+ return false,
+ "Undefined region. Region must be defined beforehand."
+ end
+
+ if dir == "" then
+ assert(worldedit.cuboid_volumetricexpand(name, -amount))
+ elseif dir == "h" then
+ assert(worldedit.cuboid_linealexpand(name, 'x', 1, -amount))
+ assert(worldedit.cuboid_linealexpand(name, 'x', -1, -amount))
+ assert(worldedit.cuboid_linealexpand(name, 'z', 1, -amount))
+ assert(worldedit.cuboid_linealexpand(name, 'z', -1, -amount))
+ elseif dir == "v" then
+ assert(worldedit.cuboid_linealexpand(name, 'y', 1, -amount))
+ assert(worldedit.cuboid_linealexpand(name, 'y', -1, -amount))
+ else
+ return false, "Unknown error"
+ end
+
+ worldedit.marker_update(name)
+ return true, "Region inset by " .. amount .. " blocks"
+ end,
+ }
+)
-minetest.register_chatcommand(
- "/shift",
- {
- params = "<amount> [up|down|left|right|front|back]",
- description = "Moves the selection region. Does not move contents.",
- privs = {worldedit=true},
- func = function(name, param)
- local pos1 = worldedit.pos1[name]
- local pos2 = worldedit.pos2[name]
- local find, _, amount, direction = param:find("(%d+)%s*(%l*)")
-
- if find == nil then
- worldedit.player_notify(name, "invalid usage: " .. param)
- return
- end
-
- if pos1 == nil or pos2 == nil then
- worldedit.player_notify(name,
- "Undefined region. Region must be defined beforehand.")
- return
- end
-
+minetest.register_chatcommand("/shift", {
+ params = "<amount> [up|down|left|right|front|back]",
+ description = "Moves the selection region. Does not move contents.",
+ privs = {worldedit=true},
+ func = function(name, param)
+ local pos1 = worldedit.pos1[name]
+ local pos2 = worldedit.pos2[name]
+ local find, _, amount, direction = param:find("(%d+)%s*(%l*)")
+
+ if find == nil then
+ worldedit.player_notify(name, "invalid usage: " .. param)
+ return
+ end
+
+ if pos1 == nil or pos2 == nil then
+ worldedit.player_notify(name,
+ "Undefined region. Region must be defined beforehand.")
+ return
+ end
+
+ local axis, dir
+ if direction ~= "" then
+ axis, dir = worldedit.translate_direction(name, direction)
+ else
+ axis, dir = worldedit.player_axis(name)
+ worldedit.player_notify(name, "entered player_axis")
+ end
+
+ assert(worldedit.cuboid_shift(name, axis, amount * dir))
+ worldedit.marker_update(name)
+
+ return true, "region shifted by " .. amount .. " blocks"
end,
}
)
diff --git a/worldedit_commands/cuboidapi.lua b/worldedit_commands/cuboidapi.lua
index 37194e4..d473571 100644
--- a/worldedit_commands/cuboidapi.lua
+++ b/worldedit_commands/cuboidapi.lua
@@ -65,14 +65,14 @@ worldedit.cuboid_shift = function(name, axis, amount)
end
if axis == 'x' then
- pos1.x = pos1.x + amount
- pos2.x = pos2.x + amount
+ worldedit.pos1[name].x = pos1.x + amount
+ worldedit.pos2[name].x = pos2.x + amount
elseif axis == 'y' then
- pos1.y = pos1.y + amount
- pos2.y = pos2.y + amount
+ worldedit.pos1[name].y = pos1.y + amount
+ worldedit.pos2[name].y = pos2.y + amount
elseif axis == 'z' then
- pos1.z = pos1.z + amount
- pos2.z = pos2.z + amount
+ worldedit.pos1[name].z = pos1.z + amount
+ worldedit.pos2[name].z = pos2.z + amount
else
return false, "invalid axis"
end