From 79821b0892ee66822ce2929cfefe488dac2448b8 Mon Sep 17 00:00:00 2001 From: Joseph Pickard Date: Sun, 17 Jan 2016 19:33:13 -0500 Subject: [PATCH] Added optional support for using worledit for selections. --- depends.txt | 1 + pos.lua | 51 +++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 depends.txt diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..c4f6871 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +worldedit? diff --git a/pos.lua b/pos.lua index 8d3e6fe..7c85731 100644 --- a/pos.lua +++ b/pos.lua @@ -118,25 +118,52 @@ minetest.register_chatcommand("area_pos", { end, }) +function areas.useWorldedit(playerName) + if worldedit then + if nil == playerName then + return true; + elseif minetest.check_player_privs(playerName, {worldedit = true}) then + return true; + end + end + return false; +end + function areas:getPos(playerName) - local pos1, pos2 = areas.pos1[playerName], areas.pos2[playerName] - if not (pos1 and pos2) then - return nil - end - -- Copy positions so that the area table doesn't contain multiple - -- references to the same position. - pos1, pos2 = vector.new(pos1), vector.new(pos2) - return areas:sortPos(pos1, pos2) + local pos1, pos2 = nil, nil; + if areas.useWorldedit(playerName) then + pos1, pos2 = worldedit.pos1[playerName], worldedit.pos2[playerName]; + else + pos1, pos2 = areas.pos1[playerName], areas.pos2[playerName]; + end + + if not (pos1 and pos2) then + return nil + end + -- Copy positions so that the area table doesn't contain multiple + -- references to the same position. + pos1, pos2 = vector.new(pos1), vector.new(pos2) + return areas:sortPos(pos1, pos2) end function areas:setPos1(playerName, pos) - areas.pos1[playerName] = pos - areas.markPos1(playerName) + if areas.useWorldedit(playerName) then + worldedit.pos1[playerName] = pos; + worldedit.mark_pos1(playerName); + else + areas.pos1[playerName] = pos + areas.markPos1(playerName) + end end function areas:setPos2(playerName, pos) - areas.pos2[playerName] = pos - areas.markPos2(playerName) + if areas.useWorldedit(playerName) then + worldedit.pos2[playerName] = pos; + worldedit.mark_pos2(playerName); + else + areas.pos2[playerName] = pos + areas.markPos2(playerName) + end end