mirror of
				https://github.com/Uberi/Minetest-WorldEdit.git
				synced 2025-10-31 04:45:33 +01:00 
			
		
		
		
	Implement /inset and /shift
This commit is contained in:
		| @@ -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, | ||||
|   } | ||||
| ) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user