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