mirror of
https://github.com/minetest-mods/areas.git
synced 2025-06-30 07:00:29 +02:00
Apply MFF edits
This commit is contained in:
98
api.lua
98
api.lua
@ -1,4 +1,11 @@
|
||||
|
||||
--plants to place in openfarming
|
||||
local plants = { ["farming:blueberries"]="air", ["farming:carrot"]="air", ["farming:coffee_beans"]="air", ["farming:corn"]="air", ["farming:cucumber"]="air",
|
||||
["farming:melon_slice"]="air", ["farming:potato"]="air", ["farming:pumpkin_slice"]="air", ["farming:raspberries"]="air", ["farming:rhubarb"]="air",
|
||||
["farming:tomato"]="air", ["farming:seed_cotton"]="air", ["farming:seed_wheat"]="air",["default:papyrus"]="air", ["farming:trellis"]="air",
|
||||
["farming:grapes"]="farming:trellis", ["farming:beanpole"]="air", ["farming:beans"]="farming:beanpole",
|
||||
}
|
||||
|
||||
--- Returns a list of areas that include the provided position.
|
||||
function areas:getAreasAtPos(pos)
|
||||
local res = {}
|
||||
@ -57,9 +64,30 @@ function areas:canInteract(pos, name)
|
||||
return true
|
||||
end
|
||||
local owned = false
|
||||
if pos == nil then return not owned end -- pour éviter crash avec nénuphar
|
||||
for _, area in pairs(self:getAreasAtPos(pos)) do
|
||||
if area.owner == name or area.open then
|
||||
return true
|
||||
elseif area.openfarming then
|
||||
-- if area is openfarming
|
||||
local node = minetest.get_node(pos).name
|
||||
if not minetest.registered_nodes[node] then return false end
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if not player then return false end
|
||||
local wstack = player:get_wielded_item():get_name()
|
||||
if wstack == "" then wstack = "hand" end
|
||||
|
||||
--on_dig
|
||||
if minetest.get_item_group(node, "plant") == 1 and (wstack == "hand" or minetest.registered_tools[wstack]) then
|
||||
return true
|
||||
end
|
||||
|
||||
--on_place
|
||||
if plants[wstack] ~= nil and plants[wstack] == node then
|
||||
return true
|
||||
end
|
||||
|
||||
owned = true
|
||||
else
|
||||
owned = true
|
||||
end
|
||||
@ -126,3 +154,73 @@ function areas:canInteractInArea(pos1, pos2, name, allow_open)
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
|
||||
function areas:canMakeArea(pos1, pos2, name) --MFF crabman(25/02/2016) fix areas in areas
|
||||
if name and minetest.check_player_privs(name, self.adminPrivs) then
|
||||
return true
|
||||
end
|
||||
areas:sortPos(pos1, pos2)
|
||||
|
||||
local id_areas_intersect = {}
|
||||
local areas = self:getAreasIntersectingArea(pos1, pos2)
|
||||
|
||||
if not areas then return true end
|
||||
|
||||
for id, area in pairs(areas) do
|
||||
if area.owner == name and self:isSubarea(pos1, pos2, id) then
|
||||
return true
|
||||
end
|
||||
if not area.open and not self:isAreaOwner(id, name) then
|
||||
table.insert(id_areas_intersect, id)
|
||||
end
|
||||
end
|
||||
|
||||
if #id_areas_intersect > 0 then
|
||||
return false, id_areas_intersect[1]
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
--MFF crabman(5/03/2016 ) return special area pos if a spawn is set.
|
||||
--1 party (2 party in beds mod)
|
||||
function areas:getSpawn(pos)
|
||||
for _, area in pairs(areas:getAreasAtPos(pos)) do
|
||||
if area.spawn and area.spawn.x then
|
||||
return area.spawn
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
--MFF DEBUT crabman(17/09/2015 ) respawn player in special area(event) if a spawn is set.
|
||||
--1 party (2 party in beds mod)
|
||||
local dead_players = {}
|
||||
minetest.register_on_dieplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
if not player_name then return end
|
||||
local pos = player:getpos()
|
||||
if pos then
|
||||
dead_players[player_name] = pos
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
function areas:onRespawn(player)
|
||||
local player_name = player:get_player_name()
|
||||
if not player_name or not dead_players[player_name] then return false end
|
||||
local pos = dead_players[player_name]
|
||||
dead_players[player_name] = nil
|
||||
if pos then
|
||||
for _, area in pairs(areas:getAreasAtPos(pos)) do
|
||||
if area.spawn then
|
||||
player:setpos(area.spawn)
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
--FIN
|
||||
|
Reference in New Issue
Block a user