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 = " [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 = " [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 = " [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