diff options
| author | Uberi <azhang9@gmail.com> | 2013-08-16 16:56:38 -0400 | 
|---|---|---|
| committer | Uberi <azhang9@gmail.com> | 2013-08-16 16:56:38 -0400 | 
| commit | 9ab52df56a9a4eac8b85f2641e78a1e33bc6ed25 (patch) | |
| tree | d1a17203c57c1ecff2ea48ec4f33d01ed92f6278 /worldedit_limited | |
| parent | 4c43bf36001e1b7982e20ad1ab0d2dd3926fc406 (diff) | |
Add worldedit_limited.
Diffstat (limited to 'worldedit_limited')
| -rw-r--r-- | worldedit_limited/depends.txt | 1 | ||||
| -rw-r--r-- | worldedit_limited/init.lua | 120 | 
2 files changed, 121 insertions, 0 deletions
| diff --git a/worldedit_limited/depends.txt b/worldedit_limited/depends.txt new file mode 100644 index 0000000..74054c6 --- /dev/null +++ b/worldedit_limited/depends.txt @@ -0,0 +1 @@ +worldedit diff --git a/worldedit_limited/init.lua b/worldedit_limited/init.lua new file mode 100644 index 0000000..801e19c --- /dev/null +++ b/worldedit_limited/init.lua @@ -0,0 +1,120 @@ +do return end +do +	local MAX_VOLUME = 30 * 30 * 30 + +	local we = worldedit +	local volume = we.volume +	local safewrap = function(func) +		return function(pos1, pos2, ...) +			if validbox(pos1, pos2) then +				return func(pos1, pos2, ...) +			end +			return 0, pos1, pos2 +		end +	end + +	local validbox = function(pos1, pos2) +		tpos1, tpos2 = we.sort_pos(pos1, pos2) + +		if volume(tpos1, tpos2) > MAX_VOLUME then +			return false +		end + +		--check for ownership of area if ownership mod is installed +		if owner_defs then +			local inside = false +			for _, def in pairs(owner_defs) do +				--sort positions +				local tdef = {x1=def.x1, x2 = def.x2, y1=def.y1, y2=def.y2, z1=def.z1, z2=def.z2} +				if tdef.x1 > tdef.x2 then +					tdef.x1, tdef.x2 = tdef.x2, tdef.x1 +				end +				if tdef.y1 > tdef.y2 then +					tdef.y1, tdef.y2 = tdef.y2, tdef.y1 +				end +				if tdef.z1 > tdef.z2 then +					tdef.z1, tdef.z2 = tdef.z2, tdef.z1 +				end + +				--check ownership +				if tpos1.x >= tdef.x1 and tpos1.x <= tdef.x2 +				and tpos2.x >= tdef.x1 and tpos2.x <= tdef.x2 +				and tpos1.y >= tdef.y1 and tpos1.y <= tdef.y2 +				and tpos2.y >= tdef.y1 and tpos2.y <= tdef.y2 +				and tpos1.z >= tdef.z1 and tpos1.z <= tdef.z2 +				and tpos2.z >= tdef.z1 and tpos2.z <= tdef.z2 +				and name == def.owner then --wip: name isn't available here +					inside = true +					break +				end +			end +			if not inside then +				return false +			end +		end + +		return true +	end + +	worldedit = { +		sort_pos = we.sort_pos, + +		set = safewrap(we.set), +		replace = safewrap(we.replace), +		replaceinverse = safewrap(we.replaceinverse), +		copy = function(pos1, pos2, axis, amount) +			tpos1, tpos2 = we.sort_pos(pos1, pos2) +			tpos1[axis] = tpos1[axis] + amount +			tpos2[axis] = tpos2[axis] + amount +			if validbox(pos1, pos2) and validbox(tpos1, tpos2) then +				we.copy(pos1, pos2, axis, amount) +			else +				return 0 +			end +		end, +		move = function(pos1, pos2, axis, amount) +			tpos1, tpos2 = we.sort_pos(pos1, pos2) +			tpos1[axis] = tpos1[axis] + amount +			tpos2[axis] = tpos2[axis] + amount +			if validbox(pos1, pos2) and validbox(tpos1, tpos2) then +				we.move(pos1, pos2, axis, amount) +			else +				return 0 +			end +		end, +		stack = function(pos1, pos2, axis, count) +			tpos1, tpos2 = we.sort_pos(pos1, pos2) +			local length = (tpos2[axis] - tpos1[axis] + 1) * count +			if count < 0 then +				tpos1[axis] = tpos1[axis] + length +			else +				tpos2[axis] = tpos2[axis] + length +			end +			if validbox(tpos1, tpos2) then +				we.stack(pos1, pos2, axis, amount) +			else +				return 0 +			end +		end, +		--wip: add transpose, rotate safely +		flip = safewrap(we.flip), +		orient = safewrap(we.orient), +		fixlight = safewrap(we.fixlight), +		--wip: add primitives here +		volume = we.volume, +		hide = safewrap(we.hide), +		suppress = safewrap(we.suppress), +		highlight = safewrap(we.highlight), +		restore = safewrap(we.restore), +		serialize = safewrap(we.serialize), +		allocate = we.allocate, +		deserialize = function(originpos, value) +			local tpos1, tpos2 = we.allocate(originpos, value) +			if validbox(tpos1, tpos2) then +				we.deserialize(originpos, value) +			else +				return 0 +			end +		end, +	} +end
\ No newline at end of file | 
