From 9ab52df56a9a4eac8b85f2641e78a1e33bc6ed25 Mon Sep 17 00:00:00 2001
From: Uberi <azhang9@gmail.com>
Date: Fri, 16 Aug 2013 16:56:38 -0400
Subject: Add worldedit_limited.

---
 worldedit_limited/depends.txt |   1 +
 worldedit_limited/init.lua    | 120 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 121 insertions(+)
 create mode 100644 worldedit_limited/depends.txt
 create mode 100644 worldedit_limited/init.lua

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
-- 
cgit v1.2.3