forked from VoxeLibre/VoxeLibre
120 lines
3.0 KiB
Lua
120 lines
3.0 KiB
Lua
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 |