mirror of
https://github.com/Uberi/Minetest-WorldEdit.git
synced 2024-11-16 15:40:16 +01:00
76 lines
3.1 KiB
Lua
76 lines
3.1 KiB
Lua
|
--I am assuming it's creative mode. What should I do in survival?
|
||
|
|
||
|
--if there's no protection mod, no worldedit means no editing, worldedit means editing anywhere (old behaviour)
|
||
|
--if there's a protection mod, no worldedit means editing only in your area, worldedit means editing in no-man's land too, areas means editing anywhere.
|
||
|
|
||
|
--let the other mod load first
|
||
|
minetest.after(0, function()
|
||
|
--I would use mod.soft_depend from commonlib, but there are multiple mods that could create owned land
|
||
|
PROTECTION_MOD_EXISTS = minetest.is_protected == old_is_protected
|
||
|
--else fall back to old behaviour, where
|
||
|
--worldedit privilege is permission to edit everything
|
||
|
end)
|
||
|
|
||
|
--this is privs= within chatcommands that actually change land
|
||
|
--(should be the same functions as safe_region)
|
||
|
function worldedit.get_privs()
|
||
|
if not PROTECTION_MOD_EXISTS then
|
||
|
--no protection mod, worldedit means editing anywhere
|
||
|
return {worldedit=true}
|
||
|
end
|
||
|
--protection mod, can edit inside your area without worldedit privilege
|
||
|
--(worldedit and areas let you edit in no-man's land and other-owned area)
|
||
|
return {worldedit=false} -- this array could also be empty
|
||
|
end
|
||
|
|
||
|
function worldedit.can_edit_volume(name)
|
||
|
--old you-can-worldedit-everything behaviour
|
||
|
if not PROTECTION_MOD_EXISTS then
|
||
|
--then if you were able to run this command, then you have the worldedit privilege.
|
||
|
return true
|
||
|
end
|
||
|
--new ownership-based behaviour
|
||
|
|
||
|
--You can set areas, so you can worldedit them too.
|
||
|
if minetest.check_player_privs(name, {areas=true}) then
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
--all-or-nothing here
|
||
|
local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]
|
||
|
--pos1, pos2 = worldedit.sort_pos(pos1, pos2) --does this matter?
|
||
|
for i in area:iterp(pos1, pos2) do
|
||
|
|
||
|
--THIS SECTION IGNORES the distinction of area that is owned by someone else, but still editable
|
||
|
--this is treated as area owned by the editor, or no-man's land depending on if it's shared with one person or everyone
|
||
|
--
|
||
|
--If it was treated differently (it's not), then single edits would not be able to cross the border between someone else's editable land, and no-man's land, to prevent accidental writes. It may cross the border between multiple people's editable land (or should it?), such as to create a bridge between two skyscrapers that were previously built separately.
|
||
|
--
|
||
|
--This needs testing for the other changes first.
|
||
|
|
||
|
--Is it owned?
|
||
|
if minetest.is_protected(i) then
|
||
|
--Is it someone else's?
|
||
|
if minetest.is_protected(i, name) then
|
||
|
--already checked the ability to make it mine (areas)
|
||
|
minetest.chat_send_player(name, "Someone else owns at least part of what you want to edit")
|
||
|
return false
|
||
|
end
|
||
|
--it's mine
|
||
|
--continue
|
||
|
|
||
|
--no-man's land
|
||
|
--can I edit that?
|
||
|
elseif not minetest.check_player_privs(name, {worldedit=true}) then --cache this check?
|
||
|
minetest.chat_send_player(name, "You can only edit area in which you own a plot (missing worldedit privilege)")
|
||
|
return false
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--the whole thing is
|
||
|
--a) owned by me,
|
||
|
--b) owned by no one and I have the worldedit privilege, and/or
|
||
|
--c) owned by someone else and I have the areas privilege.
|
||
|
return true
|
||
|
end
|